Ich versuche herauszufinden, ob es möglich ist, einen Fremdschlüssel auf diese Weise zu erstellen.Composite Foreign Key Frage
Zuerst gibt es zwei übergeordnete Tabellen in diesem Szenario.
Tabelle 1 hat eine PK int und eine weitere int-Spalte. In Kombination sind die beiden einzigartig.
Tabelle 2 hat eine PK int und eine weitere int-Spalte. In Kombination sind die beiden einzigartig.
Der paarweise Wert zwischen den beiden Ints ist, wie wir derzeit die untergeordneten Datensätze für jede Tabelle auswählen.
Tabelle 3 enthält einen Wert für die PK- und andere int-Spalte aus einer der ersten beiden Tabellen. Es ist zuverlässig auswählbar, da die beiden Felder, wenn beide bei einer Suche verwendet werden, für eine der obigen Tabellen eindeutig sind.
So suche ich ein FK oder möglicherweise zwei FK für dieses Szenario zu erstellen. Ich möchte in der Lage sein, kaskadierende Löschungen von einer der ersten Tabellen in die dritte Tabelle auszuführen, und möchte dies auch für die Entitätsbeziehungen in Entity Framework verwenden.
Bitte lassen Sie mich wissen, wenn dies keinen Sinn ergibt. Ich habe es mehrmals gelesen, und es ist so klar, wie ich es verstehe.
TABLE_A:
PK_FIELD int NOT NULL
OTHER_FIELD int NOT NULL, NOT IN TABLE_B.OTHER_FIELD
TABLE_B:
PK_FIELD int NOT NULL
OTHER_FIELD int NOT NULL, NOT IN TABLE_A.OTHER_FIELD
TABLE_C:
PK_FIELD int NOT NULL
OTHER_FIELD int NOT NULL IN (TABLE_A.OTHER_FIELD OR TABLE_B.OTHER_FIELD
Was Sie versuchen zu tun definieren ist TABLE_C, so dass Sie Updates Kaskade könnte und löscht zwischen den Tabellen:
Dank
Ja, das Problem damit ist, dass eins und zwei die Eltern sind. Sie haben beide verwandte Datensätze in 3, was ein FK, kein PK für diesen Tisch wäre. Es scheint ziemlich unmöglich zu sein, eine FK-Beschränkung zu verwenden. Danke für die Antwort! – Chrisb
IMO - Ihr Datenmodell ist dann kaputt. Tabelle 1 und Tabelle 2 sind nicht verwandt, aber Sie versuchen, sie in derselben Spalte in Tabelle 3 zu stopfen. Wenn Table1 und Table2 irgendwie zusammenhängen, sollte Table4 die Elterntabelle sein. –
Ich stimme völlig zu, aber ich habe keine Kontrolle darüber. Danke für die Kommentare, sie bestätigen, was ich komplett dachte. – Chrisb