Upload
vuongliem
View
218
Download
0
Embed Size (px)
Citation preview
1
Bases de données relationnelles
Harmonisation ESSI -MS ISI - MS IMAFA
Anne-Marie [email protected]
7 Le langage de Définition de Données SQL (sql plus oracle)
Création de tableType des données
contraintes
2
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 3BD Relationnelles
7.1 Le langage SQLPLUS D ’ORACLE Langage de définition de données
CREATE DATABASE Etudiants
Créer une base de données
CREATE DATABASE database_name
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 4BD Relationnelles
7.2 Le langage SQL, SQLPLUS D ’ORACLE Langage de définition de données
Types des donnéesCHAR, VARCHAR,LONG
NUMBER, NUMBER (N), NUMBER (N,M)
DATE
Langage de définition de données (DDL) :
création de tablesmodification de tablesdestruction de tables
Langage de modification de données (DML):
insertion de tuplesmodification de tuplessuppression de tuples
vu ds chapitre suivant
3
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 5BD Relationnelles
7.2 Types des données SQL (norme ISO)
CHAR :chaînes de longueur fixe < à 255 caractères<char_type> ::=CHAR(<length>)Ces chaînes occupent une taille fixe dans la base.
VARCHAR : chaînes longueur variable < 2000 caractères<varchar_type>::=VARCHAR(<maxlength>)
Ces chaînes occupent une taille variable dans la baseLONG :textes de longueur variable < 2G <long_type> ::=LONG
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 6BD Relationnelles
7.2Types des données SQL (suite)
Nombres (entiers,flottants, décimaux) sql ISO
<number_type> ::=NUMBER [(<precision>[,<scale>] ) ]
sql plusinteger(size); int(size); smallint(size); tinyint(size)
decimal(size,d) ; numeric(size,d)
Dates: yyyymmdd <date_type> ::=DATE En externe ces dates doivent être traduites (soit explicitement soit par coertion) en chaînes, et inversement. Elles sont stockées dans la base sous forme d'une information codée contenant :Siècle, Année, Mois, Jour, Heure, Minute, Seconde.
4
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 7BD Relationnelles
7.3 Création de table, relation
L'objet table est constitué :
du schéma définissant la relation (noms et types des attributs + contraintes)des lignes
(tuples) présentes dans la table.
CREATE TABLE Etudiant (IdEtudiant NUMBER(5) PRIMARY KEY ,Nom VARCHAR(20) NOT NULL,Prenom VARCHAR(20) NOT NULL,DateNaiss NUMBER(4) default 1980);
SyntaxeCREATE TABLE { <schema>.} <table_name>( <column_name> <data_type> [default<exp>]<column_constraint> [<column_constraint>]* [, <table_constraint>]*
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 8BD Relationnelles
7.4 Gestion des tables
Le modèle relationnel sous-jacent utilise une valeur NULL qui est ajoutée à chacun des domaines de base. -> attribut obligatoire NOT NULLL'ensemble des lignes d'une table n'est pas
ordonné. Il constitue en ce sens un ensemble. Par contre il peut exister des lignes dupliquées. Le modèle est donc de type "bag". L'ensemble des attributs (colonnes) d'une table
est ordonné. Cet ordre est utilisé dans les commandes de mise à jour de tuples.
5
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 9BD Relationnelles
7.5 Contraintes d ’intégrité
Contraintes d ’intégrité : constraint
CREATE TABLE Etudiant (IdEtudiant NUMBER(5) PRIMARY KEY ,Nom VARCHAR(20) NOT NULL,Prenom VARCHAR(20) NOT NULL,DateNaiss NUMBER(4) NOT NULL
constraint C1 unique (Nom, Prenom, DateNaiss));
Une violation de ces contraintes entraîne uneerreur/exception et retour en arrière de la commande SQLde modification l'ayant provoquée.
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 10BD Relationnelles
Exemple :
CREATE TABLE ENREG( NumE NUMBER(6)NOT NULL,NomM VARCHAR(20) NOT NULL,Classe NUMBER(2) NOT NULL,Pays CHAR(20) NOT NULL,IdDepos NUMBER(5) NOT NULL,
CONSTRAINT clep_enr PRIMARY KEY(NumE,Pays),CONSTRAINT cles_enr UNIQUE (NomM,Classe,Pays))
6
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 11BD Relationnelles
7.6 création d'index
Utile pour accélérer la recherche sur les colonnes souvent utiliséesOn peut créer plusieurs indexIls sont utilisés par le SGBD de manière transparente
CREATE INDEX index_nameON table_name (column_name)
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 12BD Relationnelles
Create table JURY(IdEtudiant NUMBER(5) NOT NULL REFERENCES Etudiant,NomMatière VARCHAR(20) NOT NULL,Note NUMBER(2),PRIMARY KEY (IdEtudiant , NomMatiere ));Create table JURY(IdEtudiant NUMBER(5) NOT NULL,NomMatière VARCHAR(20) NOT NULL,Note NUMBER(2),PRIMARY KEY (IdEtudiant , NomMatiere )FOREIGN KEY IdEtudiant REFERENCES Etudiant);
7.7 Clés étrangères
Équivalent àDoit être connue du système, pas de circularité
7
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 13BD Relationnelles
7.7 Clés étrangères sous SQL (suite)
CREATE TABLE Enreg( NumE NUMBER(6) NOT NULL,NomM VARCHAR(20) NOT NULL,Classe NUMBER(2) NOT NULL REFERENCES Classes,Pays CHAR(20) NOT NULL,
CONSTRAINT clep_enr PRIMARY KEY(NumE,Pays),CONSTRAINT cles_enr UNIQUE (NomM,Classe,Pays))
CREATE TABLE Classes( NumC NUMBER(6) NOT NULL PRIMARY KEY;
Libellé CHAR(20) NOT NULL,)
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 14BD Relationnelles
7.8 Modification de la structure de la base
ajout d ’un attribut: ALTER TABLE Etudiant ADD(Adresse CHAR(20));
modification du type d ’un attribut : ALTER TABLE Etudiant MODIFY(Adresse CHAR(25));
suppression d ’un attribut : ALTER TABLE Etudiant; DROP COLUMN Adresse;
8
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 15BD Relationnelles
7.9 Destruction
de la base :DROP DATABASE Etudiants
d'une tableDROP TABLE Etudiant;
d'un indexDROP INDEX table_name.index_name
des données d'une tableDELETE TABLE table_name
8 Langage SQLModification des données
Insertion ; suppression ; modificationséquences
9
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 17BD Relationnelles
8.1 Modification des données
Insérer de nouvelles lignesINSERT INTO Etudiant VALUES(3 ,'Martin' ,'Pierre' ,1979);
Modifier les colonnes d ’une tableUPDATE EtudiantSET Adresse=‘Nice’ WHERE Nom=‘Dupont’;
Supprimer des lignesDELETE FROM Etudiant WHERE Adresse=‘ Nice ’;
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 18BD Relationnelles
8.2 Séquences : définition
compteurs entiers, persistants à travers les sessions, dont la durée de vie n'est donc pas limitée.
Pour engendrer automatiquementdesidentificateurs numériques, peuvent être utilisés, après conversion, pour créer des identificateurs de type "chaîne".génération par SQL de clés primaires.
éviter au programmeur la mise en place de verrous de blocage dur des tables entières.
10
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 19BD Relationnelles
Séquences : syntaxe
<create_sequence_statement> ::= CREATE SEQUENCE <sequence_name>[<sequence_param>[,<sequence_param >]*]
<sequence_param> ::= increment by <integer> |start with <integer> |maxvalue <integer>|nomaxvalue |minvalue <integer>|nominvalue |
<drop_sequence_statement> ::=
drop sequence <sequence_name>
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 20BD Relationnelles
Séquences : utilisation
Les deux fonctions SQL, nextval et currvalretournent respectivement, une nouvelle valeur du compteur, et la valeur courante.<sequence_name>.nextval
augmente le compteur de son incrément et retourne la nouvelle valeur; sauf la première fois, où il retourne la valeur initiale.
l'évaluation de <sequence_name>.currvalretourne la valeur courante du compteur,sauf si <sequence_name>.nextval n'a jamais été appelée,
auquel cas il donne une erreur.
11
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 21BD Relationnelles
Séquences : remarques
Ces deux types d'expressions peuvent figurer dans
la partie select d'une requête de type select from …
la partie values d'une requête de type insert ..la partie set d'une requête de type update ...
<sequence_name>.nextval ne doit figurer qu'une seule fois, dans une même requêtesi les deux expression figurent ensemble dans une même requête (et pour la même séquence), nextval sera toujours évalué avant currval.
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 22BD Relationnelles
Séquences : exemplecreate sequence SeqIdEtud
start with 1increment by 1nocyclemaxvalue 10 000;
create table Etudiant (IdEtud varchar(30) primary key,....);
insert into Etudiant values ('98'|| to_char(SeqIdEtud.nextval ),.....);
insert into année-et('ESSI1',
SeqIdEtud.currval,
12
9 Construction d ’une base de donnéesrelationnelle
ClésDépendances Fonctionnelles
Formes Normales
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 24BD Relationnelles
9 IntroductionDépendances Fonctionnelles.
Plusieurs types de contraintes (ou propriétés) peuvent exister sur une base de données.Parmi elles, les dépendance fonctionnelles permettent
d'améliorer la robustesse de la base, d'atténuer les redondances, de permettre à SQL certaines opérations automatiques de mises à jour.
tenir compte de ces contraintes permet d ’ arriver à une conception optimale de la base.
13
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 25BD Relationnelles
9.2 Dépendances Fonctionnelles
contraintesclé = cas particulier de contrainte dépendance fonctionnelle plus général
dans une relation, certains attributs en "déterminent" d'autres, ou plus précisément, il n'y a pas deux tuples ayant les mêmes valeurs pour le premier ensemble d'attributs sans avoir également les mêmes valeurs pour le deuxième ensemble.
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 26BD Relationnelles
Dépendance fonctionnelle : Définition formelle
Soient r une instance de la relation R, X et Y deux sous-ensembles d'attributs de R.
On dit que r satisfait la dépendance fonctionnelleX→Y et l'on note r |= X→Y
ssi. ∀t1∈r ∀t2∈r (t1.X = t2.X → t1.Y = t2.Y ).Si r satisfait plusieurs plusieurs dépendances fonctionnelles, df1, df2, ..., on note alors : r |= df1, df2, …
La contrainte X→ ∅ est toujours satisfaite.
La contrainte ∅→X signifie que la projection de la relation r sur le sous ensemble d ’attributs X est constante
14
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 27BD Relationnelles
Exemple :
ENREG={NumE, Pays, NomM, Classe, Date, IdDep}
Dépendances vérifiées par chaque instance (en supposant un seul déposant par enregistrement) : df1 = NumE,Pays → NomM, Date
df2 = NumE,Pays → Classe, IdDep
df3 = NomM,Pays, Classe → NumE
autres dépendances "déduites" de ces trois.Par exemple : df4 = NomM,Pays, Classe → Date
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 28BD Relationnelles
Calculs sur les Dépendances Fonctionnelles
déterminer si un ensemble de dépendances ne sont pas redondantes.
représenter ces dépendances sous une forme minimale.
ExempleSoit R= {A, B, C, D} un schéma de
relation et l'ensemble des dépendances fonctionnelles :DF = { A→B, B→C, AC→D}.si r satisfait toutes les contraintes de DF, alors rsatisfait également les dépendances suivantes:A→C A→AC A→D A→ABCD
CD→D, ......Il faut donc se doter d'un outil de "déduction" de
dépendances.
15
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 29BD Relationnelles
Calculs sur les Dépendances Fonctionnelles (suite)
Implication de dépendances Soient DF et DF' deux ensembles de dépendances fonctionnelles définies sur un schéma de relation R. On dit que DF implique DF', et l'on note DF |= DF'
ssi. pour toute instance r de la relation R, on a
r |= DF ⇒ r |= DF'.
ExempleA→B, A→C |= A→BC Les axiomes suivants permettent de démontrer toute implication entre dépendances fonctionnelles.Ce système inférentiel est noté |−, par opposition à |=qui dénote l'implication sémantique.
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 30BD Relationnelles
Inférences de dépendances fonctionnelles
[InfDF1] Réflexivité |− X→X[InfDF2] Augmentation X→Y |− XZ→Y[InfDF3] Additivité X→Y, X→Z |− X→YZ[InfDF4] Projectivité X→YZ |− X→Y[InfDF5] Transitivité X→Y, Y→Z |− X→Z[InfDF6] Pseudo-transitivité
X→Y, YZ→W |− XZ→W
16
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 31BD Relationnelles
Couvertures
Problèmeminimiser le nombre de dépendances et d'attributs
grâce au système inférentiel vu précédemment
établir une couverture minimale de dépendances fonctionnelles.
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 32BD Relationnelles
9.3 Formes Normales.
décomposer les relations d'un schéma en des relations plus simples et plus "indépendantes".
faciliter la compréhension, :-)éliminer les redondances, améliorer les aspects incrémentaux faciliter la distributivité
en des sites répartis.
17
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 33BD Relationnelles
9.3.1 Première Forme Normale
DéfinitionOn dit qu'un schéma relationnel R est en
première forme normale (1NF)ssi. les valeurs des attributs sont
atomiques
(ni set_of, ni list_of).
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 34BD Relationnelles
9.3.2 Deuxième Forme Normale
DéfinitionOn dit qu'un attribut A est nonclé dans R ssi. A n'est élément d'aucune clé de R.
2èmeForme Normale: définition On dit que R est en deuxième forme normale (2NF) ssi.
Elle est en 1NFAucun attribut noncléne dépend fonctionnellement d'une sous-clé.
18
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 35BD Relationnelles
9.3.2 Exemple 2eme forme normale
Schéma 1joueur( Personne, Sport, Taille) Personne →Taille
la table joueur contiendra des redondances, puisque le même couple (personne_x, taille_y) va apparaître autant de fois que personne_x pratique de sports.On peut créer alors le schéma équivalent, constitué de deux tables
Schéma2pratique( Personne, Sport) hauteur( Personne, Taille)oùpratique= πPersonne, Sport(joueur)hauteur= πPersonne, Taille(joueur)
La table originale joueur peut alors être retrouvée par la formulejoueur= pratique >< hauteur
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 36BD Relationnelles
9.3.3 Troisième Forme Normale
Affirmer qu'une relation est en troisième forme normale consiste à dire
qu'elle est en 2NF et que les attributs non clés sont mutuellement indépendants.
Troisième Forme Normale, Définition
On dit qu'un schéma relationnel Rest en troisième forme normale (3NF) ssi. il n'existe aucun attribut nonclé A de R qui dépende transitivement d'une clé K,
il n'existe pas d'attribut nonclé A, ni de clé K, ni d'ensemble L vérifiant :DF |= K →L, DF |= L →A, DF |≠ L →K, A∉KL
19
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 37BD Relationnelles
9.3.4 Processus de décomposition d'une table
Problème"éclater" ces tables pour
éviter des redondances minimiser les risques d'erreurs lors des mises à jour.
attributs clés présents dans plusieurs tables et en quelque sorte "redondants".autres attributs susceptibles de nombreuses mises à jour. C'est donc sur ceux ci que portera l'analyse.
Remplacer une table par deux (ou plus) projections selon certains attributs.
Pour ne pas perdre d'informations il faut :
pouvoir reconstruire la table initiale par jointurepouvoir reconstituer les contraintes initialesportant sur cette table.
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 38BD Relationnelles
Algorithme denormalisation par décomposition
Décomposer, toute table qui n'est pas en 3NF, en deux sous-tables obtenues par projection.Repérer dans R une dépendance du type:
DF |= L →A, A∉L, A nonclé.
où L n'est pas une clé.
On projette alors R en deux tables, une sur les attributs R -{A} et l'autre sur les attributs AL. La deuxième table possède L comme clé. On réitère alors le processus, en sachant qu'une table binaire est toujours en 3NF.
REMARQUESalgorithme de décomposition NP-complet.La décomposition peut produire plus de tables que nécessaire pour l'obtention de 3NF.
20
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 39BD Relationnelles
Algorithme de normalisation par synthèse
mettre l'ensemble des dépendances fonctionnelles sous forme d'une couverture canonique.Pour chaque dépendance X →A ainsi obtenue,on crée une table par projection sur les attributs XA.
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 40BD Relationnelles
Exemple
local(Prof, Dept, Immeuble)avec
Prof → DeptProf → ImmeubleDept → Immeuble
n'est pas en 3NF, puisque Prof est la seule clé et que (3) est une dépendance concernant des attributs nonclés.
Pour normaliser, il suffit de remplacer local par les deux relations obtenues par projection :local_prof(Prof, Dept)local_dept(Dept, Immeuble).
La table originale localest la jointure de ces deux tables.
21
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 41BD Relationnelles
9.5.5 Forme Normale de Boyce-Codd(BCNF)
définition une relation R est sous forme normale de Boyce-Codd ssi. chacun des attributs ne dépend fonctionellement que des clés (en dehors des superclés ou de lui-même).
Autrement dit, quelque soit X et A, (DF |− X →A ) ⇒(A ∉X ou X superclé)
Toute relation sous forme normale de Boyce-Codd, est sous la 3NF.Il n'est pas toujours possible de décomposer une relation en un schéma équivalent composés de relations en BCNF.
V 1.0 -- 9/13/2004 © 2002 Anne-Marie Hugues -- 42BD Relationnelles
Résumé du chapitre 9dépendances fonctionnelles
non redondances, inférences
cléssuperclé, clé primaire (PRIMARY KEY), clé secondaire (UNIQUE)clé étrangère
formes normalesobjectifspremière forme normale : valeurs des attributs atomiques2ème forme normale: aucun attribut non clé ne dépend fonctionnellement d ’une sous clé3ème FN: aucun attribut ne dépend fonctionnellement d ’un attribut non cléautres
normalisationpar décompositionpar synthèse