Conception Et Réalisation (Oracle) by Grare Stéphane - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

Les contraintes

Les contraintes constituent une méthode pour assurer l’intégrité des données. Elles

garantissent la validité des valeurs saisies dans les colonnes et le maintien des relations entre

les tables. Elles se mettent en œuvre dans les instructions CREATE TABLE ou ALTER TABLE.

Les contraintes s’appliquent sur des colonnes ou sur des tables entières. Une contrainte de

colonne fait partie de la définition de la colonne et ne s’applique qu’à celle-ci.

Une contrainte de table est déclarée indépendamment de la définition d’une colonne et peut

s’appliquer à plusieurs colonnes d’une même table. Dès lors que la contrainte porte sur

plusieurs colonnes, elle doit être définie au niveau table.

64

index-65_1.png

Exemple 1 : Création de la table « Employe » pour laquelle :

· Les champs Matricule, Nom, Prénom, DateEntree ne peuvent être nuls

· La clé primaire est le champ Matricule, champ compteur dont la valeur initiale

est 1, et l’incrément de 1

· La colonne Nom ne peut contenir de doublons

CREATE TABLE Employe(

Matricule NUMERIC NOT NULL PRIMARY KEY,

Nom VARCHAR2(25) NOT NULL UNIQUE,

Prenom VARCHAR2 (15) NOT NULL,

Adresse VARCHAR (30) NULL,

Cp NUMERIC(5,0),

DateEntree DATE NOT NULL,

DateFin DATE NULL);

· Qu’on aurait pu coder :

CREATE TABLE Employe(

Matricule NUMERIC NOT NULL ,

Nom VARCHAR2(25) NOT NULL ,

Prenom VARCHAR2 (15) NOT NULL,

Adresse VARCHAR (30) NULL,

Cp NUMERIC(5,0),

DateEntree DATE NOT NULL,

DateFin DATE NULL,

CONSTRAINT PK_Employee PRIMARY KEY (Matricule),

CONSTRAINT UK_Employe UNIQUE (Nom) ) ;

· Pour une clé primaire constituée de 2 colonnes, on aurait forcément codé :

CREATE TABLE Employe(

65

Matricule NUMERIC NOT NULL ,

Nom VARCHAR2(25) NOT NULL ,

Prenom VARCHAR2 (15) NOT NULL,

Adresse VARCHAR (30) NULL,

Cp NUMERIC(5,0),

DateEntree DATE NOT NULL,

DateFin DATE NULL,

CONSTRAINT PK_matricule PRIMARY KEY (Nom, Prenom)) ;

Exemple 2 : Ajout d’une contrainte DEFAULT qui insère la valeur ‘*Inconnu*’ dans la colonne

du prénom, si aucun prénom n’a été saisi. La colonne doit être codée :

Prenom VARCHAR (15) NOT NULL DEFAULT ‘*Inconnu*’,

Cette contrainte ne s’applique qu’à l’insertion d’un enregistrement.

Exemple 3 : Ajout d’une contrainte CHECK qui assure que la date de résiliation du contrat est

bien postérieure à la date d’embauche.

ALTER TABLE Employe

ADD CONSTRAINT CK_ Employe CHECK (DateFin < DateEntree)

Une contrainte CHECK peut être créée avec n'importe quelle expression logique (booléenne)

qui retourne TRUE ou FALSE sur la base des opérateurs logiques. Pour contrôler qu’une

colonne salaire est comprise entre 1500 € et 10000 €, l'expression logique est la suivante :

Salaire >= 1500 AND salaire <= 10000

Pour s’assurer qu’une colonne Département est bien composée de 2 chiffres, l’expression

logique sera de type :

Dep like ('[0-9][0-9]')

Exemple 4 : Création de la table Client pour laquelle :

· Les champs CodeCli, Nom, CodeRep ne peuvent être nuls.

· La clé primaire est le champ CodeCli.

· La contrainte FOREIGN KEY, basé sur la colonne Coderep référence le champ CodeRep de

la table Représentant pour garantir que tout client est associé à un représentant existant.

CREATE TABLE Client

(CodeCli NUMERIC NOT NULL,

Nom VARCHAR2(25) NOT NULL,

Coderep NUMERIC NOT NULL,

CONSTRAINT PK_Codecli PRIMARY KEY (Codecli),

CONSTRAINT FK_Client_REPRESENTANT FOREIGN KEY (Coderep)

REFERENCES Representant (Coderep))

Pour pouvoir créer une telle relation au niveau du schéma de la base, il est nécessaire que la

colonne CODEREP soit clé primaire de la table REPRESENTANT.

66

Dans le cas d’une relation entre les tables Client et REPRESENTANT, le fait que l’intégrité

empêche de supprimer un représentant est plutôt une bonne chose : un représentant quittant

sa société, n’emmène pas tous ses clients avec lui…

Il n’en serait pas de même entre les tables Commandes et Detail_Commandes : En effet,

si un client souhaite annuler sa commande, il est important de supprimer au même moment,

tout le détail…

Il faut également protéger l’insertion de données dans la table Detail_Commandes, pour

que toute ligne détail ait une correspondance dans la table Commandes. Le choix effectué

dans les spécifications INSERT et UPDATE (supprimer une règle) dans les propriétés de la

relation entre ces deux tables garantit les règles de gestion imposées. La syntaxe SQL

correspondant aux options :

ALTER TABLE.Detail_Commandes

ADD

CONSTRAINT FK_Detail Commandes_Commandes FOREIGN KEY (NO_Cde)

REFERENCES Commandes (NO_Cde)

ON DELETE CASCADE ;

ON DELETE CASCADE : demande la suppression des lignes dépendantes dans la table en

cours de définition, si la ligne contenant la clé primaire correspondante dans la table maître

est supprimée. Si cette option n’est pas indiquée, la suppression sera impossible dans la table

maître s’il existe des lignes référençant cette valeur de clé primaire.

ON DELETE SET NULL : Demande de la mise à NULL des colonnes constituant la clé

étrangère qui font référence à la ligne supprimée. Si cette option n’est pas indiquée, la

suppression sera impossible dans la table maître s’il existe des lignes référençant cette valeur

de clé primaire.

[NOT] DEFERRABLE : Repousse ou nom [NOT] la vérification de la contrainte au moment de

la validation de la transaction.

Mnémonique associée au type de contrainte

Voici les mnémoniques associées au type de contrainte pour le nommage de celles-ci :

PK Clé primaire

UQ Unique

NN NOT NULL

CK Check

RF Références

FK Clé étrangère

67

index-68_1.png

index-68_2.png

Alimenter la base de données

Saisir des données dans vos tables

Pour saisir des données dans vos tables, nous allons vous présenter 3 méthodes. Nous

utiliserons le jeu d’essai suivant :