Le langage de définition des données (LDD) de SQL

Institut Supérieur d'Informatique
1/17
100%
Rendu du PDF...
Page 1 sur 17Lecteur de document UniversityLib

Le langage de définition des données (LDD) de SQL

Institut Supérieur d'Informatique · Database Systems and SQL · course

Voir tous les documents en bases de données

Université Virtuelle de Tunis - Institut Supérieur d’Informatique

Module 2 – Section 2 : Le langage de définition des données (LDD) de SQL

Riadh ZAAFRANI Octobre 2020

1ère année MP2L

Page 1

09/10/2020

Riadh Zaafrani

Plan du cours

 Création des tables avec SQL  Modification de la structure

d’une table avec SQL

 Les contraintes d’intégrité sous

SQL

Page 2

09/10/2020

Riadh Zaafrani

1

Les tables

 Les tables représentent

le mécanisme de stockage des

données dans une base Oracle.

 Une table contient un ensemble fixe de colonnes.

 Chaque

colonne caractéristiques spécifiques.

possède

un

nom ainsi

que

des

 Les opérations de création, de suppression et de modification des tables mettent à jour le dictionnaire de données du SGBD. On rappelle que le dictionnaire de données est une structure propre au SGBD qui contient la description des objets du SGBD (base de données, tables, colonnes, droits, etc.).

Page 3

09/10/2020

Riadh Zaafrani

Création des tables

 La création d’une table est une opération importante qu’il

faut entreprendre avec soin. C’est lors de cette étape que l’on définit le type de données, la clé, les index éventuels et qu’il convient d’imposer des contraintes de validation garantissant la bonne qualité des informations entrées dans la table.

 La forme générale de l’instruction de création de table est la suivante :

 CREATE TABLE <Nom de la table> (

liste des colonnes avec leur type séparées par ,) ;

 CREATE TABLE voiture (NumVoit INT,

Marque CHAR(40), Type CHAR(30), Couleur CHAR(20)) ;

Page 4

09/10/2020

Riadh Zaafrani

2

Création des tables

 Le nom de la table ou d’une colonne ne doit pas dépasser 128 caractères. Il commence par une lettre, contient des chiffres, des lettres et le caractère « _ ».

 Attention de même à ne pas utiliser un mot clé SQL.

 Les tables peuvent être créées de manière temporaire : elles seront donc effacées à la fin de la session de l’utilisateur à l’aide du mot clé TEMPORARY.

 CREATE TEMPORARY TABLE temporaire (

Identifiant INT, Jour DATE, Valide BOOLEAN ) ;

Page 5

09/10/2020

Riadh Zaafrani

Création des tables  Les tables peuvent être issues directement du résultat

d’une requête en utilisant le mot clé AS :

 c’est particulièrement commode pour pouvoir disposer de lors d’une

résultats intermédiaires en fin de vérification, série de manipulations sur une table.

 CREATE TEMPORARY TABLE resultat

AS (SELECT Vo.Marque, Vo.Couleur FROM voiture AS Vo);

Page 6

09/10/2020

Riadh Zaafrani

3

Type de données

 Le type de données est choisi essentiellement en la fonction des opérations qui sont effectuées sur colonne.

 Le choix du type permet également de mettre en place un premier niveau de restriction sur le contenu des données : une colonne de type numérique ne pourra pas contenir de caractères. Des restrictions plus fines seront définies à la section « Contraintes d’intégrité ».

 Voici une liste (non exhaustive) des types de données

SQL.

Page 7

09/10/2020

Riadh Zaafrani

Type de données

INT SMALLINT REAL FLOAT(n) NUMBER (n,[d])

CHAR(n)

Entier standard (32 bits) Entier « petit » (16 bits) Réel (taille spécifique au SGBD) Réel (représenté sur « n » bits) Champ de longueur variable de n chiffres dont d après la virgule, acceptant des nombres négatifs.

Chaîne de caractères de longueur « n » (codage ASCII 1 octet)

VARCHAR(n) Chaîne de caractères de longueur maximale « n »

NCHAR(b)

NVARCHAR( b)

(codage ASCII 1 octet) Chaîne de caractères de longueur « n » (codage Unicode sur 2 octets) Chaîne de caractères de longueur maximale « n » (codage Unicode sur 2 octets)

Page 8

09/10/2020

Riadh Zaafrani

Publicité

