sql - 5 - pub.roinfo.cs.pub.ro/frbd/sgi/sql5-fr.pdfdes données (ldd) en ce qui concerne: les types...

61
SQL - 5 Création des tables F. Radulescu. Cours: FILS - SGI - Le langage SQL 1 Création des tables

Upload: others

Post on 13-Feb-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

  • SQL - 5

    Création des tables

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    1

    Création des tables

  • STUD

    MATR NUME AN GRUPA DATAN LOC TUTOR PUNCTAJ CODS

    ---- ------- -- ------ --------- ---------- ----- ------- ----

    1456 GEORGE 4 1141A 12-MAR-82 BUCURESTI 2890 11

    1325 VASILE 2 1122A 05-OCT-84 PITESTI 1456 390 11

    1645 MARIA 3 1131B 17-JUN-83 PLOIESTI 1400 11

    3145 ION 1 2112B 24-JAN-85 PLOIESTI 3251 1670 21

    2146 STANCA 4 2141A 15-MAY-82 BUCURESTI 620 21

    3251 ALEX 5 2153B 07-NOV-81 BRASOV 1570 21

    2215 ELENA 2 2122A 29-AUG-84 BUCURESTI 2146 890 21

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    2

    2215 ELENA 2 2122A 29-AUG-84 BUCURESTI 2146 890 21

    4311 ADRIAN 3 2431A 31-JUL-83 BUCURESTI 450 24

    3514 FLOREA 5 2452B 03-FEB-81 BRASOV 3230 24

    1925 OANA 2 2421A 20-DEC-84 BUCURESTI 4311 760 24

    2101 MARIUS 1 2412B 02-SEP-85 PITESTI 3514 310 24

    4705 VOICU 2 2421B 19-APR-84 BRASOV 4311 1290 24

  • SPEC et BURSACODS NUME DOMENIU

    ----- ---------- ---------------

    11 MATEMATICA STIINTE EXACTE

    21 GEOGRAFIE UMANIST

    24 ISTORIE UMANIST

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    3

    TIP PMIN PMAX SUMA

    -------------------- ----- ----- -----

    FARA BURSA 0 399

    BURSA SOCIALA 400 899 100

    BURSA DE STUDIU 900 1799 150

    BURSA DE MERIT 1800 2499 200

    BURSA DE EXCEPTIE 2500 9999 300

  • ObjectifL'objectif de ce chapitre est de présenter

    des éléments du langage de description des données (LDD) en ce qui concerne:

    �Les types de données pour les colonnes

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    4

    �Les types de données pour les colonnes d'une table,

    �Création de nouvelles tables�Les contraintes d'intégrité

  • Les types de donnéesLe système Oracle fournit un ensemble optimal

    de types de données qui peuvent être associés a des colonnes d'une table, regroupés en plusieurs catégories:

    �Les types numériques scalaires�Chaînes de caractères

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    5

    �Chaînes de caractères�Types binaires�Types pour les dates, l'heure et le temps�Types LOB (Large Object)�Types de composés: TABLE et VARRAY

  • Nombres� NUMBER - nombre réel de taille variable, avec 38 chiffres

    significatifs, avec des valeurs comprises entre 1E-130 et 1E125.

    � NUMBER(n) - entier avec n chiffres � NUMBER(n, z) - nombre réel avec n chiffres/ z décimales� DEC, DECIMAL, NUMERIC - sous-types pour NUMBER.

    Nombres à virgule fixe avec 38 chiffres significatifs.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    6

    Nombres à virgule fixe avec 38 chiffres significatifs.� DOUBLE PRECISION - sous-types de NUMBER. Nombres à

    virgule flottante avec 38 chiffres significatifs.� REAL - sous-type de NUMBER. Nombres à virgule flottante

    avec 18 chiffres significatifs.

  • Nombres� INTEGER, INT, SMALLINT - sous-types de NUMBER.

    Entiers avec un maximum de 38 chiffres� BINARY_INTEGER nombre entier compris entre -231 et

    231.� NATURAL, POSITIVE - sous-types de BINARY_INTEGER.

    Nombres entiers, non négatif / positif.� NATURALN, POSITIVEN - comme NATURAL, POSITIVE

    mais NOT NULL

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    7

    � NATURALN, POSITIVEN - comme NATURAL, POSITIVE mais NOT NULL

    � SIGNTYPE - sous-type de BINARY_INTEGER. Il ne peut prendre que les valeurs -1, 0 et 1.

    � PLS_INTEGER entier compris entre -231 et 231. Similaires à BINARY_INTEGER mais plus rapides et en cas de dépassement Oracle lève une exception.

  • ChaînesCHAR, CHAR(N) - chaîne de longueur fixe égale à n.

    La valeur maximale de n est 2000. La valeur de défaut pour n est 1.

    CHARACTER, CHARACTER(n) - sont identiques aux précédents. Introduites pour la compatibilité avec d'autres systèmes.

    NCHAR (n) - comme CHAR mais peut stocker des

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    8

    NCHAR (n) - comme CHAR mais peut stocker des chaînes écrites dans les jeux de caractères nationaux (multi-octets)

    VARCHAR2 (n) - chaîne de longueur variable égal à n. La valeur maximale de n est de 4000.

    STRING (n), VARCHAR (n) - identique à VARCHAR2, introduites pour la compatibilité avec d'autres systèmes

  • ChaînesNVARCHAR(n) - comme VARCHAR. Peut stocker des chaînes

    écrites dans les jeux de caractères nationaux (multi-octets)

    LONG - chaîne de jusqu'à 231 octets. Il est permis seulement une colonne de ce type pour une table.

    ROWID - peut stocker un identifiant pour une ligne dans une table. Pour la conversion en / de chaîne (18 caractères) on peut utiliser les fonctions SQL CHARTOROWID

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    9

    on peut utiliser les fonctions SQL CHARTOROWID ROWIDTOCHAR respectivement.

    UROWID - ROWID universelle. Peut stocker un identifiant de ligne logique et physique dans une table, indexé ou non et un identifiant de ligne externe (non-Oracle). Il n'est pas nécessaire d'utiliser des fonctions de conversion de / vers string (conversion automatique).

  • Types binaire�RAW (n) - similaire à VARCHAR2, mais

    contient des données binaires. La valeur maximale de n est de 2000.

    �LONG RAW - comme LONG mais

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    10

    �LONG RAW - comme LONG mais contiennent des données binaires.

  • Dates, l'heure et temps�DATE - Date du calendrier (siècle, année,

    mois, jour, heure, minute, seconde).

    �TIMESTAMP [(n)] - Extension de DATE. Il contient aussi les fractions de seconde. Si n est présent, il spécifie le nombre de

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    11

    n est présent, il spécifie le nombre de décimales. Par défaut n = 6

    �TIMESTAMP [(n)] WITH TIME ZONE -comme TIMESTAMP mais contient aussi la différence entre l'heure locale et le temps universel (GMT).

  • Dates, l'heure et temps�TIMESTAMP [(n)] WITH LOCAL TIME ZONE -

    on fait une conversion entre l'heure du serveur et l'heur de l'application client.

    �INTERVAL YEAR [(n)] TO MONTH - Pour des périodes (années et mois). N spécifie le nombre de chiffres pour l'année (entre 0 et 4,

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    12

    nombre de chiffres pour l'année (entre 0 et 4, par défaut 2).

    �INTERVAL DAY [(z)] TO SECOND [(s)] Comme pour le type précédent, mais pour des périodes de jours et secondes. Z et S sont les précisions pour jour, respectivement seconde (0-9, défaut 2 pour Z et 6 pour S).

  • Les types LARGE OBJECT�Ces types introduits dans les dernières

    versions du système, permettent le stockage de grandes quantités de données à des colonnes d'une table ou une référence (appelé localisateur) dans un fichier externe de la base de données.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    13

    de la base de données.

    �Manipulation de telles valeurs est faite avec des paquets PL/SQL en utilisant des procédures et des fonctions fournies par le système.

    �Leurs caractéristiques sont les suivantes:

  • Les types LOB�CLOB - Chaîne de jusqu'à 4 Go. Il est

    recommandé au lieu de LONG.

    �NCLOB - similaire à CLOB mais peut stocker des chaînes qui utilisent des jeux de caractères nationaux. La taille maximale est de 4 Go également.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    14

    également.

    �BLOB - Données binaires, taille jusqu'à 4 Go

    �BFILE - Données binaires, taille jusqu'à 4 Go, stockées dans des fichiers externes. Ne participent pas à des transactions, à la réplication - peuvent être lus mais pas mis a jour.

  • CREATE TABLE�Syntaxe simplifiée:CREATE TABLE [schema.]nom_table

    (nom_colonne_1 type_colonne_1 [DEFAULT expression_1],

    nom_colonne_2 type_colonne_2 [DEFAULT expression_2],

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    15

    nom_colonne_2 type_colonne_2 [DEFAULT expression_2],

    . . .

    nom_colonne_n type_colonne_n [DEFAULT expression_n]);

  • CREATE TABLE – cont.�DEFAULT expression_i spécifie une valeur

    par défaut et qui est automatiquement inscrit dans la colonne si à l'ajout d'une nouvelle ligne on ne précise pas une valeur

    �Schéma - nom du propriétaire des nouvelles

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    16

    �Schéma - nom du propriétaire des nouvelles tables. La valeur par défaut est le nom de l'utilisateur qui exécute la création.

  • CREATE TABLE – cont.�L'utilisateur dispose des droits nécessaires (privilège

    CREATE TABLE).

    � Il y a l'espace de stockage pour la nouvelle table.

    �Le nom de la table et les colonnes vérifient les restrictions habituelles Oracle (jusqu'à 30 caractères, à commencer par une lettre, contenant des lettres,

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    17

    à commencer par une lettre, contenant des lettres, des chiffres et les caractères _, $ et #, pas des mots réservés Oracle). Les autres caractères sont autorisés que si le nom est enfermé dans des guillemets.

    � Il n'y a pas déjà un objet avec le même nom dans le même schéma (même utilisateur Oracle).

  • Majuscules et minuscules�Comme avec les mots clés, les lettres

    majuscules et minusculessont sont considérés comme égaux dans le nom de tables et colonnes.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    18

    de tables et colonnes.

    �Exemple: la table est la même si à la création on a utilisé les nom de STUD, Stud ou StuD.

  • DEFAULT�L'expression sur la clause facultative DEFAULT doit

    être évalué à une valeur compatible avec le type de la colonne.

    �On peut avoir ici:

    � Constantes numérique ou chaînes

    � Des fonctions SQL, y compris SYSDATE ou USER.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    19

    � Des fonctions SQL, y compris SYSDATE ou USER.

    �Mais on ne peut avoir:

    � Un nom de colonne,

    � Le nom d'une pseudo-colonne. (comme les pseudo-colonnes d'une séquence: NEXTVAL ou CURRVAL).

  • Exemple 1CREATE TABLE STUD(

    MATR NUMBER(4),

    NUME VARCHAR2(10),

    AN NUMBER(1) DEFAULT 1,

    GRUPA VARCHAR2(6),

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    20

    GRUPA VARCHAR2(6),

    DATAN DATE,

    LOC VARCHAR2(10) DEFAULT 'BUCURESTI',

    TUTOR NUMBER(4),

    PUNCTAJ NUMBER(4) DEFAULT 0,

    CODS NUMBER(2) );

  • Exemple 2�Création d'une table pour stocker les données

    d'un événement: heure de début, la durée et une description.

    CREATE TABLE EVENEMENT(

    CODE NUMBER(10),

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    21

    CODE NUMBER(10),

    "HEURE DE DEBUT" TIMESTAMP(3) WITH LOCAL

    TIME ZONE,

    DUREE INTERVAL DAY(2) TO SECOND(3),

    "Description" LONG);

  • CREATE de SELECTCREATE TABLE [schéma.]nom_table

    [(description_colonne_1, ...,

    description_colonne_n)]

    AS

    requete_SELECT;

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    22

    requete_SELECT;

    �Cette requête crée une table avec le nom spécifié et la même structure que le résultat renvoyé par SELECT.

  • CREATE de SELECT� Description de la colonne est pas présent

    dans la requête :� Les noms de colonnes de la nouvelle table et

    leurs types sont identiques au résultat de la requête SELECT.

    � La nouvelle table n'hérite pas les contraintes d'intégrité de la table / tables du SELECT.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    23

    � La nouvelle table n'hérite pas les contraintes d'intégrité de la table / tables du SELECT.

    � Si la liste des expressions de la clause SELECT contient certains expressions qui ne sont pas des noms Oracle valides, l'utilisation des alias de colonnes est obligatoire.

  • ExempleCREATE TABLE STUD11

    AS

    SELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ MARIT"

    FROM STUD WHERE CODS = 11;

    � STUD11 sera:MATR NUME PUNCTAJ MARIT

    ----- ---------- -------------

    1456 GEORGE 3179

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    24

    1456 GEORGE 3179

    1325 VASILE 429

    1645 MARIA 1540

    � Son schéma:Nume colonne Tip

    ------------- -------------

    MATR NUMBER(4)

    NUME VARCHAR2(10)

    PUNCTAJ MARIT NUMBER

  • CREATE din SELECT�Création de la table est faite aussi quand SELECT ne

    renvoie pas des lignes. Par exemple:CREATE TABLE STUD100

    AS

    SELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ MARIT"

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    25

    MARIT"

    FROM STUD

    WHERE CODS = 100;

    �Elle aura pour effet de créer la table STUD100 avec le même schéma comme STUD11, mais vide.

  • CREATE de SELECT� La demande contient la colonne de

    description:� Description des colonnes a la syntaxe:

    nom_colonne [DEFAULT expression] [contraintes d'intégrité ]

    � Le nombre de descriptions de colonne doit

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    26

    � Le nombre de descriptions de colonne doit être égal au nombre de colonnes dans le résultat de SELECT.

    � La nouvelle table n'hérite pas les contraintes d'intégrité de la table / tables du SELECT mais reçoit les contraintes d'intégrité de la description.

  • ExempleCREATE TABLE STUD11

    (NUMAR DEFAULT 0 NOT NULL, NUME, PUNCTE NOT NULL)

    AS

    SELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ MARIT"

    FROM STUD

    WHERE CODS = 11;

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    27

    � Le schéma du résultat:Nume colonne Null? Tip Implicit

    -------------- -------- ------------- ---------

    NUMAR NOT NULL NUMBER(4) 0

    NUME VARCHAR2(10)

    PUNCTE NOT NULL NUMBER

  • Contraintes d'intégrité�Les contraintes d'intégrité sont des règles qui doivent

    être vérifiées par les valeurs contenues dans une table.

    �Elles empêchent l'introduction de données erronées dans la base de données et définissent la forme correcte, mais ces valeurs ne tiennent pas compte de

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    28

    correcte, mais ces valeurs ne tiennent pas compte de leur signification.

    �Les contraintes d'intégrité sont vérifiées automatiquement par le système de gestion pour l'ajout, la suppression et le mis a jour des lignes).

    �Si les nouvelles valeurs ne sont pas valides, l'opération est rejetée par le SGBD et une erreur est générée.

  • Types de contraintes�NOT NULL: les valeurs ne peuvent pas

    être null

    �PRIMARY KEY: définit la clé primaire d'une table

    UNIQUE: une autre clé (unique) de la

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    29

    �UNIQUE: une autre clé (unique) de la table

    �FOREIGN KEY: définit une clé étrangère

    �CHECK : introduire une condition (expression logique).

  • Contraintes d'intégrité�Chaque contraintes d'intégrité peut avoir un

    nom qui permet activer ou désactiver cette contrainte et d'autres opérations sur elle.

    �Si on n'a pas spécifié un tel nom, le système génère automatiquement un.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    30

    génère automatiquement un.

    �La position de la définition d'une contrainte d'intégrité pour une table peut être:

  • Contraintes d'intégrité�Dans la description d'une colonne, si la

    contrainte se réfère uniquement à cette colonne (habituellement on que le contrainte est définie au niveu colonne)

    �Après la liste des descriptions de colonnes

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    31

    �Après la liste des descriptions de colonnes (niveau table).

    �Selon l'emplacement, la syntaxe pour définir une contrainte peut être différente.

    �Pour chaque type de contrainte sont présentés à la fois la syntaxe et des exemples de leur utilisation.

  • Types de contraintes�NOT NULL: les valeurs ne peuvent pas

    être null

    �PRIMARY KEY: définit la clé primaire d'une table

    UNIQUE: une autre clé (unique) de la

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    32

    �UNIQUE: une autre clé (unique) de la table

    �FOREIGN KEY: définit une clé étrangère

    �CHECK : introduire une condition (expression logique).

  • NOT NULL�Ce type de contrainte est pour les

    colonnes de nouvelle table et précise qu'elle ne peut pas contenir des valeurs nulles.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    33

    nulles.

    �Il peut être défini que niveau colonne et a la syntaxe est la suivante:

    �colonne [CONSTRAINT nom_constraint] NOT

    NULL

  • ExempleCREATE TABLE SPEC

    (CODS NUMBER(2),

    NUME VARCHAR2(10) CONSTRAINT

    NUMENENUL NOT NULL,

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    34

    NUMENENUL NOT NULL,

    DOMENIU VARCHAR2(15) NOT

    NULL);

  • Types de contraintes�NOT NULL: les valeurs ne peuvent pas

    être null

    �PRIMARY KEY: définit la clé primaire d'une table

    UNIQUE: une autre clé (unique) de la

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    35

    �UNIQUE: une autre clé (unique) de la table

    �FOREIGN KEY: définit une clé étrangère

    �CHECK : introduire une condition (expression logique).

  • PRIMARY KEY�Syntaxe niveau colonne:

    colonne [CONSTRAINT nom_constraint]

    PRIMARY KEY

    �Syntaxe niveau table:

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    36

    �Syntaxe niveau table:

    [,CONSTRAINT nom_constraint] PRIMARY

    KEY(liste_colonnes)

  • Exemple�Niveau colonne:CREATE TABLE SPEC(

    CODS NUMBER(2) CONSTRAINT SPEC_PK PRIMARY KEY,

    NUME VARCHAR2(10),

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    37

    NUME VARCHAR2(10),

    DOMENIU VARCHAR2(15));

  • Exemple�Niveau table:CREATE TABLE SPEC(

    CODS NUMBER(2),

    NUME VARCHAR2(10),

    DOMENIU VARCHAR2(15),

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    38

    DOMENIU VARCHAR2(15),

    CONSTRAINT SPEC_PK PRIMARY KEY(CODS));

  • PK avec >1 attributCREATE TABLE BURSA(

    PMIN NUMBER(4),

    PMAX NUMBER(4),

    TIP VARCHAR2(20),

    SUMA NUMBER(4),

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    39

    SUMA NUMBER(4),

    CONSTRAINT BURSA_PK PRIMARY KEY(PMIN,PMAX));

  • Types de contraintes�NOT NULL: les valeurs ne peuvent pas

    être null

    �PRIMARY KEY: définit la clé primaire d'une table

    UNIQUE: une autre clé (unique) de la

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    40

    �UNIQUE: une autre clé (unique) de la table

    �FOREIGN KEY: définit une clé étrangère

    �CHECK : introduire une condition (expression logique).

  • UNIQUE�Syntaxe niveau colonne:

    colonne [CONSTRAINT nom_constraint]

    UNIQUE

    �Syntaxe niveau table:

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    41

    �Syntaxe niveau table:

    � [,CONSTRAINT nom_constraint] UNIQUE(listr_colonnes)

  • Exemple�Si dans la table SPEC on ne peut jamais

    avoir deux lignes avec le même nom, on ajoute une contrainte UNIQUE:

    CREATE TABLE SPEC(

    CODS NUMBER(2) CONSTRAINT SPEC_PK

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    42

    CODS NUMBER(2) CONSTRAINT SPEC_PK PRIMARY KEY,

    NUME VARCHAR2(10) CONSTRAINT NUMES_UNIC UNIQUE,

    DOMENIU VARCHAR2(15));

  • Exemple�La même contrainte, niveau table:

    CREATE TABLE SPEC(

    CODS NUMBER(2) CONSTRAINT SPEC_PK PRIMARY

    KEY,

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    43

    KEY,

    NUME VARCHAR2(10),

    DOMENIU VARCHAR2(15),

    CONSTRAINT NUMES_UNIC UNIQUE(NUME));

  • Exemple�Si dans la table BURSA on ne peut jamais avoir deux

    lignes avec le même montant, on ajoute une contrainte UNIQUE:CREATE TABLE BURSA(

    PMIN NUMBER(4),

    PMAX NUMBER(4),

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    44

    PMAX NUMBER(4),

    TIP VARCHAR2(20),

    SUMA NUMBER(4) CONSTRAINT SUMA_UNICA UNIQUE,

    CONSTRAINT BURSA_PK PRIMARY KEY(PMIN, PMAX));

  • Exemple�Dans ce cas, on ne peut pas y avoir deux

    lignes contenant la même valeur non nulle sur colonne SUMA, mais on peut avoir plusieurs lignes avec des valeurs NULL dans cette colonne!

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    45

    dans cette colonne!

    �Seulement les valeurs non-nulles sont vérifiées pour l'unicité.

  • Unicité�Exemple: Soit une table NOMBRES avec

    le schema:CREATE TABLE NOMBRES(

    NOMBRE1 NUMBER(4),

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    46

    NOMBRE1 NUMBER(4),

    NOMBRE2 NUMBER(4),

    UNIQUE(NOMBRE1, NOMBRE2));

  • Contenu valideNOMBRE1 NOMBRE2

    ------- -------

    NULL NULL

    NULL NULL

    1000 2000

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    47

    1000 2000

    1000 3000

    NULL 2000

    1000 NULL

  • Contenu invalideNOMBRE1 NOMBRE2

    ------- -------

    NULL NULL

    NULL NULL

    1000 2000

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    48

    1000 2000

    1000 3000

    NULL 2000

    1000 NULL

    1000 2000

    NULL 2000

    1000 NULL

  • Types de contraintes�NOT NULL: les valeurs ne peuvent pas

    être null

    �PRIMARY KEY: définit la clé primaire d'une table

    UNIQUE: une autre clé (unique) de la

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    49

    �UNIQUE: une autre clé (unique) de la table

    �FOREIGN KEY: définit une clé étrangère

    �CHECK : introduire une condition (expression logique).

  • FOREIGN KEY�Par cette contrainte les valeurs d'une colonne

    / colonnes de la table X sont obligés d'être seulement parmi les valeurs de la clé (clé primaire ou unique) d'une table Y de la BD.

    �X et Y peuvent être la même table.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    50

    �X et Y peuvent être la même table.

    �Ces colonnes de X forment ce qu'on appelle une clé étrangère et ce type de contrainte est aussi appelé intégrité référentielle.

  • Syntaxe�Niveau colonne:colonne [CONSTRAINT nom_constraint]

    REFERENCES table(colonne)

    [ON DELETE CASCADE |

    ON DELETE SET NULL]

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    51

    ON DELETE SET NULL]

    �Niveau table:[,CONSTRAINT nom_constraint] FOREIGN KEY(liste_colonnes)

    REFERENCES tabela(liste_colonnes)

    [ON DELETE CASCADE |

    ON DELETE SET NULL]

  • ExempleCREATE TABLE STUD(

    MATR NUMBER(4) PRIMARY KEY,

    NUME VARCHAR2(10),

    AN NUMBER(1) DEFAULT 1,

    GRUPA VARCHAR2(6),

    DATAN DATE,

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    52

    DATAN DATE,

    LOC VARCHAR2(10) DEFAULT 'BUCURESTI',

    TUTOR NUMBER(4) REFERENCES STUD(MATR),

    PUNCTAJ NUMBER(4) DEFAULT 0,

    CODS NUMBER(2),

    CONSTRAINT CODS_FK FOREIGN KEY(CODS)

    REFERENCES SPEC(CODS));

  • Remarques�Si la table SPEC est absente Oracle signale une

    erreur : ORA-00942: table or view does not exist�Si la table existe mais n'a pas CODS comme clé

    Oracle signale l'erreur: ORA-02270: no matching unique or primary key for this column-list

    �Si on essaie de supprimer une ligne qui a des "fils"

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    53

    �Si on essaie de supprimer une ligne qui a des "fils" Oracle signale l'erreur: ORA-02449: unique/primary keys în table referenced by foreign keys

    �ON DELETE spécifie que on peut supprimer une ligne avec des "fils" et le fils sont aussi supprimes (ON DELETE CASCADE) ou ils reçoivent une valeur nulle pour la clé étrangère (ON DELETE SET NULL).

  • ExempleCREATE TABLE STUD(

    MATR NUMBER(4) PRIMARY KEY,

    . . . . . . . . . . . . . . . . . . .

    TUTOR NUMBER(4) REFERENCES STUD(MATR)

    ON DELETE SET NULL,

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    54

    ON DELETE SET NULL,

    . . . . . . . . . . . . . . . . . . .

    CONSTRAINT CODS_FK FOREIGN KEY(CODS)

    REFERENCES SPEC(CODS)

    ON DELETE CASCADE);

  • FK avec UNIQUE�Si la contrainte est définie pour une clé

    UNIQUE (qui peut contenir des valeurs nulles), elle est vérifié seulement pour les clés étrangères non-nulles.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    55

    les clés étrangères non-nulles.

  • Types de contraintes�NOT NULL: les valeurs ne peuvent pas

    être null

    �PRIMARY KEY: définit la clé primaire d'une table

    UNIQUE: une autre clé (unique) de la

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    56

    �UNIQUE: une autre clé (unique) de la table

    �FOREIGN KEY: définit une clé étrangère

    �CHECK : introduire une condition (expression logique).

  • CHECK�Par ce type de contrainte les valeurs d'une

    ligne de la table sont obligés de vérifier une condition (expression logique).

    �La même colonne peut participer à plusieurs contraintes de ce type, chacune ayant une autre condition associée.

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    57

    autre condition associée.�La condition est évaluée seulement dans la

    ligne, sans être en mesure de tenir compte des valeurs qui sont sur autres lignes de la table.

  • Syntaxe�Niveau colonne:

    colonne [CONSTRAINT nom_constraint]

    CHECK (expression_logique)

    �Niveau table:

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    58

    �Niveau table:

    [,CONSTRAINT nom_constraint]

    CHECK (expression_logique)

  • Exemple�Table BURSA:

    � PMIN et PMAX >=0

    � PMIN < PMAX

    � SUMA entre 0 et 500

    �La requête sera:CREATE TABLE BURSA(

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    59

    CREATE TABLE BURSA(

    PMIN NUMBER(4) CHECK (PMIN >= 0),

    PMAX NUMBER(4) CHECK (PMAX >= 0),

    TIP VARCHAR2(20),

    SUMA NUMBER(4) CHECK (SUMA BETWEEN 0 AND 500),

    CONSTRAINT PMINPMAX CHECK (PMIN < PMAX));

  • Exemple�Les valeurs nulles ne sont pas vérifiées.�L'expression logique peut être complexe:

    CREATE TABLE BURSA(

    PMIN NUMBER(4), PMAX NUMBER(4),

    TIP VARCHAR2(20),

    F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    60

    TIP VARCHAR2(20),

    SUMA NUMBER(4),

    CONSTRAINT BURSA_CK CHECK (PMIN < PMAX

    AND PMIN >= 0 AND PMAX >= 0 AND SUMA

    BETWEEN 0 AND 500));

  • F. Radulescu. Cours: FILS - SGI - Le

    langage SQL

    61

    Fin