2016-04-11 6 views
3

In einer vorhandenen SQL Server-Datenbank, jemand hat die folgende Definition:SQL Beziehung zwischen einer Primärschlüsselspalte und der gleichen Spalte

Tabelle Customer hat eine CustomerID Säule, die auch Identität. Dann haben sie eine Beziehung definiert, in der Customer.CustomerID Primärschlüssel ist und Customer.CustomerID auch Fremdschlüssel ist. I.e. Die Beziehung verweist auf dieselbe Tabelle und dieselbe Spalte.

Was ist der Zweck? Scheint mir völlig sinnlos, also plane ich, diese Beziehung aus der DB zu entfernen.

+0

Es könnte neue Zeilen macht das Hinzufügen eher schwierig. –

+0

Sind Sie sicher, dass es als Schlüssel und nicht als Index definiert wurde? –

+0

Ich habe das schon mal gesehen. Dies ist der Standardwert, wenn eine Fremdschlüsselbeziehung über den Tabellen-Designer in SSMS erstellt wird. Es passiert, wenn Sie vergessen, die Beziehung vor dem Speichern zu ändern. Es gibt keinen Grund für ein Feld, eine Beziehung mit sich selbst zu haben. –

Antwort

1

Die Beziehung eine rekursive Assoziation oder reflexive Beziehung genannt wird, müssen Sie diese Art von Beziehung, wenn Sie eine Beziehung zwischen zwei oder mehr Elemente des gleichen Typs präsentieren müssen.

Zum Beispiel: für eine Beziehung zwischen den Mitarbeitern zu präsentieren, könnte man zwei Tabellen Employee und Manager erstellen. Aber weil der Manager auch ein Angestellter ist, brauchen Sie nicht zwei Tabellen. Wir erstellen also eine rekursive Verknüpfung, die auf dieselbe Entität verweist.

More about recursive association

UPDATE

eine Spalte als PK und FK zugleich auch das Konzept der Vererbung darstellen könnten einstellen.

Zum Beispiel:

class Person { 
int ID; 
string name; 
} 

class Customer extends Person { 
String workPlace; 
} 

, dass die Tabellen Person und Kunden führen würde, wie unten aufgeführt:

Person 
------------ 
int id (PK) 
string name 

Employee 
-------------- 
int id (PK, FK) 
string workPlace 
+0

Wahr, aber OP gibt an, dass die 'CustomerID' FK-Spalte auch die PK-Spalte ist. In Ihrem Beispiel würde das bedeuten, dass jeder "Mitarbeiter" sein eigener "Manager" ist und das sich nicht ändern kann, also scheint es ziemlich sinnlos zu sein. Sie können nicht beide unterscheiden, wenn Sie nur eine Spalte haben. –

+0

Es hängt von der ** Kardinalität ** ab, wenn es "0..1" ist, bedeutet dies, dass ein Mitarbeiter einen Manager haben kann (und nicht muss). Die 'Kundennummer' ist FK und auch PK, da sie zu einem bestimmten Zeitpunkt einen normalen Kunden und zu einem anderen Zeitpunkt den relativen Kunden zu einem anderen Kunden darstellen kann. Sie sollten mit mehr Beispielen arbeiten, um den Grund für diese Beziehung zu verstehen. –

Verwandte Themen