0% ont trouvé ce document utile (0 vote)
3 vues6 pages

BDR SQL DDL

Le document décrit les principaux concepts du langage SQL pour la définition et la manipulation de données relationnelles, notamment la création et modification de tables, l'ajout de contraintes et la définition de clés primaires.

Transféré par

Landry Kenang
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues6 pages

BDR SQL DDL

Le document décrit les principaux concepts du langage SQL pour la définition et la manipulation de données relationnelles, notamment la création et modification de tables, l'ajout de contraintes et la définition de clés primaires.

Transféré par

Landry Kenang
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction

Bases de Données Relationnelles ! SQL : Structured Query Language


! SQL est normalisé
" SQL 2: adopté (SQL 92)
SQL " SQL 3: adopté (SQL 99)

Standard d'accès aux bases de données


Le langage de définition
!

" relationnelles
des données de SQL " et relationnel-objets

! Ce chapitre du cours : SQL relationnel


uniquement
BD.5.2

SQL : Trois langages Terminologie


! Langage de définition de données (LDD/DDL) ! Relation –> table
" création de relations : CREATE TABLE
" modification de relations: ALTER TABLE ! Tuple –> ligne (row)
" suppression de relations: DROP TABLE
" vues, index …. : CREATE VIEW ... ! Attribut –> colonne (column)
! Langage de manipulation de données (LMD /DML) ! Identifiant –> clé primaire (primary key)
insertion de tuples: INSERT
"
clé secondaire (unique)
" mise à jour des tuples: UPDATE
" suppression de tuples: DELETE ! Identifiant externe
! Langage de requêtes (LMD/DML) –> clé externe (foreign key)
" SELECT ….... FROM ....... WHERE ..........

BD.5.3 BD.5.4

Langage de Définition de Données CREATE TABLE


! Commandes pour créer, modifier et supprimer les ! Commande créant une table en donnant son nom,
éléments du schéma (table, vue, index...) ses attributs et ses contraintes
! CREATE TABLE : créer une table ! CREATE TABLE nom-table
( {nom-col type-col [DEFAULT valeur]
! CREATE VIEW : créer une vue particulière sur les [ [CONSTRAINT] contrainte-col] }*
données à partir d’un SELECT [ [CONSTRAINT] contrainte-table ]* )
=> table dérivée | AS requête-SQL ;
! DROP TABLE / VIEW : supprimer une table ou une ! Légende :
vue " {a | b} : a ou b
! ALTER TABLE / VIEW : modifier une table ou une " [option]
vue. " * : applicable autant de fois que souhaité
" mot en capitale : mot clé
BD.5.5 BD.5.6
Deux CREATE TABLE CREATE TABLE AS / CREATE VIEW
! CREATE TABLE nom_table ! CREATE TABLE Etudiant
( {nom-col type-col [DEFAULT val] [ [CONSTRAINT] contrainte-col] }*
( nom VARCHAR(20),
[ [CONSTRAINT] contrainte-table]* ) | AS requête-SQL ;
prénom VARCHAR(15),
CREATE TABLE Doctorant
cycle CHAR(1) )
!

( nom VARCHAR(20),
prénom VARCHAR(15),
année_insc DECIMAL(4) DEFAULT 2006 ) ;

! INSERT INTO Etudiant VALUES


! CREATE TABLE Doctorant ( 'Rochat' , 'Annie' , 2 )
AS SELECT nom, prénom, année_inscr
! INSERT INTO Etudiant VALUES
FROM Etudiant WHERE statut='Doctorant' ;
( 'Smith' , 'John' , 1 )
=> Création du schéma ET des tuples
BD.5.7
….. BD.5.8

CREATE TABLE AS CREATE VIEW


! CREATE VIEW VEtud2 AS
SELECT nom, prénom
FROM Etudiant WHERE cycle=2

VETUD2 : SELECT nom, prénom FROM Etudiant WHERE cycle = 2

! CREATE TABLE Etud2 AS


SELECT nom, prénom
FROM Etudiant WHERE cycle=2 Etudiant
Rochat ... 2 Etud2
Smith ... 1 Rochat ...
Muller ... 1 Duval ...
Duval ... 2
BD.5.9 BD.5.10

