885 Stimmen

Was ist der Unterschied zwischen identifizierenden und nicht-identifizierenden Beziehungen?

Ich habe die Unterschiede noch nicht ganz begriffen. Können Sie beide Konzepte beschreiben und Beispiele aus der Praxis anführen?

2 Stimmen

Gute Frage, das Rad muss nicht neu erfunden werden: Peter Chen. Das Entity-Relationship-Modell, Auf dem Weg zu einer einheitlichen Sicht auf Daten, 1976 § 2.3.2: " Wenn Beziehungen zur Identifizierung der Entitäten verwendet werden, sprechen wir von einer schwachen Entitätsbeziehung. Wenn keine Beziehungen zur Identifizierung der Entitäten verwendet werden, sprechen wir von einer regulären Entitätsbeziehung. ". Die Frage der OP läuft auf Folgendes hinaus: Was sind schwache/regelmäßige Entitätsbeziehungen? .

16voto

Skarllot Punkte 715

Nicht-identifizierende Beziehung

Eine nicht-identifizierende Beziehung bedeutet, dass ein Kind mit einem Elternteil verwandt ist, aber für sich allein identifiziert werden kann.

PERSON    ACCOUNT
======    =======
pk(id)    pk(id)
name      fk(person_id)
          balance

Die Beziehung zwischen ACCOUNT und PERSON ist nicht identifizierend.

Identifizierung der Beziehung

Eine identifizierende Beziehung bedeutet, dass der Elternteil benötigt wird, um dem Kind eine Identität zu geben. Das Kind existiert ausschließlich wegen der Eltern.

Das bedeutet, dass der Fremdschlüssel auch ein Primärschlüssel ist.

ITEM      LANGUAGE    ITEM_LANG
====      ========    =========
pk(id)    pk(id)      pk(fk(item_id))
name      name        pk(fk(lang_id))
                      name

Die Beziehung zwischen ITEM_LANG und ITEM ist identifizierend. Und auch zwischen ITEM_LANG und LANGUAGE.

3 Stimmen

Inwiefern sind PERSON und ACCOUNT nicht identifizierbar? Wie kann ACCOUNT ohne PERSON existieren?

0 Stimmen

Warum gibt es keine Antwort auf den vorherigen Kommentar? @MrRobot9

2 Stimmen

"Wieso sind PERSON und ACCOUNT nicht identifizierend?" Weil sie als solche modelliert sind. Ein Konto kann identifiziert werden, ohne person_id zu kennen. Warum ist es so modelliert? Weil ein Konto während seiner Lebensdauer eine andere Person als Eigentümer haben kann. Andererseits kann ein ITEM_LANG nicht während seiner Lebensdauer ein anderes ITEM haben. Obwohl man verschiedene Kombinationen haben kann, sind ihre Identitäten im Gegensatz zur Konto-Person-Beziehung unterschiedlich.

15voto

Accountant م Punkte 5859

Antwort von user287724 gibt das folgende Beispiel für die Beziehung zwischen Buch und Autor:

Ein Buch wird jedoch von einem Autor geschrieben, und der Autor könnte mehrere Bücher geschrieben haben. Aber das Buch muss von einem Autor geschrieben werden, es kann nicht ohne einen Autor existieren. Daher ist die Beziehung zwischen dem Buch und dem Autor eine identifizierende Beziehung.

Dies ist ein sehr verwirrendes Beispiel und ist definitiv kein gültiges Beispiel für eine identifying relationship .

Ja, eine book kann nicht geschrieben werden, ohne dass mindestens ein author aber die author (der Fremdschlüssel) der Datei book es NICHT IDENTIFIZIEREND die book im books Tisch!

Sie können die author (FK) aus dem book Zeile und kann die Buchzeile dennoch durch ein anderes Feld identifizieren ( ISBN , ID , ...usw) , ABER NICHT der Autor des Buches!!

Ich denke, ein gutes Beispiel für eine identifying relationship wäre die Beziehung zwischen (Produkttabelle) und einer (Tabelle mit spezifischen Produktdetails) 1:1

products table
+------+---------------+-------+--------+
|id(PK)|Name           |type   |amount  |
+------+---------------+-------+--------+
|0     |hp-laser-510   |printer|1000    |
+------+---------------+-------+--------+
|1     |viewsonic-10   |screen |900     |
+------+---------------+-------+--------+
|2     |canon-laser-100|printer|200     |
+------+---------------+-------+--------+

printers_details table
+--------------+------------+---------+---------+------+
|Product_ID(FK)|manufacturer|cartridge|color    |papers|
+--------------+------------+---------+---------+------+
|0             |hp          |CE210    |BLACK    |300   |
+--------------+------------+---------+---------+------+
|2             |canon       |MKJ5     |COLOR    |900   |
+--------------+------------+---------+---------+------+
* please note this is not real data

In diesem Beispiel ist die Product_ID im printers_details Tabelle als FK betrachtet wird, verweist die products.id Tisch und ALSO eine PK im printers_details Tabelle ist dies eine identifizierende Beziehung, da die Product_ID (FK) in der Druckertabelle IST IDENTIFIZIEREND die Zeile in der untergeordneten Tabelle, können wir nicht die product_id aus der untergeordneten Tabelle, weil wir die Zeile nicht mehr identifizieren können, weil wir ihren Primärschlüssel verloren haben

Wenn Sie es in 2 Zeilen schreiben wollen:

eine identifizierende Beziehung ist die Beziehung, wenn die FK im Kindtabelle als PK (oder Identifikator) in der Kindtabelle betrachtet wird, während immer noch auf die Elterntabelle verweist

Ein weiteres Beispiel wenn Sie 3 Tabellen (Importe - Produkte - Länder) in einer Import- und Exportdatenbank für ein bestimmtes Land haben

