Immer noch verwirrt über das Identifizieren und Nicht-Identifizieren von Beziehungen

76

Ich habe mich also mit dem Identifizieren und Nicht-Identifizieren von Beziehungen in meinem Datenbankdesign befasst, und einige der Antworten auf SO scheinen mir zu widersprechen. Hier sind die zwei Fragen, die ich betrachte:

  1. Was ist der Unterschied zwischen identifizierenden und nicht identifizierenden Beziehungen?
  2. Probleme bei der Entscheidung, eine Beziehung zu identifizieren oder nicht zu identifizieren

Wenn ich mir die besten Antworten auf jede Frage ansehe, bekomme ich anscheinend zwei verschiedene Vorstellungen davon, was eine identifizierende Beziehung ist.

Die Antwort der ersten Frage besagt, dass eine identifizierende Beziehung "eine Situation beschreibt, in der das Vorhandensein einer Zeile in der untergeordneten Tabelle von einer Zeile in der übergeordneten Tabelle abhängt". Ein Beispiel hierfür ist: "Ein Autor kann viele Bücher schreiben (1-zu-n-Beziehung), aber ein Buch kann ohne einen Autor nicht existieren." Das macht für mich Sinn.

Wenn ich jedoch die Antwort auf Frage zwei lese, bin ich verwirrt, als es heißt: "Wenn ein Kind seinen Elternteil identifiziert, ist es eine identifizierende Beziehung." In der Antwort werden dann Beispiele wie die Sozialversicherungsnummer (identifiziert eine Person) angegeben, eine Adresse jedoch nicht (da viele Personen an einer Adresse wohnen können). Für mich klingt dies eher nach einer Entscheidung zwischen Primärschlüssel und Nicht-Primärschlüssel.

Mein eigenes Bauchgefühl (und zusätzliche Recherchen auf anderen Websites) deuten darauf hin, dass die erste Frage und ihre Antwort korrekt sind. Ich wollte jedoch überprüfen, bevor ich fortfuhr, da ich nichts Falsches lernen möchte, während ich daran arbeite, das Datenbankdesign zu verstehen. Danke im Voraus.

JasCav
quelle

Antworten:

154

Die technische Definition einer identifizierenden Beziehung lautet, dass der Fremdschlüssel eines Kindes Teil seines Primärschlüssels ist.

CREATE TABLE AuthoredBook (
  author_id INT NOT NULL,
  book_id INT NOT NULL,
  PRIMARY KEY (author_id, book_id),
  FOREIGN KEY (author_id) REFERENCES Authors(author_id),
  FOREIGN KEY (book_id) REFERENCES Books(book_id)
);

Sehen? book_idist ein Fremdschlüssel, aber es ist auch eine der Spalten im Primärschlüssel. Diese Tabelle hat also eine identifizierende Beziehung zu der Tabelle, auf die verwiesen wird Books. Ebenso hat es eine identifizierende Beziehung zu Authors.

Ein Kommentar zu einem YouTube-Video hat eine identifizierende Beziehung zum jeweiligen Video. Das video_id sollte Teil des Primärschlüssels der CommentsTabelle sein.

CREATE TABLE Comments (
  video_id INT NOT NULL,
  user_id INT NOT NULL,
  comment_dt DATETIME NOT NULL,
  PRIMARY KEY (video_id, user_id, comment_dt),
  FOREIGN KEY (video_id) REFERENCES Videos(video_id),
  FOREIGN KEY (user_id) REFERENCES Users(user_id)
);

Es kann schwierig sein, dies zu verstehen, da es heutzutage so üblich ist, nur einen seriellen Ersatzschlüssel anstelle eines zusammengesetzten Primärschlüssels zu verwenden:

CREATE TABLE Comments (
  comment_id SERIAL PRIMARY KEY,
  video_id INT NOT NULL,
  user_id INT NOT NULL,
  comment_dt DATETIME NOT NULL,
  FOREIGN KEY (video_id) REFERENCES Videos(video_id),
  FOREIGN KEY (user_id) REFERENCES Users(user_id)
);

Dies kann Fälle verdecken, in denen die Tabellen eine identifizierende Beziehung haben.