4

Type de données

DATE TIME[(n)]

Date Heure, n (optionnel) est le nombre de decimals représentant la fraction de secondes

BOOLEAN BLOB

Booléen Binary Large Object : permet de stocker tout type binaire (photo, fichier traitement de texte…)

Page 9

09/10/2020

Riadh Zaafrani

Suppression

 La commande DROP TABLE permet de supprimer une table.

 DROP TABLE voiture

 Si

la table est référencée dans une autre table (par exemple, contrainte d’intégrité référentielle), le SGBD refuse en général de la supprimer : il utilise l’option RESTRICT par défaut. Si l’on désire tout de même la supprimer ainsi que tous les objets qui lui sont liés, il faut alors utiliser l’option CASCADE. Dans l’exemple, si la table ‘vente’ utilise la table ‘voiture’ comme table de référence pour le contenu de la colonne ‘NumVoit’, on ne peut supprimer la table ‘voiture’ avant d’avoir supprimé la table ‘vente’.

 DROP TABLE voiture CASCADE

Page 10

09/10/2020

Riadh Zaafrani

5

Plan du cours

 Création des tables avec SQL  Modification de la structure

d’une table avec SQL

 Les contraintes d’intégrité sous

SQL

Page 11

09/10/2020

Riadh Zaafrani

Modification

 La commande ALTER TABLE permet de modifier la structure de la table, c’est-à-dire d’ajouter, de supprimer ou modifier des colonnes.

 ALTER TABLE voiture

ADD COLUMN enplus INT ;

 SELECT * FROM voiture ;

NumVoit Marque Peugeot 1 Citroen 2 Opel 3 Peugeot 4 Renault 5 Renault 6

Type 404 SM GT 403 Alpine A310 Rose Bleue Floride

enplus Couleur NULL Rouge Noire NULL Blanche NULL Blanche NULL NULL NULL

Page 12

09/10/2020

Riadh Zaafrani

6

Modification

 ALTER TABLE voiture

DROP COLUMN Couleur;

 SELECT * FROM voiture ;

enplus Type NumVoit Marque NULL 404 Peugeot NULL SM Citroen NULL GT Opel Peugeot NULL 403 Renault Alpine A310 NULL NULL Floride Renault

1 2 3 4 5 6

Page 13

09/10/2020

Riadh Zaafrani

Modification  La commande ALTER permet de modifier également les contraintes associées aux colonnes. Cette partie est traitée ultérieurement. Le mot clé COLUMN est optionnel.

 Il n’est pas possible de modifier directement le nom d’une colonne ou son type. faut pour cela écrire une série d’opérations, en utilisant par exemple des colonnes temporaires.

Il

 Voici

la suite d’instructions permettant la modification du nom de la colonne de nom ‘Couleur’ de la table ‘voiture’ en ‘Teinte’ en changeant son type.

Page 14

09/10/2020

Riadh Zaafrani

7

Modification

 ALTER TABLE voiture

ADD COLUMN Teinte CHAR(60);

 SELECT * FROM voiture ;

NumVoit Marque Type 1 2 3 4 5 6

Peugeot 404 SM Citroen Opel GT Peugeot 403 Renault Alpine A310 Rose Bleue Floride Renault

Couleur Teinte NULL Rouge Noire NULL Blanche NULL Blanche NULL NULL NULL

Page 15

09/10/2020

Riadh Zaafrani

Modification

 UPDATE voiture

SET Teinte=Couleur ;

 SELECT * FROM voiture ;

NumVoit Marque Type

Peugeot 404

Citroen SM GT Opel

Peugeot 403

1

2 3

4

5 6

Couleur Teinte

Rouge

Rouge

Noire Blanche Blanche

Publicité

Noire

Blanche Blanche

Renault Alpine A310 Rose Bleue Renault Floride

Rose Bleue

Page 16

09/10/2020

Riadh Zaafrani

8

Modification

 ALTER TABLE voiture

DROP COLUMN Couleur;

 SELECT * FROM voiture ;

NumVoit Marque Type 1 2 3 4 5 6

Peugeot 404 Citroen SM Opel GT Peugeot 403 Renault Alpine A310 Rose Bleue Renault Floride

Teinte Rouge Noire Blanche Blanche

Page 17

09/10/2020

Riadh Zaafrani

Plan du cours

 Création des tables avec SQL  Modification de la structure

