Tworzenie relacji jeden do wielu za pomocą SQL Server

Jak stworzyć relację jeden do wielu za pomocą SQL Server?

Author: Tim, 2009-08-20

5 answers

  1. Zdefiniuj dwie tabele (przykład A i B), używając własnego klucza podstawowego
  2. Zdefiniuj kolumnę w tabeli a jako mającą relację z kluczem obcym opartą na kluczu głównym tabeli B

Oznacza to, że Tabela A może mieć jeden lub więcej rekordów odnoszących się do jednego rekordu w tabeli B.

Jeśli tabele są już na miejscu, użyj instrukcji ALTER TABLE, aby utworzyć ograniczenie klucza obcego:

ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY (b_id) references b(id) 
  • fk_b: Nazwa ograniczenia klucza obcego, musi być unikalne do bazy danych
  • b_id: Nazwa kolumny w tabeli A, na której tworzysz relację klucza obcego
  • b: Nazwa tabeli, w tym przypadku b
  • id: Nazwa kolumny w tabeli B
 75
Author: OMG Ponies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-03 15:54:50

Jest to prosty przykład klasycznego przykładu porządkowego. Każdy klient może mieć wiele zamówień s, a każde zamówienie może składać się z wielu zamówień OrderLines.

Tworzysz relację dodając kolumnę klucza obcego. Każdy rekord zamówienia zawiera CustomerID, który wskazuje na ID klienta. Podobnie każda linia orderowa ma wartość OrderID. Tak wygląda diagram bazy danych:

Tutaj wpisz opis obrazka

Na tym diagramie, istnieją rzeczywiste ograniczenia klucza obcego . Są one opcjonalne, ale zapewniają integralność danych. Ponadto sprawiają, że struktura Twojej bazy danych jest jaśniejsza dla każdego, kto ją używa.

Zakładam, że wiesz, jak samodzielnie tworzyć tabele. Następnie musisz tylko określić relacje między nimi. Można oczywiście definiować ograniczenia w T-SQL (jak napisane przez kilka osób), ale są one również łatwo dodawane za pomocą projektanta. Używając SQL Management Studio, możesz kliknąć prawym przyciskiem myszy Uporządkuj tabelę, kliknij Zaprojektuj (myślę, że można to nazwać edycją pod 2005). Następnie w dowolnym miejscu w oknie, które się otworzy kliknij prawym przyciskiem myszy i wybierz relacje.

Pojawi się kolejne okno dialogowe, po prawej powinien być Widok siatki. Jedna z pierwszych linii brzmi " tables and Columns Specification ". Kliknij tę linię, a następnie kliknij ponownie na mały [...] przycisk, który pojawia się po prawej stronie. Dostaniesz to okno dialogowe:

Ograniczenie klucza obcego

Tabela Order powinna być już wybrana po prawej stronie. Wybierz tabelę klienta po lewej stronie listy rozwijanej. Następnie w lewej siatce wybierz kolumnę ID. W prawej siatce wybierz kolumnę CustomerID. Zamknij okno dialogowe, a następnie. Naciśnij Ctrl + S , aby zapisać.

Posiadanie tego ograniczenia zapewni, że żadne rekordy zamówienia nie mogą istnieć bez towarzyszącego im rekordu klienta.

Aby skutecznie odpytywać taką bazę danych, możesz chcieć poczytać na stronie .

 59
Author: Thorarin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-03 23:48:59

Tak to zwykle robię (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.

Jak widać druga wstawka w detalu nie powiodła się z powodu klucza obcego. Oto dobry weblink, który pokazuje różne składnie definiowania FK podczas tworzenia tabeli lub po.

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

 2
Author: KSimons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-20 19:48:03

Jeśli mówisz o dwóch rodzajach ennities, powiedzmy nauczyciele i uczniowie, stworzyłbyś dwie tabele dla każdego i trzecią do przechowywania relacji. Trzecia tabela może mieć dwie kolumny, powiedzmy teacherID i StudentId. Jeśli nie tego szukasz, Rozwiń swoje pytanie.

 0
Author: DevByDefault,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-20 19:37:02

Jeśli nie używasz SSMS to tutaj jest składnia:

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

 0
Author: andrewWinn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-20 19:45:31