2016-04-03 2 views
0

Ich frage mich, wann man eine Beziehung zwischen einer Entitätsmenge und einer Beziehung mit einer ternären Beziehung darstellen würde? Ich verstehe den Vorteil der Aggregation, aber warum sollte ich es verwenden, wenn in der Beziehung zwischen dem Entitätssatz und dem Beziehungssatz kein Attribut vorhanden ist? Zum Beispiel arbeitet ein Student (mit einem Studenten und einem Namen) an einem Projekt (mit PID, Startdatum und Enddatum) und jedes Projekt, an dem ein Student arbeitet, hat einen betreuenden Professor. Jedes Projekt muss nur einen Professor als Supervisor haben. Die Supervisor-Beziehung hat kein Attribut, das einzigartig ist, aber mir wurde gesagt, dass die Aggregation verwendet werden sollte, aber warum?Wann sollte in RDBMS eine ternäre Beziehung anstelle einer Aggregation verwendet werden?

Antwort

1

Fall 1, Binary Besitz jedes Projekt nur ein Student und ein prof (1,1) (Ternary auf Projekt)

Student(sid,..) 
Professor(pid,..) 
Project(pid,sid,..) 

Fall 2 hat, hat jedes Projekt mehr als einen Student und ein prof, jeden Student hat ein Projekt. (1, N) (Ternary auf Projekt Aggregieren student)

Student(sid,pid,...) 
Professor(pid,..) 
Project(pid,..) 

Fall 3 jedes Projekt kann mehr als einen Teilnehmer hat, und jeder Schüler kann mehr als ein Projekt (N, N) (Aggregat)

Student(sid,...) 
Professor(pid,..) 
Project(pid,..) 
StudentProject(pid,sud) //One entry for each student working on a project 

Wenn Sie aufgefordert wurden, ein Aggregat für eine Entität ohne eine (N, N) -Beziehung zu verwenden, könnte dies eine Form der Zukunftssicherung sein.

Der Unterschied liegt in welcher Tabelle Sie die zu projizierende Beziehung speichern sollten.

+0

Vielleicht um klarer zu sein, fragte ich nach einer ternären Beziehung zwischen dem Professor, works_in und dem Studenten. Ich bin ein wenig verwirrt mit Ihrer Antwort – prance

+0

Das ER Diagramm muss einer relationalen Datenbank zugeordnet werden, ich habe 3 verschiedene Tabellenlayouts angegeben. Die Beziehung gilt auch dann, wenn die Beziehung keine Attribute enthält. Aggregation beschreibt eine Liste von Entitäten in einer Beziehung. Wenn es nur eine (1,1) Abbildung der Beziehung gibt, ist es sinnlos zu aggregieren, weil sie als Besitz dargestellt werden kann (Fall 1), wenn sie (1, N) auf (A, B), die Kante speichert in Tabelle A, wenn es (N, N) ist, erstellen Sie eine Tabelle für die Kante. – awiebe

+0

Wenn Sie aufgefordert wurden, eine aggregierte Tabelle zu verwenden, liegt das wahrscheinlich daran, dass sie erwarten, dass die Beziehung (N, N0 in der Zukunft) wird. – awiebe

1

Aggregation ist nicht nur für den Fall gibt es ein Attribut in der Beziehung, ternäre in einigen Fällen restriktiver ist, erklärt krank mit einem Beispiel:

Angenommen, Sie haben eine kleine Datenbank für Scheduling-Klassen in verschiedenen Terminen verwendet haben und weisen Lehrer dieser Klassen zu diesen Zeitpunkten, ternäre Beziehung mit wäre es so etwas wie das aussehen:

ERD: https://i.stack.imgur.com/8FQ87.png

CREATE TABLE teacher 
{ 
    teacher_id int PRIMARY KEY 
} 

CREATE TABLE class 
{ 
    class_id int PRIMARY KEY 
} 

CREATE TABLE date 
{ 
    date_id int PRIMARY KEY 
} 

CREATE TABLE teaching_class_in_date 
{ 
    date_id int, 
    class_id int, 
    teacher_id, 
    constraint teaching_class_in_date_PK PRIMARY KEY (date_id,class_id,teacher_id) 
    constraint teacher_FK FOREIGN KEY (teacher_id) references teacher (teacher_id) 
    constraint class_FK FOREIGN KEY (class_id) references class (class_id) 
    constraint date_FK FOREIGN KEY (date_id) references date (date_id) 
} 

Das bedeutet, dass, wenn Sie einen neuen cl planen Bei einem Lehrer brauchst du alle drei Sätze in Lehrer, Klasse und Datum vorher. Aber was ist, wenn Sie zuerst eine Klasse zu einem bestimmten Datum zuweisen möchten, aber noch nicht sicher über den Lehrer?

Sie haben 2 Optionen, eine, die ich in der Regel in einer unordentlichen Unternehmen Datenbanken sehen, ist eine Dummy-Datensatz in der Lehrer-Tabelle zu jeder neuen Klasse zu einem bestimmten Zeitpunkt zuzuordnen, wenn Sie noch nicht sicher über den Lehrer sind, und Es wird in der GUI als "Standard" oder "leer" angezeigt. Option 2, machen Sie die Teacher_id nicht Teil des Primärschlüssels und lassen Sie Nullwerte für den Fremdschlüssel teacher_id zu.

Beide sind schlechte Entscheidungen, die zweite ist schlimmer, da es die Datenbank dritte Normalform bricht.

dies zu beheben Sie Aggregation wie folgt verwenden können:

ERD: https://i.stack.imgur.com/wAEXF.png

So, jetzt hast du eine zusätzliche Tabelle haben:

CREATE TABLE class_in_date 
{ 
    date_id int, 
    class_id int, 
    constraint class_in_date_PK PRIMARY KEY (date_id,class_id) 
    constraint class_FK FOREIGN KEY (class_id) references class (class_id) 
    constraint date_FK FOREIGN KEY (date_id) references date (date_id) 
} 

Nun können Sie die beiden zuweisen, ohne sich Gedanken über den Lehrer.Es kommt alles auf Anforderungen an. Wenn ich nicht die Anforderung geschaffen hätte, eine Klasse zu einem bestimmten Zeitpunkt ohne einen Lehrer vorher zuzuweisen, wäre eine ternäre Beziehung ausreichend gewesen.

Hoffe das half!

Verwandte Themen