Ich würde SSN nicht als identifizierende Beziehung betrachten. Einige Leute existieren, haben aber keine SSN. Andere Personen können eine Datei einreichen, um eine neue SSN zu erhalten. Die SSN ist also wirklich nur ein Attribut, nicht Teil des Primärschlüssels der Person.


Kommentar von @Niels:

Wenn wir also einen Ersatzschlüssel anstelle eines zusammengesetzten Primärschlüssels verwenden, gibt es keinen nennenswerten Unterschied zwischen einer identifizierenden oder einer nicht identifizierenden Beziehung?

Ich gehe davon aus. Ich zögere, Ja zu sagen, da wir die logische Beziehung zwischen den Tabellen nicht mithilfe eines Ersatzschlüssels geändert haben . Das heißt, Sie können immer noch keinen Kommentar abgeben, ohne auf ein vorhandenes Video zu verweisen. Das bedeutet aber nur, dass video_id NICHT NULL sein darf. Und der logische Aspekt ist für mich wirklich der Punkt, Beziehungen zu identifizieren.

Aber es gibt auch einen physischen Aspekt bei der Identifizierung von Beziehungen. Und das ist die Tatsache, dass die Fremdschlüsselspalte Teil des Primärschlüssels ist (der Primärschlüssel ist nicht unbedingt ein zusammengesetzter Schlüssel, es kann sich um eine einzelne Spalte handeln, die sowohl der Primärschlüssel von Kommentaren als auch der Fremdschlüssel für die Videos-Tabelle ist , aber das würde bedeuten, dass Sie nur einen Kommentar pro Video speichern können.

Das Identifizieren von Beziehungen scheint nur für das Diagramm von Entitätsbeziehungen wichtig zu sein, und dies kommt in GUI-Datenmodellierungswerkzeugen vor.

Bill Karwin
quelle
2
Wenn wir also einen Ersatzschlüssel anstelle eines zusammengesetzten Primärschlüssels verwenden, gibt es keinen nennenswerten Unterschied zwischen einer identifizierenden oder einer nicht identifizierenden Beziehung?
Csblo
Also hat jede schwache Entität eine identifizierende Beziehung?
Vishnu
Gute Antwort, aber können Sie bitte diese Frage beantworten, warum es im ERD-Design überhaupt wichtig ist? stackoverflow.com/questions/34846418/…
Tripartio
@Ochado, ich beantworte keine Fragen mehr zum Stapelüberlauf.
Bill Karwin
1
:) Ich glaube, ich arbeite heute ein bisschen mit einem logischen Modell, wenn ich es normalerweise nicht tue. So viele zu viele, wo ein Nachschlagetisch dazwischen liegen würde, werfen mir einen Schraubenschlüssel hinein. Schönen Mittwoch. Vielen Dank für das Teilen Ihres Wissens.
Bill Rosmus
19

"da ich nichts falsches lernen will".

Nun, wenn Sie das wirklich so meinen, können Sie aufhören, sich Gedanken über die Umgangssprache und die Terminologie der Notaufnahme zu machen. Es ist ungenau, verwirrt, verwirrend, überhaupt nicht allgemein vereinbart und größtenteils irrelevant.

ER ist ein Bündel von Rechtecken und geraden Linien, die auf ein Stück Papier gezeichnet sind. ER soll bewusst ein Mittel zur informellen Modellierung sein. Als solches ist es ein wertvoller erster Schritt im Datenbankdesign, aber es ist auch genau das: ein erster Schritt.

Niemals darf ein ER-Diagramm die Genauigkeit, Genauigkeit und Vollständigkeit eines in D formell formulierten Datenbankdesigns erreichen.

