Conception de bases de donn ees relationnelles - limsi
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Conception de bases de données relationnelles Langage SQL Anne-Laure Ligozat & Marie Szafranski 2018-2019 ensiie 1
Langages SQL SQL LMD LDD manipulation LCT LCD définition de données transactions contrôle de données SELECT BEGIN des accès CREATE COMMIT INSERT GRANT ALTER UPDATE ROLLBACK REVOKE DROP DELETE 2018-2019 ensiie 2
LDD : langage de définition des données LDD : langage de définition des données Métabase Création d’objets Modification d’objets Suppression d’objets Langage de contrôle des transactions LCD : langage de contrôle des données 2018-2019 ensiie 3
LDD : langage de définition des données Métabase LDD : Langage de Définition des Données vs LMD : Langage de Manipulation des Données LDD administrateur métabase SGBD décrit BD LMD développeur applications 2018-2019 ensiie 4
LDD : langage de définition des données Métabase Métabase • schéma = description du type des données contenues dans la BD • métabase = schéma organisé sous forme d’une BD relationnelle Le contenu de la métabase est : • manipulé par le LDD • consultable par des commandes ad hoc (\d, \d relation, show tables...) 2018-2019 ensiie 5
LDD : langage de définition des données Métabase Métabase Exemple : CREATE TABLE vin( n vin INTEGER CONSTRAINT clé vin PRIMARY KEY, cru VARCHAR (30), millesime CHAR(4), n viticulteur INTEGER CONSTRAINT cle etr vin vitic REFERENCES viticulteur); ) met à jour au moins 3 tables de la métabase : • TABLES : ajoute le tuple de vin • COLUMNS : ajoute les tuples de n vin, cru, millesime, n viticulteur • CONSTRAINTS : ajoute les tuples de primary-key et cle etr vin vitic 2018-2019 ensiie 6
LDD : langage de définition des données Métabase LDD : Langage de Définition des Données • Création ou mise à jour des objets gérés par le SGBD Schéma Tables Vues Contraintes colonnes clés domaines • Trois types de commandes LDD LMD create insert création alter update modification drop delete suppression métabase base 2018-2019 ensiie 7
LDD : langage de définition des données Création d’objets Création d’attributs - types principaux de données integer entiers smallint bigint numériques decimal [(p, s)] précision arbitraire numeric [(p, s)] virgule flottante float (p) char (n) types caractères varchar (n) text date (’AAAA-MM-JJ’) date/heure datetime (’AAAA-MM-JJ HH:MM:SS’) ... et beaucoup d’autres comme booléens, monétaires, énumérations, géométriques, composites, pseudo-types... (voir documentation) 2018-2019 ensiie 8
LDD : langage de définition des données Création d’objets Création de domaines CREATE DOMAIN [DEFAULT ] ; CREATE DOMAIN nom-domaine type-données ; DEFAULT valeur-défaut contrainte-domaine Exemples : CREATE DOMAIN num-etape INTEGER CHECK (VALUE BETWEEN 1 AND 5); CREATE DOMAIN date-contrat DATE DEFAULT CURRENT DATE CHECK (VALUE > ’2017-01-01’); CREATE DOMAIN entier positif INTEGER CHECK (VALUE > 0); 2018-2019 ensiie 9
LDD : langage de définition des données Création d’objets Création de relations Définition d’un schéma de relation en intension CREATE TABLE ( , . . . ); ) Ligne : nom-attribut type-données nom-domaine contrainte-attribut CREATE TABLE Super heros( nom super VARCHAR(20), nom civil VARCHAR(20), prenom VARCHAR(20), age INTEGER ); 2018-2019 ensiie 10
LDD : langage de définition des données Création d’objets Contraintes d’intégrité Définition et contrôle de la cohérence d’une (ensemble de) donnée(s) Contrainte sur un attribut (Après la définition d’un attribut) • Valeur par défaut DEFAULT • Valeur obligatoire NOT NULL • Clé primaire (⇒ UNIQUE NOT NULL) PRIMARY KEY • Unicité UNIQUE • Intégrité référentielle REFERENCES () • Validité (restriction de domaine) CHECK () CREATE TABLE Super heros( nom super VARCHAR(20) PRIMARY KEY, nom civil VARCHAR(20), prenom VARCHAR(20), age INTEGER (CHECK age > 18)); 2018-2019 ensiie 11
LDD : langage de définition des données Création d’objets Contraintes d’intégrité Contrainte sur une table (Après la définition de tous les attributs) • Clé primaire PRIMARY KEY () • Unicité UNIQUE (liste d’attributs) • Intégrité référentielle FOREIGN KEY () REFERENCES () • Validité (restriction de domaine) CHECK () CREATE TABLE Super heros pouvoirs( super VARCHAR(20), pouvoir VARCHAR(20), CONSTRAINT pk SHP PRIMARY KEY (super, pouvoir), FOREIGN KEY (super) REFERENCES Super heros (super), FOREIGN KEY (pouvoir) REFERENCES Super pouvoirs (nom pouvoir)); 2018-2019 ensiie 12
LDD : langage de définition des données Création d’objets Contraintes de clés en détail Clé primaire • 1 attribut : déclaration après l’attribut ou après tous les attributs • plusieurs : déclaration après tous les attributs • ⇒ unique not null Clé étrangère • syntaxe : FOREIGN KEY (attribut1 [, ... ]) REFERENCES table reference [ (attribut ref 1 [, ... ]) ] (si c. de relation) • si attribut ref 1 omis, clé primaire de table reference utilisée • peut être NULL 2018-2019 ensiie 13
LDD : langage de définition des données Création d’objets Contraintes d’intégrité (Autre exemple) CREATE TABLE Personne( n ss CHAR(13) PRIMARY KEY, nom VARCHAR(25) NOT NULL, prenom VARCHAR(25) NOT NULL, contraintes ddn DATE CHECK (ddn > ’1900-01-01’), d’attributs mariage CHAR(13) REFERENCES Personne(n ss), code postal INTEGER(5), pays VARCHAR(50), courriel VARCHAR(50) CHECK (courriel LIKE ’%@%.%’), CONSTRAINT ck Personne UNIQUE (nom, prenom, courriel), contraintes CONSTRAINT fk Personne Pays FOREIGN KEY (code postal, pays) de relations REFERENCES Adresse (c p, pays)); (inter-attributs) CREATE TABLE Adresse( c p INTEGER(5) NOT NULL, pays VARCHAR(50) NOT NULL, initiale CHAR(1) CHECK (initiale = LEFT(pays, 1)), PRIMARY KEY (c p, pays)); 2018-2019 ensiie 14
LDD : langage de définition des données Création d’objets Vues Mécanisme assurant : • l’indépendance logique • description des données manipulées par une application 6= description logique des relations • la confidentialité vin(n vin, région, cru, année, n viticulteur) commande(n com, n client, n vin, dateCom, qtteCom) client(n client, nomCli, villeCli, adrCli, totCli) ⇒ vues clientVIP et vin bordeaux pour le service commercial clientVIP(numéro,nom, ville, adresse, cumulAnnée) (où cumulAnnée = totCli > 1000) vin bordeaux(n vin, cru, année, n viticulteur) ⇒ vue achats pour service marketing pour étudier le lien entre adresse client et type de vin commandé achats(n client, ville, cru, région, n vin, qtté) 2018-2019 ensiie 15
LDD : langage de définition des données Création d’objets Vues client clientVIP ⇒ commande 2018-2019 ensiie 16
LDD : langage de définition des données Création d’objets Création de vues Définition logique d’une relation sans stockage de données • ∼ table virtuelle • Requête stockée (définition) ouvrant une fenêtre dynamique sur les données (résultat) CREATE VIEW AS ; -- nombre et types identiques que dessus CREATE VIEW Super age (super, age) AS SELECT (nom super, age) FROM Super heros; • Simplifie les requêtes utilisateurs • Interrogation : toujours possible • Mise à jour : possible si la vue comporte suffisamment d’information pour permettre une mise à jour non ambiguë 2018-2019 ensiie 17
LDD : langage de définition des données Création d’objets Vues en SQL • sélection de contenu • changement de nom d’attributs • contenu calculé vin(n vin, région, cru, année, n viticulteur) commande(n com, n client, n vin, dateCom, qtteCom) client(n client, nomCli, villeCli, adrCli, totCli) CREATE VIEW clientVIP(numéro, nom, ville, adresse, cumulAnnée) AS SELECT n client, nomCli, villeCli, adrCli, totCli FROM client WHERE totCli >1000; CREATE VIEW achats(n client, ville, cru, qtté) AS SELECT n client, villeCli, cru, SUM(qtteCom) FROM vin NATURAL JOIN commande NATURAL JOIN client GROUP BY n client, villeCli, cru; 2018-2019 ensiie 18
LDD : langage de définition des données Modification d’objets Modification de tables Modification d’attributs ou de contraintes préalablement définis -- Ajout d’un attribut ALTER TABLE ADD COLUMN (); -- Suppression d’un attribut ALTER TABLE DROP COLUMN (); -- Modification d’un attribut ALTER TABLE ALTER COLUMN (); -- Ajout d’une contrainte ALTER TABLE ADD CONSTRAINT (); ... 2018-2019 ensiie 19
LDD : langage de définition des données Modification d’objets Modification de tables (Super exemple) Modification d’attributs ou de contraintes préalablement définis CREATE TABLE Super heros( -- table initiale nom super VARCHAR(20) PRIMARY KEY, nom civil VARCHAR(20), prenom VARCHAR(20), age INTEGER(3)); -- modifications ALTER TABLE Super heros ALTER COLUMN nom super TYPE VARCHAR(50); ALTER TABLE Super heros ADD CONSTRAINT u n UNIQUE (nom civil, prenom); ALTER TABLE Super heros DROP COLUMN age; Super heros( -- table modifiée nom super VARCHAR(50) PRIMARY KEY, nom civil VARCHAR(20), prenom VARCHAR(20), CONSTRAINT u n UNIQUE (nom civil, prenom)); 2018-2019 ensiie 20
LDD : langage de définition des données Suppression d’objets Suppression d’objets Suppression d’une relation ou d’une vue DROP TABLE ; DROP VIEW ; DROP TABLE Parvenus; -- ! tables référencées DROP VIEW Parvenus; 2018-2019 ensiie 21
Langage de contrôle des transactions LDD : langage de définition des données Langage de contrôle des transactions Maintien de la cohérence Transactions Vérification des CI LCD : langage de contrôle des données 2018-2019 ensiie 22
Langage de contrôle des transactions Maintien de la cohérence Perte possible de la cohérence • Mises à jour introduisant des données fausses, incohérentes par rapport à la description de la base ou par rapport aux données déjà stockées ⇒ contrôle de l’intégrité • Accès simultanés aux mêmes données par des utilisateurs différents ⇒ contrôle des accès simultanés / concurrence • Pannes (machine, système, erreur de manipulation) ⇒ procédures de reprise 2018-2019 ensiie 23
Langage de contrôle des transactions Maintien de la cohérence Cohérence Cohérence statique Base de données inactive dont toutes les données vérifient les contraintes d’intégrité Cohérence dynamique Cohérence vis à vis des traitements : notion de transaction = unité de traitement début transaction t1 BD BD cohérente requêtes SQL t2 BD’ BD’ cohérente fin transaction temps 2018-2019 ensiie 24
Langage de contrôle des transactions Transactions Déroulement d’une transaction • Début d’une transaction • explicite : BEGIN • implicite : première requête SQL après la fin de la transaction précédente • Contenu de la transation • une ou plusieurs requêtes de màj ou interrogation • Fin de la transaction • normale : validation COMMIT • anormale : annulation des màj ROLLBACK commit BD BD’ rollback 2018-2019 ensiie 25
Langage de contrôle des transactions Transactions Atomicité d’une transaction • maintien de la cohérence nécessite souvent plusieurs màj, éventuellement dans plusieurs tables • ex : transfert entre deux comptes en banque I 2 requêtes : update compteA, update compteB • ex : achat billet train I 2 requêtes : insertion billet, màj places dispos • une transaction est toujours exécutée en totalité ou pas du tout : • COMMIT accepté ⇒ toutes les màj sont enregistrées définitivement • ROLLBACK ⇒ toutes les màj depuis le début de la transaction sont annulées 2018-2019 ensiie 26
Langage de contrôle des transactions Transactions Exemple de transaction Suppression d’une commande comprenant des lignes de commande begin; delete from commande; delete from ligne commande; -- lignes correspondantes si (les deux delete OK) commit; si (commit KO) rollback sinon rollback 2018-2019 ensiie 27
Langage de contrôle des transactions Transactions Propriétés ACID des transactions • Atomicité : transaction effectuée en totalité ou pas du tout • Cohérence : la BD passe d’un état cohérent à un autre état cohérent • Isolation : la transaction s’effectue comme si elle était seule • Durabilité : une fois une transactions validée, son effet ne peut pas être perdu suite à une panne quelconque 2018-2019 ensiie 28
Langage de contrôle des transactions Transactions Vérification des contraintes Types de contraintes • Contraintes individuelles (1 n-uplet) • à vérifier sur insert, update • Contraintes sur plusieurs n-uplets d’une relation • insert, update • Contraintes entre relations • à vérifier en fin de transaction (sinon ordre imposé sur les màj) 2018-2019 ensiie 29
Langage de contrôle des transactions Vérification des CI Maintien de la cohérence dans les C.I. référentielles REFERENCES [()] [action] [vérification] [moment-vérification] Vérification • NOT DEFERRABLE (par défaut) • vérification immédiate (à la fin de la mise à jour) • DEFERRABLE • vérification différée : commit ou exécution de la commande Moment de la vérification • INITIALLY IMMEDIATE (défaut) • vérification après chaque instruction par défaut • INITIALLY DEFERRED • vérification à la fin de la transaction 2018-2019 ensiie 30
Langage de contrôle des transactions Vérification des CI Vérification des CI référentielles alter table commande alter constraint fk buveur deferrable INITIALLY DEFERRED; begin; -- le buveur 399 n’existe pas encore mais lui ajoute quand meme une commande insert into commande values(124, 399, 170, ’2018-11-23’, 6); insert into buveur values(399, ’Durant’, ’Jacques’, ’Fril’); commit; → INSERT ok sans la modification de la table, erreur car le buveur n’existe pas encore 2018-2019 ensiie 31
Langage de contrôle des transactions Vérification des CI Action de maintien de cohérence Action = ce que doit faire le SGBD en cas de màj de la clé référencée ON DELETE RESTRICT ON UPDATE CASCADE SET NULL SET DEFAULT • RESTRICT • identique à l’absence d’action (NO ACTION, défaut) sauf que vérification pas décalable • si non respect d’intégrité référentielle, erreur déclenchée et màj interdite • CASCADE • la màj est répercutée sur les tuples référençant • SET NULL/DEFAULT • clé étrangère → vide (NULL) ou valeur par défaut (DEFAULT) 2018-2019 ensiie 32
Langage de contrôle des transactions Vérification des CI Action de maintien de la cohérence :Buveur :Commande n buveur : 399 n commande : 5 nom : Dupond n buveur :399 ... ... sur la contrainte d’intégrité référentielle de n buveur dans Commande : • ON DELETE CASCADE • ON DELETE SET NULL 2018-2019 ensiie 33
Langage de contrôle des transactions Vérification des CI Action de maintien de la cohérence :Buveur :Commande n buveur : 399 nom : Dupond ⇒ n commande : 5 n buveur :399 ... ... sur la contrainte d’intégrité référentielle de n buveur dans Commande : • ON DELETE CASCADE • ON DELETE SET NULL 2018-2019 ensiie 33
Langage de contrôle des transactions Vérification des CI Action de maintien de la cohérence :Buveur :Commande n buveur : 399 nom : Dupond ⇒ n commande : 5 n buveur :NULL ... ... sur la contrainte d’intégrité référentielle de n buveur dans Commande : • ON DELETE CASCADE • ON DELETE SET NULL 2018-2019 ensiie 33
Langage de contrôle des transactions Vérification des CI Déclencheur (TRIGGER) Maintien procédural de la cohérence : actions à déclencher automatiquement lors d’une mise à jour Exemple : mise à jour des quantités vendues lors d’une insertion de commande PRODUIT (n produit, libelle, qtté tot vendue) CREATE TRIGGER insert commande AFTER INSERT ON commande FOR EACH ROW UPDATE produit SET qtté tot vendue = qtté tot vendue + NEW.qttéCom WHERE n produit = NEW.n produit; ⇒ intégration de traitements dans la BD 2018-2019 ensiie 34
LCD : langage de contrôle des données LDD : langage de définition des données Langage de contrôle des transactions LCD : langage de contrôle des données Droits 2018-2019 ensiie 35
LCD : langage de contrôle des données Droits LCD : langage de contrôle des données Création d’utilisateurs Définition de leurs droits → SGBD, BD, relations ou attributs Remarque Gestion de la création d’utilisateur (CREATE USER) → par le SGBD en général 2018-2019 ensiie 36
LCD : langage de contrôle des données Droits Attribution des droits GRANT ON TO [WITH GRANT OPTION]; -- transfert de droits GRANT SELECT, UPDATE ON Super heros TO Edna Mode; GRANT ALL PRIVILEGES ON Super heros TO PUBLIC; -- tous utilisateurs/r^ oles Liste des droits • SELECT • INSERT • DELETE • UPDATE • ALL PRIVILEGES • ... 2018-2019 ensiie 37
LCD : langage de contrôle des données Droits Attribution des droits (Remarques) • Droits sur un SGBD (création et suppression de BD et des tables) • Droits sur une BD (création et suppression de tables) • Droits sur une vue Syntaxe quasi-identique (VIEW à la place de TABLE) 2018-2019 ensiie 38
LCD : langage de contrôle des données Droits Révocation de droits REVOKE [GRANT OPTION FOR] ON TO REVOKE UPDATE ON Super heros TO Edna Mode; REVOKE ALL PRIVILEGES ON Super heros TO PUBLIC; Droit supprimé pour un utilisateur U → droit supprimé en cascade pour les utilisateurs ayant obtenu le droit par U 2018-2019 ensiie 39
Vous pouvez aussi lire