d’une table avec SQL

 Les contraintes d’intégrité

sous SQL

Page 18

09/10/2020

Riadh Zaafrani

9

CONTRAINTES D’INTÉGRITÉ

 Lors de l’étape de conceptualisation, on a défini la notion de « domaine », qui décrira l’ensemble des valeurs que peut prendre un attribut.

 Au niveau de SQL, une première approche du domaine est établie par le choix du type de la colonne, mais cela n’est pas assez restrictif en général.

Page 19

09/10/2020

Riadh Zaafrani

CONTRAINTES D’INTÉGRITÉ

 SQL vous permet de définir des conditions de validité plus fines lors de la création de la table, que l’on nomme contraintes d’intégrité.

 C’est le SGBD qui applique ces conditions au moment de l’insertion, de la modification ou même de la suppression liées à de données dans le cas ou ces dernières sont d’autres tables. Cette étape est parfois fastidieuse, mais elle garantit la cohérence des données et évite de se retrouver avec des bases de données, conceptuellement correctes, mais inutilisables faute de données valides.

Page 20

09/10/2020

Riadh Zaafrani

10

CONTRAINTES D’INTÉGRITÉ

 On peut distinguer différents types de contraintes

sur les colonnes :

 les propriétés générales comme l’unicité et

l’obligation;

 les restrictions d’appartenance à un ensemble ;

 les dépendances entre plusieurs colonnes.

Page 21

09/10/2020

Riadh Zaafrani

CONTRAINTES D’INTÉGRITÉ : Propriétés générales

1) La valeur de la colonne doit être renseignée

absolument (NOT NULL).

2) La valeur doit être unique comparée à toutes les

valeurs de la colonne de la table (UNIQUE).

 Lorsque les deux conditions précédentes sont réunies, la colonne peut servir à identifier un enregistrement et constitue donc une « clé candidate ».

Page 22

09/10/2020

Riadh Zaafrani

11

CONTRAINTES D’INTÉGRITÉ : Propriétés générales

 On rappelle qu’il ne peut y avoir qu’une seule clé que l’on désignera en SQL par le mot clé PRIMARY KEY. Ici, on indique que la colonne ‘NumAch’ est choisie comme clé de la table (donc implicitement unique et non nulle) et que la colonne ‘Nom’ doit toujours être renseignée.

 CREATE TABLE personne ( NumAch INT PRIMARY KEY, Nom CHAR(20) NOT NULL, Age INT ) ;

Page 23

09/10/2020

Riadh Zaafrani

CONTRAINTES D’INTÉGRITÉ : Propriétés générales

 Si aucune mention n’est précisée comme pour la colonne

‘Age’, elle peut être renseignée ou non.

 Si la clé est constituée de plusieurs colonnes (elle est dite composite) ; on indique la liste des colonnes constitutives de la clé à la suite du mot clé PRIMARY KEY.

 CREATE TABLE vente (

DateVente DATE, PRIX INT, NumAch INT, NumVoit INT, PRIMARY KEY (NumAch, NumVoit)) ;

Page 24

09/10/2020

Riadh Zaafrani

12

CONTRAINTES D’INTÉGRITÉ : Condition d’appartenance à un ensemble

 Il s’agit de décrire le domaine dans lequel la colonne pourra prendre

ses valeurs. Un ensemble peut être décrit :

 En donnant la liste de tous ses éléments constitutifs (IN). L’ensemble des jours de la semaine ne peut être exprimé que de cette manière : « lundi », « mardi », etc. On vérifie que la colonne ‘couleur’ ne peut prendre que des valeurs « normalisées » : ‘Rouge’ ‘Vert’ ou ‘Bleu’.

 CREATE TABLE voiture(

NumVoit INT PRIMARY KEY, Marque VARCHAR(30) NOT NULL, Type VARCHAR(20), Couleur VARCHAR(40) CHECK Couleur in (‘Rouge’,’Vert’,’Bleu’));

Page 25

Publicité

09/10/2020

Riadh Zaafrani

CONTRAINTES D’INTÉGRITÉ : Condition d’appartenance à un ensemble

 Par une expression (>, < , BETWEEN…).

 Par exemple, le prix doit être supérieur à 1 000.

 On vérifie que l’âge est compris entre 1 et 99.

 CREATE TABLE personne