Erwin Smout
quelle
7
Wenn ich Ihre Antwort richtig lese, ist die ER-Modellierung nur ein Werkzeug zur Konzeption der Datenbank (ähnlich wie die UML-Modellierung ein Werkzeug zur Konzeption von Softwaresystemen ist). Jedes Tool ist zwar hilfreich, es gibt jedoch einige Einschränkungen hinsichtlich der eigenen Syntax und Probleme, die zu weiterer Verwirrung führen können. An diesen Aspekt hatte ich nicht gedacht. Vielen Dank.
JasCav
1
Wenn ER "Entity-Relationship" bedeutet, was bedeutet D?
Quantme
3
D ist die Familie aller Sprachen, die die in "Datenbanken, Typen und das relationale Modell" und / oder "Das dritte Manifest" festgelegten Regeln einhalten.
Erwin Smout
1
Das dritte Manifest, kurz TTM, von Chris Date & Hugh Darwen, ist ihre Blaupause dafür, wie eine Datenbankverarbeitungssprache im 21. Jahrhundert aussehen sollte. Es definiert die Regeln und Anforderungen, an die sich die Sprache des 21. Jahrhunderts halten muss. Eine dieser Anforderungen ist die Fähigkeit, jede Datenbankbeschränkung formal präzise auszudrücken / zu deklarieren. Verstehen Sie "Datenbankbeschränkung" nicht falsch, um "nur die Arten von Einschränkungen zu bedeuten, die SQL-Engines des 20. Jahrhunderts unterstützen können". Nein, "Datenbankbeschränkung" bedeutet wirklich "jede Einschränkung, was auch immer die Datenbank regelt.
Erwin Smout
2
Diese formal präzise Art, "jede Datenbankbeschränkung, was auch immer" auszudrücken, kommt der Sprache / Syntax der Datenbankdesignspezifikation, die in "Angewandte Mathematik für Datenbankprofis" verwendet wird, syntaktisch ziemlich nahe. Es wird (unvermeidlich) ganz anders aussehen als die Constraint-Spezifikationstechniken traditionellerer Methoden wie ERD und sogar von Halpin ORM (deren Unterstützung für die Constraint-Spezifikation weitaus vollständiger ist als die von ERD).
Erwin Smout
11

Identifizierende / nicht identifizierende Beziehungen sind Konzepte in der ER-Modellierung - eine Beziehung ist eine identifizierende, wenn sie durch einen Fremdschlüssel dargestellt wird, der Teil des Primärschlüssels der Referenzierungstabelle ist. Dies ist in Bezug auf die relationale Modellierung normalerweise von sehr geringer Bedeutung, da Primärschlüssel im relationalen Modell und in SQL-Datenbanken keine besondere Bedeutung oder Funktion haben, wie dies in einem ER-Modell der Fall ist.

Angenommen, Ihre Tabelle erzwingt zwei Kandidatenschlüssel, A und B. Angenommen, A ist auch ein Fremdschlüssel in dieser Tabelle. Die so dargestellte Beziehung wird als "identifizierend" angesehen, wenn A als "Primärschlüssel" bezeichnet wird, aber nicht als identifizierend, wenn B der Primärschlüssel ist. Form, Funktion und Bedeutung der Tabelle sind jedoch jeweils identisch! Aus diesem Grund halte ich das identifizierende / nicht identifizierende Konzept meiner Meinung nach nicht für sehr wichtig.

nvogel
quelle
+1 - Danke, dass du das geklärt hast! Ich (und ein anderer Mitarbeiter, der ebenfalls nicht mit dem Datenbankdesign vertraut ist) hatten damit zu kämpfen, da wir nicht sahen, warum das eine oder andere wichtig war, da es den gleichen Effekt erzielte. Das hilft wirklich.
JasCav
Könnten Sie bitte diese Frage beantworten oder kommentieren, warum sie im ERD-Design überhaupt wichtig ist, um Ihre Antwort zu verfolgen? stackoverflow.com/questions/34846418/…
Tripartio
9

Ich glaube, der einzige Unterschied zwischen einer identifizierenden und einer nicht identifizierenden Beziehung besteht in der Nullbarkeit des Fremdschlüssels. Wenn ein FK nicht NULL sein kann, ist die Beziehung, die er darstellt, identifizierend (Kind kann nicht ohne Elternteil existieren), andernfalls ist es nicht identifizierend.

Pankaj Jha
quelle
1
Aber in der Antwort von @ bill-karwin hier sagte er, dass eine nicht identifizierende Beziehung optional oder obligatorisch sein kann
Ahmed Mostafa Abdel-Baky
7

Ein Teil des Problems ist hier die Verwirrung der Terminologie. Das Identifizieren von Beziehungen ist nützlich, um lange Verknüpfungspfade zu vermeiden.

