wake-up-neo.com

Erstellen Sie eine Eins-zu-viele-Beziehung mit SQL Server

Wie erstellen Sie eine Eins-zu-viele-Beziehung mit SQL Server?

48
Tim
  1. Definieren Sie zwei Tabellen (Beispiel A und B) mit ihrem eigenen Primärschlüssel
  2. Definieren Sie eine Spalte in Tabelle A mit einer Fremdschlüsselbeziehung, die auf dem Primärschlüssel von Tabelle B basiert

Dies bedeutet, dass Tabelle A einen oder mehrere Datensätze haben kann, die sich auf einen einzelnen Datensatz in Tabelle B beziehen.

Wenn Sie bereits über Tabellen verfügen, erstellen Sie die Fremdschlüsseleinschränkung mit der Anweisung ALTER TABLE:

ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY (b_id) references b(id) 
  • fk_b: Name der Fremdschlüsseleinschränkung, muss für die Datenbank eindeutig sein
  • b_id: Name der Spalte in Tabelle A, in der Sie die Fremdschlüsselbeziehung erstellen
  • b: Name der Tabelle, in diesem Fall b
  • id: Name der Spalte in Tabelle B
77
OMG Ponies

Dies ist ein einfaches Beispiel für ein klassisches Bestellbeispiel. Jeder Kunde kann mehrere Order s haben, und jeder Order kann aus mehreren OrderLine s bestehen.

Sie erstellen eine Relation durch Hinzufügen einer Fremdschlüssel Spalte. Jeder Auftragsdatensatz enthält eine CustomerID, die auf die ID des Kunden verweist. In ähnlicher Weise hat jede OrderLine einen OrderID-Wert. So sieht das Datenbankdiagramm aus:

 enter image description here

In diesem Diagramm gibt es tatsächliche Fremdschlüsseleinschränkungen . Sie sind optional, gewährleisten jedoch die Integrität Ihrer Daten. Außerdem machen sie die Struktur Ihrer Datenbank für jeden Benutzer klarer.

Ich gehe davon aus, dass Sie wissen, wie Sie die Tabellen selbst erstellen. Dann müssen Sie nur die Beziehungen zwischen ihnen definieren. Sie können natürlich Einschränkungen in T-SQL definieren (wie von mehreren Personen bekanntgegeben), sie können jedoch auch problemlos mit dem Designer hinzugefügt werden. Mit SQL Management Studio können Sie mit der rechten Maustaste auf die Tabelle Order klicken und auf Design klicken (ich denke, es kann unter 2005 Bearbeiten heißen). Dann irgendwo in dem sich öffnenden Fenster mit der rechten Maustaste und wählen Sie Beziehungen.

Sie erhalten einen weiteren Dialog, auf der rechten Seite sollte ein Raster angezeigt werden. Eine der ersten Zeilen lautet "Tables and Columns Specification". Klicken Sie auf diese Zeile und dann erneut auf die kleine Schaltfläche [...], die rechts angezeigt wird. Sie erhalten diesen Dialog:

 Foreign key constraint

Die Tabelle Order sollte bereits rechts ausgewählt sein. Wählen Sie in der linken Dropdown-Liste die Kundentabelle aus. Wählen Sie dann im linken Raster die Spalte ID aus. Wählen Sie im rechten Raster die Spalte CustomerID aus. Schließen Sie den Dialog und den nächsten. Drücken Sie zum Speichern Strg + S.

Durch diese Einschränkung wird sichergestellt, dass keine Auftragsdatensätze ohne einen zugehörigen Kundendatensatz vorhanden sein können.

Um eine Datenbank wie diese effektiv abzufragen, möchten Sie vielleicht JOINs nachlesen.

59
Thorarin

So mache ich das normalerweise (SQL Server).

Create Table Master (
MasterID int identity(1,1) primary key,
Stuff varchar(10)
)
GO
Create Table Detail (
DetailID int identity(1,1) primary key,
MasterID int references Master, --use 'references'
Stuff varchar(10))
GO
Insert into Master values('value')
--(1 row(s) affected)
GO
Insert into Detail values (1, 'Value1') -- Works
--(1 row(s) affected)
insert into Detail values (2, 'Value2') -- Fails
--Msg 547, Level 16, State 0, Line 2
--The INSERT statement conflicted with the FOREIGN KEY constraint "FK__Detail__MasterID__0C70CFB4". 
--The conflict occurred in database "Play", table "dbo.Master", column 'MasterID'.
--The statement has been terminated.

Wie Sie sehen, schlägt die zweite Einfügung in das Detail aufgrund des Fremdschlüssels fehl. Hier ist ein guter Weblink, der verschiedene Syntax für die Definition von FK während der Tabellenerstellung oder danach zeigt.

http://www.1keydata.com/sql/sql-foreign-key.html

3
KSimons

Wenn Sie über zwei Arten von Wesen sprechen, sagen Lehrer und Schüler, würden Sie jeweils zwei Tabellen erstellen und eine dritte, um die Beziehung zu speichern. Diese dritte Tabelle kann zwei Spalten enthalten, beispielsweise "teacherID" und "StudentId ..". Wenn Sie dies nicht suchen, erläutern Sie bitte Ihre Frage.

1
DevByDefault

Wenn Sie kein SSMS verwenden, ist hier die Syntax:

ALTER TABLE <table_name>
ADD <constraint_name> FOREIGN KEY 
(<column_name1> ,
<column_name2> )
REFERENCES <table_name>
(<column_name1> ,
<column_name2>)

http://infogoal.com/sql/sql-add-foreignkey.htm

1
andrewWinn