Les vues sont dynamiques Domaines de valeurs


! Un nouvel étudiant :
INSERT INTO Etudiant VALUES (‘Dupont’, ‘André’, 2) CHAR(nb)
VARCHAR(max)
VETUD2 : SELECT nom, prénom FROM Etudiant WHERE cycle = 2
INTEGER
NUMERIC(n,p)
DATE
Etudiant Etud2
TIME
Rochat ... 2
Smith ... 1
Rochat ... TIMESTAMP
Duval ...
Muller ... 1
Duval ... 2

Dupont ... 2

Dupont apparaît dans VEtud2, mais pas dans Etud2BD.5.11 BD.5.12


Contraintes Attribut obligatoire / facultatif
! contrainte-col : contrainte sur une colonne ! Contrainte sur une colonne
" NOT NULL
" DEFAULT value
! Attribut obligatoire : NOT NULL
" PRIMARY KEY CREATE TABLE Pays
" UNIQUE (nom VARCHAR(20) NOT NULL ,
" REFERENCES nom-table [(nom-col)] [action] capitale VARCHAR(20) NOT NULL ,
" CHECK ( condition) surface INTEGER ,
! contrainte-table : contraintes sur une table …)
" PRIMARY KEY (nom-col*)
! Attribut facultatif :
" UNIQUE (nom-col*)
" FOREIGN KEY (nom-col*) REFERENCES nom-table " Si possible éviter les valeurs nulles en donnant une
[(nom-col*)] [action] valeur par défaut
" CHECK ( condition) " CREATE TABLE Doctorant ( ...
année_insc DECIMAL(4) DEFAULT 2006 ...)
BD.5.13 BD.5.14

Identifiants : clé primaire / PRIMARY KEY : exemples