Die beste Definition, die ich gesehen habe, ist "eine identifizierende Beziehung enthält die PK ab dem Elternteil in der untergeordneten PK. Mit anderen Worten, die PK des Kindes enthält die FK gegenüber dem Elternteil sowie die" tatsächliche "PK des Kindes.

Gnackenson
quelle
3
+1 für "Identifizieren von Beziehungen ist nützlich, um lange Verknüpfungspfade zu vermeiden". Es wäre großartig, wenn Sie mehr darauf eingehen würden.
Mrmashal
1

Ja, gehen Sie mit dem ersten, aber ich glaube nicht, dass der zweite dem ersten widerspricht. Es ist nur ein bisschen verwirrend formuliert ..

AKTUALISIEREN:

Nur überprüft - die Antwort der zweiten Frage ist in einigen Annahmen falsch. Der Buchautor ist nicht unbedingt eine 1: n-Beziehung, da es sich um m: n handeln könnte. In relationalen Datenbanken, die eine Schnittstellentabelle für diese m: n-Beziehung erstellen, erhalten Sie identifizierende Beziehungen zwischen der Schnittpunkttabelle und diesen beiden anderen Tabellen.

Marianboda
quelle
1

Das Identifizieren einer Beziehung gibt eine bis viele optionale Beziehungen aus, wenn wir die Beziehung zwischen Eltern und Kindern definieren müssen. Außerdem gibt es nur eine Beziehung von Kind zu Eltern. Da der Primärschlüssel der Elternentität der Teil des Primärschlüssels der Kindentität ist, Die untergeordnete Entitätsinstanz identifiziert die übergeordnete Entitätsinstanz. Sie wird in einem Diagramm durch eine durchgezogene Linie dargestellt.

Für die Existenz einer untergeordneten Entitätsinstanz sollte eine übergeordnete Entitätsinstanz vorhanden sein, aber jede Entitätsinstanz in der untergeordneten Entität kann mit vielen Entitätsinstanzen der übergeordneten Entität verknüpft sein. Dies ist der Grund, warum der Primärschlüssel von Die übergeordnete Entität ist zwar der Fremdschlüssel der untergeordneten Entität, die untergeordnete Entität verwendet jedoch nicht den Primärschlüssel der übergeordneten Entität als Primärschlüssel. Sie verfügt über einen eigenen Primärschlüssel. Viele zu viele Beziehungen existieren im Diagramm der realen Welt nicht. also muss es gelöst werden

Kumar
quelle
1

Eine identifizierende Beziehung ist in der Tat ein ERD-Konzept, da dies der Bereich der konzeptuellen Modellierung ist und unser Verständnis des „Universums des Diskurses“ modelliert. Es handelt sich um eine Eltern-Kind-Beziehung, bei der wir die Tatsache modellieren, dass die Identität jedes untergeordneten Objekts (zumindest teilweise) durch die Identität des übergeordneten Objekts festgestellt / bestimmt wird. Es ist daher obligatorisch und unveränderlich.

Ein Beispiel aus der Praxis ist die ständige Herausforderung, Menschen zu identifizieren. Die einzigartige Identität einer Person kann (teilweise) durch ihre Beziehung zu ihrer leiblichen Mutter und ihrem leiblichen Vater definiert werden. Wenn bekannt, sind dies unveränderliche Tatsachen. Daher ist die Beziehung zwischen leiblichem Elternteil und Kind insofern eine identifizierende Beziehung, als sie (unveränderlich) zur Definition der Identität des Kindes beiträgt.

Es sind diese Eigenschaften und die Verwendung relationaler DBMS-Konstrukte, die dazu führen, dass die PK des Kindes ein zusammengesetzter Schlüssel ist, der über FK die PK des Elternteils enthält. Als PK ist die Identität des Kindes obligatorisch und unveränderlich (sie kann sich nicht ändern). Eine 'Änderung' in einer PK instanziiert tatsächlich ein neues Objekt. Daher darf die PK nicht geändert werden können. Die Unveränderlichkeit einer PK sollte ebenfalls eingeschränkt werden. DB-Einschränkungen können verwendet werden, um diese Qualität von PKs zu implementieren.

Russell Searle
quelle