El import ist die untergeordnete Tabelle, die diese Felder enthält (die product_id (FK), die country_id (FK) , den Betrag der Einfuhren , den Preis , die eingeführten Einheiten , die Art des Transports (Luft, See) ) we may use the ( produkt_id , the country_id`), um jede Zeile der Importe zu identifizieren, "wenn sie alle im selben Jahr sind", wobei die beiden Spalten zusammen einen Primärschlüssel in der untergeordneten Tabelle (Importe) bilden und auch auf die übergeordneten Tabellen verweisen können.

Bitte, ich bin froh, dass ich endlich das Konzept der identifying relationship y non identifying relationship Sagen Sie mir also bitte nicht, dass ich mich mit all diesen Abstimmungen für eine völlig ungültiges Beispiel

Ja, logischerweise kann ein Buch nicht ohne einen Autor geschrieben werden, aber ein Buch kann ohne den Autor identifiziert werden, ja es kann sogar nicht mit dem Autor identifiziert werden!

Sie können den Autor zu 100% aus der Buchzeile entfernen und das Buch trotzdem identifizieren! .

5 Stimmen

Sie haben Recht, wenn Sie nur Tabellenbücher und Autoren haben. Da gibt es keine identifizierende Beziehung. Wenn Sie jedoch eine dritte Tabelle verwenden, um die Viele-zu-Viele-Beziehung darzustellen, besteht der Primärschlüssel dieser dritten Tabelle aus zwei Fremdschlüsseln, die auf die Tabelle books und die Tabelle authors verweisen. Diese Tabelle hat eine identifizierende Beziehung sowohl zu Büchern als auch zu Autoren. Siehe mein Beispiel in stackoverflow.com/questions/2814469/

6voto

Daishi Punkte 10471

Wenn man davon ausgeht, dass das untergeordnete Element gelöscht werden sollte, wenn das übergeordnete Element gelöscht wird, dann handelt es sich um eine identifizierende Beziehung.

Wenn das untergeordnete Element beibehalten werden soll, obwohl das übergeordnete Element gelöscht wurde, handelt es sich um eine nicht identifizierende Beziehung.

Ich habe z. B. eine Ausbildungsdatenbank mit Auszubildenden, Ausbildungen, Diplomen und Ausbildungseinheiten:

  • die Auszubildenden haben eine identifizierende Beziehung zu den Trainingseinheiten
  • Trainings haben eine identifizierende Beziehung zu Trainingseinheiten
  • aber die Auszubildenden haben eine nicht-identifizierende Beziehung zu den Diplomen

Nur Schulungen sollten gelöscht werden, wenn einer der zugehörigen Teilnehmer, eine Schulung oder ein Abschlusszeugnis gelöscht wird.

4voto

chanchal dixit Punkte 41

Die identifizierende Beziehung bedeutet, dass die untergeordnete Entität vollständig von der Existenz der übergeordneten Entität abhängig ist.

Die Personenkontentabelle wird nur durch das Vorhandensein von Konto- und Personentabelle identifiziert.

Die nicht identifizierende Beziehung bedeutet, dass die untergeordnete Tabelle nicht durch die Existenz der übergeordneten Tabelle identifiziert wird.

Eine Tabelle wie accountType und account.accountType ist nicht mit der Existenz einer Kontotabelle identifiziert.

3voto

Daniel Pinheiro Punkte 31

Wie im unten stehenden Link gut erklärt, ist eine identifizierende Beziehung so etwas wie eine schwache Entitätstyp-Beziehung zu ihrer Muttergesellschaft im ER-Konzeptmodell. CADs im UML-Stil für die Datenmodellierung verwenden keine ER-Symbole oder -Konzepte, und die Art der Beziehungen sind: identifizierend, nicht-identifizierend und unspezifisch.

Identifizierende Beziehungen sind Eltern-Kind-Beziehungen, bei denen das Kind eine Art schwache Entität ist (selbst im traditionellen ER-Modell wird es als identifizierende Beziehung bezeichnet), die keinen echten Primärschlüssel hat und daher nicht eindeutig identifiziert werden kann. Jeder Zugriff auf die untergeordnete Tabelle ist im physischen Modell abhängig (auch semantisch) vom Primärschlüssel der übergeordneten Tabelle, der sich in einen Teil oder die Gesamtheit des Primärschlüssels der untergeordneten Tabelle verwandelt (der auch ein Fremdschlüssel ist), was im Allgemeinen zu einem zusammengesetzten Schlüssel auf der untergeordneten Seite führt. Die eventuell vorhandenen Schlüssel des Kindes selbst sind nur Pseudo- oder Teilschlüssel, die nicht ausreichen, um eine Instanz dieses Entitätstyps oder Entitätssatzes ohne den PK des Elternteils zu identifizieren.

Nicht-identifizierende Beziehungen sind gewöhnliche (partielle oder totale) Beziehungen völlig unabhängiger Entitätsmengen, deren Instanzen nicht von den Primärschlüsseln der anderen abhängen, um eindeutig identifiziert zu werden, obwohl sie Fremdschlüssel für partielle oder totale Beziehungen benötigen könnten, aber nicht als Primärschlüssel des Kindes. Das Kind hat seinen eigenen Primärschlüssel. Der Elternteil idem. Beide unabhängig voneinander. Abhängig von der Kardinalität der Beziehung geht der PK des einen als FK an den anderen (N-Seite), und wenn partiell, kann er null sein, wenn total, muss er nicht null sein. Aber bei einer solchen Beziehung wird der FK nie auch der PK des Kindes sein, wie es bei einer identifizierenden Beziehung der Fall ist.

http://docwiki.embarcadero.com/ERStudioDA/XE7/en/Creating_and_Editing_Relationships

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X