secondaire
! PRIMARY KEY (A1, A2, …) ! CREATE TABLE Pays
" La clé primaire (si elle existe) . En SQL les lignes ( nom VARCHAR(20) PRIMARY KEY ,
doubles sont possibles ! capitale VARCHAR(20) … )
" choisir l'identifiant le plus efficace
! CREATE TABLE Employé
" attribut référencé par défaut dans les identifiants
externes ( nom VARCHAR(30) ,
" pas de valeur nulle possible prénom VARCHAR(30) ,
c-à-d NOT NULL automatiquement adresse VARCHAR(60) , …
! UNIQUE (A1, A2, …) CONSTRAINT Pk_emp PRIMARY KEY (nom,
" une clé secondaire (s'il en existe) prénom) )
" contrainte d'intégrité pour les autres identifiants ! contrainte de colonne et de table
" valeur nulle permise (sauf si NOT NULL) BD.5.15 BD.5.16

UNIQUE : exemples Clé externe : FOREIGN KEY


! CREATE TABLE Etudiant CREATE TABLE Etudiant (N°E …)
( AVS CHAR(11) PRIMARY KEY , CREATE TABLE Cours (NomCours …)
N°Etudiant CHAR(6) UNIQUE , CREATE TABLE Suit
nom VARCHAR(20) , ( N°Etud CHAR(9) ,
prénom VARCHAR(30) , … NomC VARCHAR(25) ,
CONSTRAINT UNIQUE (nom, prénom) ) PRIMARY KEY (N°Etud , NomC) ,
FOREIGN KEY (N°Etud) REFERENCES Etudiant ,
! Contrainte de colonne et de table
FOREIGN KEY (NomC) REFERENCES Cours )

! PRIMARY KEY et UNIQUE sont incompatibles

BD.5.17 BD.5.18
FOREIGN KEY (suite) Intégrité référentielle
! Les clés externes référencent par défaut la clé ! REFERENCES nom-table [(nom-col)] [action]
primaire de la table référencée " Qu'est ce qui se passe quand on détruit/m.à.j. une clé
primaire ou unique qui est référencée par un tuple
" CREATE TABLE Employé
(foreign key) d'une autre table?
(AVS CHAR(11) PRIMARY KEY,
N°emp CHAR(6) UNIQUE , … )
" CREATE TABLE Département
" CREATE TABLE Département (N°dep VARCHAR(18) PRIMARY KEY,
(N°dep VARCHAR(18) PRIMARY KEY,
chefN° CHAR(11) REFERENCES Employé,… )
chefN° CHAR(11) REFERENCES Employé , … )

! Une clé externe peut référencer une clé secondaire ! Soit le tuple (N°dep=Ventes, chefN°=12345, …)
de la table référencée => à préciser dans la table Département
" CREATE TABLE Département2 Que se passe-t-il si l’on détruit l'employé d'AVS
(N°dep VARCHAR(18) PRIMARY KEY, 12345 dans la table Employé ?
chefN° CHAR(6) REFERENCES Employé (N°emp) , … )
BD.5.19 BD.5.20

"Referential triggered action" Contraintes (rappel)


! Deux circonstances ! Trois options ! contrainte-col : contrainte sur une colonne
" NOT NULL
" ON DELETE " SET NULL
SET DEFAULT: valeur par défaut " DEFAULT
" ON UPDATE "
si elle existe, sinon NULL " PRIMARY KEY
" CASCADE : on répercute la m.à.j. " UNIQUE
" REFERENCES nom-table [(nom-col)] [action]
! CREATE TABLE Département " CHECK ( condition)
( N°dep VARCHAR(18) PRIMARY KEY,
! contrainte-table : contraintes sur une table
chefN° CHAR(11) REFERENCES Employé (N°emp)
" PRIMARY KEY (nom-col*)
ON DELETE SET NULL
" UNIQUE (nom-col*)
ON UPDATE CASCADE , " FOREIGN KEY (nom-col*) REFERENCES nom-table
…)
[(nom-col*)] [action]
" CHECK ( condition)
! Si la clause n'existe pas : refus du DELETE ou UPDATE
BD.5.21 BD.5.22

Contrainte CHECK (condition) CREATE TRIGGER


! Condition que chaque ligne de la table doit vérifier ! Contrainte d'intégrité
! Contrainte de colonne et de table " simple => clause CHECK dans CREATE TABLE
" complexe => un TRIGGER
" CREATE TABLE Employé
( AVS CHAR(11) PRIMARY KEY , ! CREATE TRIGGER
nom VARCHAR(20) NOT NULL, " nouvelle
instruction Evènement-Condition-Action
prénoms VARCHAR(30) ,
" QUAND événement
âge NUMBER CHECK (âge>16 AND âge<70) ,
INSERT / DELETE /UPDATE
sexe CHAR CHECK (sexe IN ('M', 'F')) , #

salaire NUMBER , SI condition-SQL


commission NUMBER , ALORS action
CONSTRAINT checkSalaire # refus / instructions PL/SQL
CHECK (salaire + commission <= 7000) )
BD.5.23 BD.5.24
TRIGGER : exemple CREATE TRIGGER initPrerequis
! Institut FormaPerm : Pour tout tuple de BEFORE INSERT OR UPDATE ON Prerequis
FOR EACH ROW
Prérequis <nomC, nomCprérequis>, le cycle DECLARE cyclePrerequis NUMBER(1,0);
de nomCprérequis dans Cours doit être cycleCours NUMBER(1,0);
inférieur ou égal à celui de nomC BEGIN
SELECT cycle INTO cyclePrerequis FROM Cours WHERE
[Link] = :[Link];
QUAND : INSERT, UPDATE Prérequis SELECT cycle INTO cycleCours FROM Cours WHERE
[Link] = :[Link];
SI : le cycle de nomCprérequis dans Cours est IF (cyclePrerequis > cycleCours) THEN
supérieur à celui de nomC raise_application_error(-20040,'** le cycle du cours ne
ALORS : refuser l'insertion ou la mise à jour peut pas etre inferieur a celui du prerequis **');
END IF;
END;
BD.5.25 BD.5.26

DROP TABLE ALTER TABLE


! DROP : supprimer une table ! Modifier la définition d’une table :
" supprime la table et tout son contenu " Changer le nom de la table
mot clé : RENAME
! DROP TABLE nom-table [CASCADE CONSTRAINTS] " Ajouter une colonne ou une contrainte
mot clé : ADD
" Modifier une colonne ou une contrainte
! CASCADE CONSTRAINTS mot clé : MODIFY
" Supprime toutes les contraintes de clé externe " Supprimer une colonne ou une contrainte
référençant cette table
mot clé : DROP
" Si on cherche à détruire une table dont certains attributs
sont référencés sans spécifier CASCADE CONSTRAINT: " renommer une colonne ou une contrainte
refus du DROP mot clé : RENAME
BD.5.27 BD.5.28

ALTER TABLE (format) Exemple : Institut FormaPerm


ALTER TABLE nom-table ! CREATE TABLE Personne
( n°P INTEGER ,
{ RENAME TO nouveau-nom-table |
nom VARCHAR(30) NOT NULL ,
ADD ( { nom-col type-col [DEFAULT valeur] adr VARCHAR(100) NOT NULL ,
[contrainte-col]* }* ) | PRIMARY KEY (n°P ) )

MODIFY ( nom-col [type-col] [DEFAULT valeur]


[contrainte-col]* ) |
! CREATE TABLE PersonnePrénoms
DROP COLUMN nom-col [CASCADE CONSTRAINTS] | ( n°P INTEGER ,
RENAME COLUMN nom-col TO nouveau-nom-col prénom VARCHAR(30) NOT NULL ,
n°prénom INTEGER ,
}
PRIMARY KEY (n°P , n°prénom ) ,
UNIQUE (n°P , prénom ) ,
FOREIGN KEY (n°P) REFERENCES Personne ON DELETE CASCADE
)
BD.5.29 BD.5.30
Exemple FormaPerm (2) Exemple FormaPerm (3)
! CREATE TABLE Etudiant ! CREATE TABLE Enseignant
( n°P INTEGER NOT NULL , ( n°P INTEGER ,
n°E INTEGER , tel INTEGER NOT NULL ,
dateN DATE NOT NULL , statut VARCHAR(30) NOT NULL ,
PRIMARY KEY (n°E ) , banque VARCHAR(30) NOT NULL ,
UNIQUE (n°P ) , agence VARCHAR(30) NOT NULL ,
FOREIGN KEY (n°P) REFERENCES Personne ) compte INTEGER NOT NULL ,
PRIMARY KEY (n°P ) ,
FOREIGN KEY (n°P) REFERENCES Personne )

! CREATE TABLE EtudiantEtudes ! CREATE TABLE Cours


( n°E INTEGER , ( nomC VARCHAR(30) ,
année INTEGER NOT NULL , cycle INTEGER NOT NULL ,
diplôme VARCHAR(30) , n°Ens INTEGER NOT NULL ,
PRIMARY KEY (n°E , diplôme ) , PRIMARY KEY (nomC ) ,
FOREIGN KEY (n°E) REFERENCES Etudiant ON DELETE CASCADE FOREIGN KEY (n°Ens) REFERENCES Enseignant )
)
BD.5.31 BD.5.32

Exemple FormaPerm (4) Exemple FormaPerm (5)


! CREATE TABLE Obtenu ! CREATE TABLE Prérequis
( n°E INTEGER , ( nomC VARCHAR(30) ,
nomC VARCHAR(30) ,
nomCprérequis VARCHAR(30) ,
note NUMERIC(2,1) NOT NULL ,
année INTEGER NOT NULL , PRIMARY KEY (nomC , nomCprérequis ) ,
PRIMARY KEY (n°E , nomC ) , FOREIGN KEY (nomC) REFERENCES Cours ,
FOREIGN KEY (n°E) REFERENCES Etudiant.n°E , FOREIGN KEY (nomCprérequis) REFERENCES Cours )
FOREIGN KEY (nomC) REFERENCES Cours )

! CREATE TABLE Inscrit


( n°E INTEGER ,
nomC VARCHAR(30) ,
PRIMARY KEY (n°E , nomC ) ,
FOREIGN KEY (n°E) REFERENCES Etudiant.n°E ,
FOREIGN KEY (nomC) REFERENCES Cours )
BD.5.33 BD.5.34

Vous aimerez peut-être aussi