(NumAch INT PRIMARY KEY, Nom CHAR(20) NOT NULL, Ville CHAR(40), AGE INT NOT NULL CHECK (Age BETWEEN 1 AND 99) );

Page 26

09/10/2020

Riadh Zaafrani

13

CONTRAINTES D’INTÉGRITÉ : Condition d’appartenance à un ensemble

 Par une référence aux valeurs d’une colonne d’une autre table (REFERENCES). Les colonnes doivent être de même type et l’on ne peut plus détruire par défaut une table qui apparaît comme référence. On vérifie que les valeurs identifiantes des personnes ‘NumAch’ et des voitures ‘NumVoit’ de la table ‘vente’ existent bien dans les tables de référence ‘personne’ et ‘voiture’.

 CREATE TABLE vente (

DateAch DATE, PRIX INT, NumAch INT NOT NULL REFERENCES personne(NumAch), NumVoit INT NOT NULL REFERENCES voiture(NumVoit), PRIMARY KEY (NumAch, NumVoit)) ;

Page 27

09/10/2020

Riadh Zaafrani

Condition sur plusieurs colonnes (contrainte de table)

 Lorsque l’on désire exprimer des contraintes plus élaborées impliquant plusieurs colonnes, on peut définir une contrainte de table en utilisant le mot clé CONSTRAINT. On vérifie que la colonne ‘Age’ et la colonne ‘Ville’ doivent être renseignées ou vides en meme temps.

 CREATE TABLE personne

(NumAch INT PRIMARY KEY, Nom CHAR(20) NOT NULL, Ville CHAR(40), AGE INT, CONSTRAINT la_contrainte CHECK ( (Age IS NOT NULL AND Ville IS NOT NULL) OR (Age IS NULL AND Ville IS NULL) );

Page 28

09/10/2020

Riadh Zaafrani

14

Dénomination des contraintes

 Les contraintes peuvent être nommées afin d’être plus

facilement manipulées ultérieurement.

 Dans le cas où aucun nom n’est affecté explicitement à une contrainte, Oracle génère automatiquement un nom de la forme SYS_CXXXXXX(XXXXXX est un nombre entier unique).

 De tels noms ne sont pas parlants. Il est donc préférable de la fournir vous-même. L’emploi d’une stratégie pour affecter des noms permet de mieux les identifier et les gérer.

Page 29

09/10/2020

Riadh Zaafrani

Dénomination des contraintes

 Lors de l’affectation explicite d’un nom à une contrainte, il est la convention de dénomination suivante :

pratique d’utiliser TABLE_COLONNE_TYPEDECONTRAINTE.

 Où TYPEDECONTRAINTE est associé au type de contrainte :

l’abréviation mnémonique

 NN NOT NULL

CK CHECK UQ UNIQUE

 PK PRIMARY KEY

FK FOREIGN KEY

 Cela facilite la compréhension des messages, et permet de modifier ou

de détruire une contrainte :

 ALTER TABLE CINEMA DROP CONSTRAINT CINEMA_SALLE_NN

Page 30

09/10/2020

Riadh Zaafrani

15

Dénomination des contraintes

 Exemple :

 CREATE TABLE UTILISATEUR (

NO_UTILISATEUR NUMBER(6)

CONSTRAINT UTILISATEUR_PK PRIMARY KEY,

NOM_PRENOM VARCHAR2(20)

CONSTRAINT

UTILISATEUR_NOM_PRENOM_NN NOT NULL,

Page 31

09/10/2020

Riadh Zaafrani

Dénomination des contraintes

DATE_CREATION DATE DEFAULT SYSDATE NOT NULL, DATE_MISEAJOUR DATE DEFAULT SYSDATE NOT NULL, CONNECTIONS NUMBER(6) CONSTRAINT

UTILISATEUR_CONNECTIONS_CK

CHECK (CONNECTIONS BETWEEN 1 AND 10), CONSTRAINT UTILISATEUR_DATE_MISEAJOUR_CK

CHECK (DATE_CREATION <=

DATE_MISEAJOUR));

Page 32

09/10/2020

Riadh Zaafrani

16

Université Tunis El Manar - Institut Supérieur d’Informatique

Module 2 – Section 2 : Le langage de définition des données (LDD) de SQL

Riadh ZAAFRANI 1ère année MP2L Merci pour votre attention

Page 33

09/10/2020

Riadh Zaafrani

17