Sollte ein Fremdschlüssel erstellt werden, die auf die übergeordnete Tabelle oder child-Tabelle?
Was ist der Unterschied? Wenn ich diese beiden Tabellen:
CREATE TABLE Account (Id int NOT NULL)
CREATE TABLE Customer (AccountId int NOT NULL)
Und ich will eine Fremdschlüssel-Verknüpfung der beiden, welches der folgenden soll ich tun und warum?
Option 1:
ALTER TABLE [dbo].[Customer] WITH CHECK
ADD CONSTRAINT [FK_Accounts_Customers] FOREIGN KEY([AccountId])
REFERENCES [dbo].[Account] ([Id])
Option 2:
ALTER TABLE [dbo].[Account] WITH CHECK
ADD CONSTRAINT [FK_Accounts_Customers] FOREIGN KEY([Id])
REFERENCES [dbo].[Customer] ([Id])
- Ich in der Regel legen Sie es auf eine Tabelle, die nicht Leben kann ohne die andere (wenn das zutrifft). Aber es wird davon abhängen, was auch immer Ihre Abfragen einfacher, was mehr Sinn macht, von einem Daten-konzeptioneller Sicht... und diese zwei whatevers kann sein gegenüber auch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hängt vom Kontext ab. Nicht alle Kunden haben einen client? Die eine ist die Muttergesellschaft? Es scheint wie ein Konto hat mehrere Kunden, in dem Fall die Referenz auf die Tabelle Customer.
Nun, das sagte, rufen Sie bitte die Entitäten
CustomerID
undAccountID
überall. Es mag redundant auf der primären Tabelle, aber die Namen sollten konsistent in das Modell.a)
Sie sollten dies tun sowiesob)
mit einem ORM-würden Sie wahrscheinlich nicht viel schreiben/alle T-SQLcustomers.id
- es ist klar genug. Wenn auf diese verwiesen wird als foreign_key Sieaccounts.customer_id
so gerne .Ich würde einen Fremdschlüssel von Kind zu den Eltern. Das tell-tale Frage ist: was geschieht, wenn Sie löschen müssen, um eine der Personen?
Einen FK (foreign key) teilt dem DBMS, das die Werte für subrows für eine Spalte der Liste erscheinen müssen, an anderer Stelle als Werte für subrows für eine Spalte der Liste. Wenn das passiert (und es ist nicht schon implizit durch andere declartions) erklären die FK. Wenn darüber hinaus Sie wollen CASCADE angewendet werden, um die referenzierte Tabelle auf eine Veränderung der referenzierenden Tabelle, erklären.
(Es gibt nichts besonderes über CASCADE, es könne nicht angeboten werden, für nicht-FK-Situationen. Es kommt nur Häufig mit FKs, und es gibt eine explizite Graphen der FKs durch die angemessen beschränken Ihre Interaktionen.)
Wenn es ein FK-Zyklus dann müssen Sie die Trigger verwenden. Ihre Entscheidung, welche Einschränkung(en) durchgesetzt werden deklarativ & die durch auslösen sollten die Graphen der (gewünschten) Einschränkungen.