Ich weiß, wie man eine zu viele, viele zu viele Beziehungen in SQL Server erstellen, aber ist es möglich, eins zu eins Beziehung zu erstellen? Und ist es möglich, 1 zu 0 oder 1 Beziehung zu erstellen?Beziehungen in Sql
Antwort
Ja, setzten nur PRIMARY KEY
s beiden Entitäten in eine Verknüpfungstabelle, ein UNIQUE
Schlüssel auf beiden Entitäten zu definieren:
myrel(entityA, entityB, UNIQUE(entityA), UNIQUE(entityB))
Wenn also entityA = 1
-entityB = 2
verwendet ist:
entityA entityB
1 2
, Sie können weder entityA = 1
mit einer anderen entityB
, noch eine entityB = 2
an eine andere entityA
beziehen.
Wenn Relation symmetrischen (dh entityA
und entityB
gehören zu derselben Domäne und in Bezug entityA
zu entityB
bedeutet auch entityB
zu entityA
beziehen), definieren dann einen zusätzlichen CHECK
constrant:
entityA entityB
UNIQUE(entityA)
UNIQUE(entityB)
CHECK(entityA < entityB)
und transformieren die normalisierte Beziehung zu einer kanonischen mit dieser Abfrage:
SELECT entityA, entityB
FROM myrel
UNION
SELECT entityB, entityA
FROM myrel
Dies ist eine (0-1):(0-1)
Beziehung.
Wenn Sie es ein 1:1
Beziehung sein wollen, definieren Sie diese Tabelle eine Domäne für beide entityA
und entityB
sein:
myrel(entityA, entityB, UNIQUE(entityA), UNIQUE(entityB))
A(id, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES myrel (entityA))
B(id, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES myrel (entityB))
Durch das Entfernen der FOREIGN KEY
entweder aus Tabelle Definition, können Sie den entsprechenden Teil der Änderung Beziehung von 1
zu (0-1)
.
Ja, machen Sie einfach den Primär- oder Alternativschlüssel in der abhängigen Tabelle einen Fremdschlüssel zum Primärschlüssel in der Elterntabelle.
was ist mit 1 zu 0 oder 1 Beziehung? –
Was ich beschrieben habe, ist eine 1 zu 0 oder 1 Beziehung. Es muss kein Datensatz in der Kindtabelle für jede Zeile in der Elterntabelle sein ... –
Ja
TableA id PK
TableB id PK FK TableA
Was ist mit Modifizieren? Zum Beispiel Zimmer bezieht sich 1: 1 auf Manager, einige Manager wurde gefeuert, wie aktualisiert? – Dewfy
auch vergessen Sie einzigartige Einschränkung – Dewfy
Um es zu verwalten, müssen Sie entweder db Ebene oder auf Ihrem Datenzugriff Layer Ebene kaskadieren. – Ray
Es macht Spaß, aber es ist meine Lieblings Fragen zu Interview.
So haben Sie Tabelle A, B, die jeder von ihnen hat Primärschlüssel A_ID, B_ID. Fügen Sie einen beliebigen Fremdschlüssel hinzu. Lass es B: A_REF sein, also musst du nur eine eindeutige Einschränkung auf A_REF hinzufügen.
Zwei Möglichkeiten: 1) eine pk-pk 1: 1 Beziehung. Tabelle A und B haben beide eine PK. Erstelle ein FK von dem B-PK an die PK von A. Diese 'B' die FK Seite der 1 macht: 1-Beziehung:
oder
2) einen FK/UC-PK 1 1 Beziehung. Tabelle A hat eine PK und Tabelle B hat einen Fremdschlüssel zu A, aber FK in B befindet sich nicht auf der PK von B. Erstellen Sie jetzt eine UC auf dem FK-Feld (den FK-Feldern) in B.
was ist mit 1 zu 0 oder 1 Beziehung? –
Wie fügen Sie in Methode 1 einen neuen Eintrag in A und B ein? Und ist Methode 2 letztlich keine "1 zu 0 oder 1" Beziehung? –
@ArsenMkrt: Machen Sie den FK Nullwert. @ Jonathan: Methode 1 ist einfach zu einfügen. Da B von A abhängt, fügen Sie zuerst die Zeile in A und dann die Zeile in B ein. A zeigt nicht auf B, B zeigt nur auf A. Methode 2 ist keine 1..0.1-Beziehung, wenn Sie machen den FK nicht nullbar, er wird nur optional, wenn die FK-Seite optional ist. –
was ist mit 1 zu 0 oder 1 Beziehung? –