Établissement d'une relation |
|
Comme nous l'avons déjà mentionné, une base de données relationnelle est celle dans laquelle les informations circulent d'une table à l'autre. Pour préparer les tables à cela, vous créez les clés primaires et étrangères, comme nous avons fait jusqu'ici. Une fois que les tables sont prêtes, vous pouvez les relier, ce qui est appelé à la création d'une relation entre deux tables.
Si vous n'avez pas créé une clé étrangère avec le code SQL, vous pouvez la créer lors de l'établissement d'une relation entre deux tables.
Pour créer une relation entre deux tables
- Ouvrez la table enfant dans la vue de conception
- Cliquez avec le bouton droit de la souris (n'importe où dans la table) et cliquez sur Relationships...
Si la clé étrangère (nécessaire) n'existe pas, cliquez sur Ajouter, puis indiquez son nom sous l'identité dans la partie droite.
- Dans le cadre de relations sélectionnées, cliquez sur la clé étrangère qui contiendra la relation
- Dans la partie droite, développez la spécification de tables et de colonnes
- Cliquez sur son bouton de sélection

- Dans la zone de liste déroulante de Table de Clé Primaire, sélectionnez la Table Parente qui contient les données primaires
- Sous la Table Parente, cliquez et sélectionnez sa colonne de Clé Primaire
- Sous la table de Clé Etrangère, assurez-vous que le nom de la table en cours est défini.
Sous le nom de la Table Enfant, cliquez et sélectionnez le nom de la colonne Clé Etrangère. Voici un exemple :
- Cliquez sur OK.
Lorsqu'une relation a été créée, elle serait affichée dans les tables et section de spécification de colonne :
- De la même façon, vous pouvez créer d'autres relations en cliquant sur Ajouter et en configurant le lien.
Une fois que vous avez terminé, cliquez sur Fermer
Formation pratique : Création de relations
|
|
- Pour terminer notre base de données avec ses tables, leurs clés primaires, leurs clés étrangères et certaines données dans les tables, modifiez le code dans la fenêtre de requête comme suit :
-- =============================================
-- Database: YugoNationalBank
-- Author: FunctionX
-- Date Created: Monday 09 April 2007
-- =============================================
USE master
GO
-- Drop the database if it already exists
IF EXISTS (
SELECT name
FROM sys.databases
WHERE name = N'YugoNationalBank'
)
DROP DATABASE YugoNationalBank
GO
CREATE DATABASE YugoNationalBank
GO
-- =========================================
-- Database: YugoNationalBank
-- Table: Locations
-- =========================================
USE YugoNationalBank
GO
IF OBJECT_ID(N'dbo.Locations', N'U') IS NOT NULL
DROP TABLE dbo.Locations
GO
CREATE TABLE Locations
(
LocationID int Identity(1,1) NOT NULL,
LocationCode nvarchar(10) NOT NULL,
Address nvarchar(120),
City nvarchar(50),
State nvarchar(50),
Notes text NULL,
CONSTRAINT PK_Locations PRIMARY KEY (LocationID)
);
GO
-- =========================================
-- Database: YugoNationalBank
-- Table: AccountTypes
-- =========================================
USE YugoNationalBank
GO
IF OBJECT_ID(N'dbo.AccountTypes', N'U') IS NOT NULL
DROP TABLE dbo.AccountTypes
GO
CREATE TABLE AccountTypes
(
AccountTypeID int Identity(1,1) NOT NULL,
AccountType nvarchar(40) NOT NULL,
Notes text NULL,
CONSTRAINT PK_AccountTypes PRIMARY KEY (AccountTypeID)
);
GO
-- =========================================
-- Database: YugoNationalBank
-- Table: Employees
-- =========================================
IF OBJECT_ID(N'dbo.Employees', N'U') IS NOT NULL
DROP TABLE dbo.Employees
GO
CREATE TABLE Employees
(
EmployeeID int identity(1,1) NOT NULL,
EmployeeNumber char(6),
FirstName nvarchar(32),
LastName nvarchar(32) NOT NULL,
Title nvarchar(50),
CanCreateNewAccount bit,
HourlySalary smallmoney,
EmailAddress nvarchar(100),
Username nvarchar(20),
Password nvarchar(20),
Notes text,
CONSTRAINT PK_Employees PRIMARY KEY (EmployeeID)
);
GO
-- =========================================
-- Database: YugoNationalBank
-- Table: Customers
-- =========================================
IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULL
DROP TABLE dbo.Customers
GO
CREATE TABLE Customers
(
CustomerID int Identity(1,1) NOT NULL,
DateCreated date,
AccountNumber nvarchar(20),
AccountTypeID int Constraint FK_TypeOfAccount
References AccountTypes(AccountTypeID),
CustomerName nvarchar(50) NOT NULL,
DateUpdated date,
Notes text,
CONSTRAINT PK_Customers PRIMARY KEY (CustomerID)
);
GO
-- =========================================
-- Database: YugoNationalBank
-- Table: ChargeReasons
-- =========================================
IF OBJECT_ID(N'dbo.ChargeReasons', N'U') IS NOT NULL
DROP TABLE dbo.ChargeReasons
GO
-- =========================================
-- Database: YugoNationalBank
-- Table: Deposits
-- =========================================
IF OBJECT_ID(N'dbo.Deposits', N'U') IS NOT NULL
DROP TABLE dbo.Deposits
GO
CREATE TABLE Deposits
(
DepositID int identity(1, 1) NOT NULL,
LocationID int Constraint FK_DepositLocation
References Locations(LocationID) NOT NULL,
EmployeeID int Constraint FK_Clerk
References Employees(EmployeeID),
CustomerID int Constraint FK_Depositor
References Customers(CustomerID) NOT NULL,
DepositDate date NOT NULL,
DepositAmount smallmoney NOT NULL,
Notes text,
CONSTRAINT PK_Deposits PRIMARY KEY (DepositID)
);
GO
-- =========================================
-- Database: YugoNationalBank
-- Table: Withdrawals
-- =========================================
IF OBJECT_ID(N'dbo.Withdrawals', N'U') IS NOT NULL
DROP TABLE dbo.Withdrawals
GO
CREATE TABLE Withdrawals
(
WithdrawalID int identity(1, 1) NOT NULL,
LocationID int Constraint FK_WithdrawlLocation
References Locations(LocationID) NOT NULL,
EmployeeID int Constraint FK_ProcessedBy
References Employees(EmployeeID),
CustomerID int Constraint FK_CustomerAccount
References Customers(CustomerID) NOT NULL,
WithdrawalDate date NOT NULL,
WithdrawalAmount smallmoney NOT NULL,
WithdrawalSuccessful bit NOT NULL,
Notes text,
CONSTRAINT PK_Withdrawas PRIMARY KEY (WithdrawalID)
);
-- =========================================
-- Database: YugoNationalBank
-- Table: CheckCashing
-- =========================================
IF OBJECT_ID(N'dbo.CheckCashing', N'U') IS NOT NULL
DROP TABLE dbo.CheckCashing
GO
CREATE TABLE CheckCashing
(
CheckCashingID int identity(1, 1) NOT NULL,
LocationID int Constraint FK_BranchLocations
References Locations(LocationID) NOT NULL,
EmployeeID int Constraint FK_Employees
References Employees(EmployeeID),
CustomerID int Constraint FK_Customers
References Customers(CustomerID) NOT NULL,
CheckCashingDate date NOT NULL,
CheckCashingAmount smallmoney NOT NULL,
CheckCashingSuccessful bit NOT NULL,
Notes text,
CONSTRAINT PK_CheckCashing PRIMARY KEY(CheckCashingID)
);
GO
- Appuyez sur F5 pour exécuter l'instruction.
Un schéma est une fenêtre qui affiche visuellement les relations entre les tables d'une base de données. Pour créer un diagramme :
- Dans l'Explorateur d'objets, dans le nœud de base de données, vous pouvez cliquer sur la base de données diagrammes
- Une boîte de dialogue vous informe que cette base de données ne dispose pas d'un diagramme. Lisez le message et cliquez sur Oui
- Cliquez avec le bouton droit de la souris sur les schémas de base de données, puis cliquez sur Nouveau schéma de base de données
- Dans la boîte de dialogue Ajouter une table, cliquez sur chaque table et cliquez sur Ajouter.
Alternativement, vous pouvez double-cliquer sur une table pour l'ajouter
- Dans la boîte de dialogue Ajouter une table, vous pouvez cliquer sur Fermer.
Dans la barre d'outils, vous pouvez cliquer sur le bouton Zoom et sélectionnez une valeur plus grande ou plus petite.
Pour déplacer une table, vous pouvez faire glisser sa barre de titre. Voici un exemple :
- Pour établir une relation, vous pouvez cliquer sur la zone grise à gauche de la colonne de la table parente et la déposer sur n'importe quelle colonne dans la Table Enfant. La meilleure façon est de cliquer sur la zone grise de la colonne Clé Primaire de la Ttable Parent, faites glisser cette zone puis déposez-la sur la colonne Clé Etrangère de la Table Enfant. Voici un exemple :
- Une boîte de dialogue Tables et Colonnes s'ouvrirait. Elle afficherait la colonne qui a été glissée et la colonne sur laquelle vous êtes tombé.
Si vous aviez sélectionné simplement n'importe quelle colonne, elle afficherait mais ce n'est peut-être pas celle que vous vouliez faire glisser ; autrement dit, elle peut ne pas être la colonne réelle qui est censée gérer la relation.
Quoi qu'il en soit, sous le titre de la Table de Clé Primaire, vous devez sélectionner la Table Parente
- Sous la Table Parente, sélectionnez sa Colonne Primaire
- Sous Table Etrangère, sélectionnez la colonne de Clé Etrangère. Voici un exemple :
- Une fois que vous êtes prêt, cliquez sur OK. Un lien serait créé entre les tables
- De la même façon, vous pouvez créer d'autres relations.
Lorsque vous avez terminé, vous pouvez enregistrer et fermer la base de données.
Formation pratique : Création d'un schéma
|
|
- Dans l'Explorateur d'objets, dans le nœud YugoNationalBank, cliquez sur une base de données Diagrammes
- Une boîte de dialogue vous informe que cette base de données ne dispose pas d'un diagramme :

Lisez le message et cliquez sur Oui
- Cliquez avec le bouton droit de la souris sur les schémas de base de données, puis cliquez sur Nouveau Schéma de base de données
- Dans la boîte de dialogue Add Tble, cliquez sur Customers, puis cliquez sur le bouton Add
- Double-cliquez sur CheckCashing pour l'ajouter
- De la même manière, ajoutez les tables AccountTypes, Deposits, Employees, Locations et Withdrawals Tables
- Dans la boîte de dialogue Add Table, cliquez sur Fermer.
Notez que, selon comment nous avons créé la base de données et ses objets, les relations ont déjà été créées :
- Pour enregistrer le schéma, dans la barre d'outils standard, cliquez sur Enregistrer
- Définissez son nom à dgmYugoNationalBank puis cliquez sur le bouton OK.
- Fermez la fenêtre
Sur une base de données typiques, les informations vont et viennent. Pour une banque, les comptes des clients sont créés et supprimés sur une base régulière. Lorsqu'un compte est supprimé, il y a des préoccupations concernant les transactions liées à ce compte. L'intégrité référentielle vous permet de gérer ces aspects d'une base de données. Vous devez vous assurer que lorsque les données sont supprimées d'une Table Parent, les tables Enfant sont notifiées et leurs enregistrements liés sont également supprimés. Lorsque l'information est modifiée sur une Table Parent, les informations associées sont modifiées dans les tables de pensions alimentaires pour enfants.
Pour gérer l'intégrité référentielle, vous utilisez la boîte de dialogue Relations de Clé Etrangère. Vous pouvez y accéder depuis la vue de conception d'une table ou à partir de la fenêtre de diagramme.
Formation pratique : Gestion de l'intégrité référentielle
|
|
- Dans l'Explorateur d'objets, développez le nœud tables sous YugoNationalBank.
Cliquez avec le bouton droit de la souris sur dbo.Customers, puis cliquez sur Créer
- Cliquez avec le bouton droit de la souris dans la table et cliquez sur relations
- Dans le cadre de relations sélectionnées, cliquez sur FK_CustomerAccount. Dans la section de droite, développez INSERT et UPDATE Specification
- Cliquez sur Supprimer la règle. Dans sa zone de liste déroulante, sélectionnez Cascade
- Cliquez sur une règle de mise à jour. Dans sa zone de liste déroulante, sélectionnez Cascade :
- De la même manière, spécifiez les options suivantes
| Clé étrangère |
Supprimer la règle |
Mise à jour de la règle |
| FK_ChargeReasons |
Cascade |
Cascade |
| FK_Customers |
Cascade |
Cascade |
| FK_Depositor |
Cascade |
Cascade |
| FK_TypeOfAccount |
Cascade |
Cascade |
- Cliquez sur Fermer
- Enregistrez et fermez la table
- De la même manière, ouvrez la table Deposits dans le mode design
- Accédez à sa boîte de dialogue Relationships
- Accédez aux propriétés de son champ FK_Clerk.
Spécifiez son Supprimer la Règle et sa Mise à Jour de la Règle, les deux à cascade
- Effectuez les mêmes actions pour les autres relations
- Fermez la boîte de dialogue Relations
- Enregistrez et fermez la table
Lors de l'exécution d'entrée de données, dans certaines colonnes, même après avoir indiqué les types des valeurs que vous attendez de l'utilisateur de fournir pour certains une colonne, vous pouvez restreindre une plage de valeurs autorisées. De la même façon, vous pouvez créer une règle qui doit être respectée sur une combinaison de colonnes avant la création de l'enregistrement. Par exemple, vous pouvez demander au moteur de base de données de vérifier qu'au moins l'une des deux colonnes a reçu une valeur. Par exemple, sur une table qui conserve des informations sur les clients, vous pouvez demander au moteur de base de données de vérifier que, pour chaque enregistrement, soit le numéro de téléphone ou l'adresse e-mail du client est entré.
La possibilité de vérifier qu'une ou plusieurs règles sont respectées sur une table est appelée une Check Constraint. Une Check Constraint est une opération booléenne effectuée par l'interprète SQL. L'interprète examine une valeur qui a simplement été fournie pour une colonne. Si la valeur est appropriée :
- La contrainte produit TRUE
- La valeur est acceptée.
- La valeur est affectée à la colonne
Si la valeur n'est pas appropriée :
- La contrainte produit FALSE
- La valeur oest rejetée.
- La valeur n'est pas affectée à la colonne
Vous créez une contrainte check au moment où vous créez une table.
Création visuelle d'une contrainte de validation |
|
Pour créer une contrainte check, lors de la création d'une table, cliquez avec le bouton droit de la souris n'importe où (même à l'extérieur) dans la table et cliquez sur CHECK Constraints...

Ce serait ouvrir la boîte de dialogue Check Constraints. A partir de cette fenêtre, vous pouvez cliquer sur Ajouter. Une contrainte étant un objet, vous devez fournir un nom pour elle. L'élément le plus important d'information qui devrait contenir une contrainte check est le mécanisme qu'il utiliserait pour vérifier ses valeurs. Ceci est prévu comme une expression. Par conséquent, pour créer une contrainte, vous pouvez cliquer sur expression et cliquez sur son bouton de sélection. Ce serait ouvrir la boîte de dialogue Check Constraint Expression.
Pour créer l'expression, tapez tout d'abord le nom de la colonne sur laquelle la contrainte s'appliquera, suivi de parenthèses. Entre les parenthèses, utilisez l'arithmétique et/ou des opérateurs SQL que nous avons déjà étudiés. Voici un exemple qui vérifiera qu'une nouvelle valeur spécifiée pour le numéro d'étudiant est supérieure à 1000 :

Après la création de l'expression, vous pouvez cliquer sur OK. Si l'expression n'est pas valide, vous recevriez un message d'erreur et la possibilité de la corriger.
Vous pouvez créer autant de contraintes de vérification que vous jugez nécessaire pour votre table :

Après avoir créé les check contraints, vous pouvez cliquer sur OK.
Création d'une contrainte de validation par programmation |
|
Pour créer une contrainte check dans SQL, créez tout d'abord la colonne sur laquelle s'appliquera la contrainte. Avant la parenthèse fermante de la définition de la table, utilisez la formule suivante :
CONSTRAINT name CHECK (expression)
Le CONSTRAINT et les mots-clés CHECK sont requis. Sous la forme d'un objet, assurez-vous de que vous fournissez un nom pour lui. A l'intérieur des parenthèses qui suivent l'opérateur CHECK, entrez l'expression qui est appliquée. Voici un exemple qui veillera à ce que le salaire horaire spécifié pour un employé soit supérieur à 12,50 :
CREATE TABLE Employees
(
[Employee Number] nchar (7)
[Full Name] varchar (80),
[Hourly Salary] smallmoney,
CONSTRAINT CK_HourlySalary CHECK ([Hourly Salary] > 12,50)
);
Il est important de comprendre qu'une contrainte check n'est ni une expression ni une fonction. Une contrainte check contient une expression et peut contenir une fonction comme faisant partie de sa définition.
Après la création de (s) la constraint (s) pour une table, dans l'Explorateur d'Objet de Microsoft SQL Server Management Studio, à l'intérieur du nœud de la table, il y a un nœud nommé Contraints et, si vous le développez, vous verriez le nom de la contrainte.
Avec la (les) constrainte (s) en place, au cours de la saisie de données, si l'utilisateur (ou votre code) fournit une valeur non valide, une erreur afficherait. Voici un exemple :

Au lieu d'une expression qui utilise uniquement les opérateurs réguliers, vous pouvez utiliser une fonction pour aider dans le processus de vérification. Vous pouvez créer et utiliser votre propre fonction ou vous pouvez utiliser l'une des fonctions Transact-SQL intégrées.
Formation pratique : Création d'une contrainte de validation
|
|
- Dans l'Explorateur d'objets, cliquez avec le bouton droit de la souris sur le nom du serveur, puis cliquez sur Start PowerShell
- Dans la fenêtre PowerShell, tapez SQLCMD et appuyez sur la touche Entrée
- Pour créer une base de données et une nouvelle table qui dispose d'un mécanisme de vérification, tapez ce qui suit :
CREATE DATABASE GreensvilleElectricCompany ;
GO
CREATE TABLE Customers
(
AccountNumber nchar(14) primary key not null,
CustomerName nvarchar (50) NOT NULL,
PhoneNumber nchar(16),
EmailAddress nvarchar(50),
CONSTRAINT CK_CustomerContact
CHECK ((PhoneNumber IS NOT NULL) OR (EmailAddress IS NOT NULL))
);
GO |
- Pour ajouter des enregistrements à la nouvelle table, tapez ce qui suit :
INSERT INTO Customers
VALUES(N'188395805',N'Ann Zeke',N'301-128-3506',N'azeke@yahoo.jp'),
(N'806200422', N'Joan Simms',N'410-114-6820',N'jsimmson@emailct.com'),
(N'402628475' N'Peter Dorka, N' (202)050-1629',N'pdorka@hotmail.com'),
(N'666204275' N'James Bengbiss',N'443-158-1833',N'jbango@emailct.com');
GO
- Pour essayer d'ajouter un nouvel enregistrement à la table, tapez ce qui suit :
1 > INSERT INTO Customers
2 > VALUES(N'402628475',N'James Darfield',N'202-188-8742',N'');
3 > GO
- Notez que vous recevez un message d'erreur :
MSG 2627, Level 14, State 1, Server CENTRAL, Line 1
Violation of PRIMARY KEY Constraint 'PK__Customer__BE2ACD6E51BA1E3A'. Cannot ins
ert duplicate key in object 'dbo.Customers'.
The statement has been terminated.
1 >
- Pour supprimer la base de données, tapez :
DROP DATABASE GreensvilleElectricCompany ;
GO
- Tapez exit, puis appuyez sur entrée
- Pour fermer la fenêtre PowerShell, tapez exit, puis appuyez sur la touche Entrée
|
|