Vous pouvez créer une relation entre les tables à l'aide de l'interface graphique ou du script SQL. Ici, je démontre les deux méthodes.
Dans la conception de bases de données relationnelles, une relation est l'endroit où deux tables ou plus sont liées entre elles parce qu'elles contiennent des données liées. Cela permet aux utilisateurs d'exécuter des requêtes pour des données associées sur plusieurs tables.
Ici, nous allons créer les relations suivantes.
La méthode
Voici comment nous allons procéder :
- Nous utiliserons SQL pour créer les Albums table et une relation.
- Nous utiliserons l'GUI pour créer l'autre relation.
De cette façon, vous pourrez voir les deux méthodes de création d'une relation.
Nous n'avons besoin de créer qu'un seul tableau car nous avons déjà créé deux de ces tableaux précédemment dans ce didacticiel (les Artistes tableau via l'interface graphique et les Genres table en utilisant SQL).
Créer une relation à l'aide de SQL
Ouvrez une nouvelle fenêtre de requête dans SSMS et exécutez le code suivant :
CREATE TABLE Albums ( AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY, AlbumName nvarchar(255) NOT NULL, ReleaseDate date NOT NULL, ArtistId int NOT NULL, GenreId int NOT NULL CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId) REFERENCES dbo.Artists (ArtistId) ON DELETE NO ACTION ON UPDATE NO ACTION );
La première partie de cette instruction crée la table.
La dernière partie définit la relation. Cette partie :
CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId) REFERENCES dbo.Artists (ArtistId) ON DELETE NO ACTION ON UPDATE NO ACTION
Les deux premières lignes créent la relation. Ils créent une contrainte de clé étrangère entre Albums.ArtistId et la colonne Artists.ArtistId colonne.
Les deux dernières lignes spécifient ce que SQL Server doit faire si quelqu'un essaie de supprimer ou de mettre à jour un enregistrement parent qui est référencé par un enregistrement dans la table enfant. Dans ce cas, NO ACTION
signifie que la suppression/mise à jour n'aura pas lieu. L'utilisateur obtiendra simplement une erreur.
Vous pouvez le remplacer par ON DELETE CASCADE
si vous souhaitez pouvoir supprimer le parent et l'enfant en une seule fois (c'est-à-dire que la suppression se fera en cascade du parent à l'enfant). La même logique s'applique aux mises à jour, en utilisant ON UPDATE CASADE
.
NO ACTION
est la valeur par défaut, nous aurions donc pu nous passer de ces deux dernières lignes de code. Cependant, je l'ai inclus, car c'est un facteur important à prendre en compte lors de la création de contraintes de clé étrangère.
Qu'est-ce qu'une contrainte de clé étrangère ?
Une contrainte de clé étrangère définit une relation entre cette table et une autre table. Lorsque vous créez une contrainte de clé étrangère, vous la créez par rapport à une colonne spécifique dans l'enfant table, pour référencer une colonne spécifique dans parent tableau.
Cela fait de la colonne de la table enfant une clé étrangère . La contrainte garantit que toute valeur qui entre dans cette colonne (clé étrangère) correspond à une valeur dans la colonne de clé primaire de la table parent. Si quelqu'un essaie d'entrer une valeur qui ne correspond pas à une valeur dans la colonne de clé primaire de la table parent, SQL Server génère une erreur.
Cela permet de renforcer l'intégrité référentielle. Cela nous empêche d'avoir des enregistrements orphelins (enregistrements enfants qui n'ont pas de parent). Ou dans notre exemple, des albums qui ne sont associés à aucun artiste.
Créer une relation via l'interface graphique
Nous allons maintenant créer l'autre relation via l'interface graphique de SQL Server Management Studio.
Il aurait été plus simple de l'inclure dans le script ci-dessus, mais je voulais montrer les deux méthodes de création d'une relation.
-
Ouvrir la table enfant dans le concepteur de table
Faites un clic droit sur la table enfant (nos Albums nouvellement créés tableau) et sélectionnez Design depuis le menu contextuel.
Si vous ne pouvez pas voir votre table nouvellement créée dans l'Explorateur d'objets, vous devez probablement actualiser l'Explorateur d'objets.
Faites un clic droit sur les Tableaux nœud et sélectionnez Actualiser .
-
Ouvrez la boîte de dialogue des relations de clé étrangère
Sélectionnez Concepteur de table> Relations... dans le menu supérieur.
-
Ajouter la relation
La boîte de dialogue Relations de clé étrangère vous montrera toutes les relations existantes pour la table. Nous pouvons voir la relation que nous avons établie juste avant, lorsque nous avons créé la table.
Cliquez sur Ajouter pour ajouter une autre relation.
-
Sélectionner les spécifications des tableaux et des colonnes
Une nouvelle relation apparaît au-dessus de l'autre dans la Relation sélectionnée liste avec un nom de FK_Albums_Albums .
En vous assurant que la nouvelle relation est sélectionnée, cliquez sur Spécification des tables et des colonnes dans le volet de droite. Une ellipse apparaît à droite de la propriété.
Cliquez sur les points de suspension (... ) pour lancer la boîte de dialogue Tableaux et colonnes.
-
La boîte de dialogue Tableaux et colonnes
Ici, vous sélectionnez la table de clé primaire dans le volet de gauche et la table de clé étrangère à droite.
- Sous Table des clés primaires : sélectionnez Genres comme table et GenreId comme colonne.
- Sous Table des clés étrangères : sélectionnez Albums comme table et GenreId comme colonne.
Cliquez sur OK .
SQL Server proposera un nom pour la relation. Vous pouvez le modifier si vous le souhaitez. Sinon, laissez-le tel quel.
-
La relation
Votre relation s'affichera désormais correctement dans la boîte de dialogue Relations de clé étrangère.
Cliquez sur Fermer .
-
Sauvegarder la relation
Votre relation ne sera pas enregistrée tant que vous n'aurez pas enregistré la table. Lorsque vous enregistrez la table, vous recevrez probablement un avertissement indiquant que deux tables seront enregistrées. Ceci est normal, car la relation affecte deux tables.
Cliquez sur Oui pour enregistrer les deux tables.
Si vous sélectionnez Table Designer> Relations... pour la table parent, vous y verrez également la relation.