web-dev-qa-db-fra.com

Créer une relation un à plusieurs à l'aide de SQL Server

Comment créer une relation un à plusieurs à l'aide de SQL Server?

48
Tim
  1. Définir deux tables (exemples A et B), avec leur propre clé primaire
  2. Définir une colonne dans la table A comme ayant une relation de clé étrangère basée sur la clé primaire de la table B

Cela signifie que la table A peut avoir un ou plusieurs enregistrements concernant un seul enregistrement dans la table B.

Si vous avez déjà les tables en place, utilisez l'instruction ALTER TABLE pour créer la contrainte de clé étrangère:

ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY (b_id) references b(id) 
  • fk_b: nom de la contrainte de clé étrangère, doit être unique dans la base de données
  • b_id: Nom de la colonne de la table A sur laquelle vous créez la relation de clé étrangère
  • b: Nom de la table, dans ce cas b
  • id: Nom de la colonne dans le tableau B
77
OMG Ponies

Ceci est un exemple simple d'un exemple d'ordre classique. Chaque client peut avoir plusieurs commande s et chaque commande peut comprendre plusieurs commandeLigne s.

Vous créez une relation en ajoutant une clé étrangère colonne. Chaque enregistrement de commande contient un identifiant client, qui pointe vers l'identifiant du client. De même, chaque ligne de commande a une valeur OrderID. Voici à quoi ressemble le diagramme de la base de données:

 enter image description here

Dans ce diagramme, il existe des contraintes réelles de clé étrangère . Ils sont facultatifs, mais ils garantissent l’intégrité de vos données. En outre, ils rendent la structure de votre base de données plus claire pour ceux qui l'utilisent.

Je suppose que vous savez comment créer les tables elles-mêmes. Ensuite, il vous suffit de définir les relations entre eux. Vous pouvez bien sûr définir des contraintes dans T-SQL (telles que publiées par plusieurs personnes), mais elles sont également faciles à ajouter à l'aide du concepteur. À l'aide de SQL Management Studio, vous pouvez cliquer avec le bouton droit de la souris sur la table Order, cliquer sur Design (je pense que cela s'appelle Modifier sous 2005). Puis, n'importe où dans la fenêtre qui s'ouvre, cliquez avec le bouton droit de la souris et sélectionnez Relationships.

Vous obtiendrez un autre dialogue. Sur la droite, il devrait y avoir une vue en grille. Une des premières lignes lit "Spécification des tables et des colonnes}". Cliquez sur cette ligne, puis cliquez à nouveau sur le petit bouton [...] qui apparaît à droite. Vous obtiendrez cette boîte de dialogue:

 Foreign key constraint

La table Order doit déjà être sélectionnée à droite. Sélectionnez la table Client dans le menu déroulant de gauche. Ensuite, dans la grille de gauche, sélectionnez la colonne ID. Dans la grille de droite, sélectionnez la colonne CustomerID. Fermez la boîte de dialogue et la suivante. Appuyez sur Ctrl + S pour enregistrer.

Avoir cette contrainte garantira qu'aucun enregistrement de commande ne peut exister sans un enregistrement client associé.

Pour interroger efficacement une base de données comme celle-ci, vous voudrez peut-être lire sur JOINs .

59
Thorarin

C’est comme cela que je le fais habituellement (serveur SQL).

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.

Comme vous pouvez le constater, la deuxième insertion dans le détail échoue à cause de la clé étrangère . Voici un bon lien Web qui affiche diverses syntaxes permettant de définir FK lors de la création du tableau ou après.

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

3
KSimons

Si vous parlez de deux types d’entités, par exemple les enseignants et les étudiants, créez deux tables pour chacune et une troisième pour enregistrer la relation. Ce troisième tableau peut comporter deux colonnes, par exemple, teacherID et StudentId . Si ce n'est pas ce que vous recherchez, veuillez préciser votre question.

1
DevByDefault

Si vous n'utilisez pas SSMS, voici la syntaxe:

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