3 Introduction au langage SQL (1) : création, mise à jour et administration de Création de tables Insertion d enregistrements tables Bernard ESPINASSE Professeur à Aix-Marseille Université (AMU) Ecole Polytechnique Universitaire de Marseille (PEIP1) Novembre 2013 Modification et suppression d enregistrements Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 1
1 Création de tables en SQL Déclaration des attributs d une table avec leur typage Déclaration des clés primaires Déclaration des clés étrangères 2 Compléments Insertion d enregistrements : INSERT Modification d enregistrements : UPDATE Suppression d enregistrements : DELETE Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 2
Modèle Conceptuel de Données (MCD) : - permet de modéliser la sémantique des informations d une façon compréhensible par l utilisateur de la future base de données - utilise le formalisme (graphique) Entité-Relation - ne permet pas d implémentation informatique de la base de données dans un SGBD donné Modèle Logique de Données (MLD) : - permet de modéliser la structure selon laquelle les données seront stockées dans la future base de données - est adapté à une famille de SGBD : ici les SGBD relationnels (MLD Relationnels) - utilise le formalisme graphique Merise - permet d implémenter la base de données dans un SGBD donné Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 3
MCD : Modèle Conceptuel de Données MLD-R : Modèle Logique de Données Relationnel NIVEAU CONCEPTUEL / ORGANISATIONEL MCD En formalisme Entité-Relation NIVEAU LOGIQUE MLD (Relationnel) En formalisme «Merise» Création des tables de la base de données en langage SQL Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 4
1 Création de tables en SQL Déclaration des attributs d une table avec leur typage Déclaration des clés primaires Déclaration des clés étrangères Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 5
1. MCD (Entité-Relation) : CLIENT n client nom age adresse type CA annuel taux remise 1,n PASSER 1,1 COMMANDE n commande date statut FOURNISSEUR 1,n 0,n LIGNE_CMD qtо_cmdоe qtо_livrоe prix_unitaire FOURNIR 0,1 0,n ARTICLE n article dоsignation qtо stock poids prix d'achat prix de vente n fournisseur nom adresse 2. MLD (Relationnel) dérivé : COMMANDE LIGNE_CMD CLIENT cli_num cli_nom cli_age cli_adresse cli_type cli_ca cli_tremise PASSER cmd_num cmd_cli cmd_date cmd_statut FOURNISSEUR four_num four_nom four_adresse lcd_cmd lcd_art lcd_qté lcd_liv lcd_pu FOURNIR ARTICLE art_num art_four art_nom art_stock art_poids art_pa art_pv Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 6
2. MLD (Relationnel) dérivé : COMMANDE LIGNE_CMD CLIENT cli_num cli_nom cli_age cli_adresse cli_type cli_ca cli_tremise PASSER cmd_num cmd_cli cmd_date cmd_statut FOURNISSEUR four_num four_nom four_adresse lcd_cmd lcd_art lcd_qté lcd_liv lcd_pu FOURNIR ARTICLE art_num art_four art_nom art_stock art_poids art_pa art_pv 2. Schémas relationnels associés : CLIENT (cli_num, cli_nom, cli_age, cli_adresse, cli_type, cli_ca, cli_tremise) ARTICLE (art_num, art_nom, art_four, art_stock, art_poids, art_pa, art_pv) COMMANDE (cmd_num, cmd_cli, cmd_date, cmd_statut) LIGNE_CMD (lcd_cmd, lcd_art, lcd_qte, lcd_liv, lcd_pu) FOURNISSEUR (four_num, four_nom, four_adresse) Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 7
Origine : SQL (Structured Query Language) est un langage de requêtes standard pour les SGBD relationnels 3 niveaux de normes : SQL86 (standard ANSI en 86 puis ISO en 87) : la base puis SQL89 ou SQL1 : l intégrité: SQL91 ou SQL2 : on se situe ici dans le cadre de ce cours SQL3 (98) : SQL devient un langage de programmation et évolue vers l objet Dans cette séance 3, nous ne verrons que : - la commande CREATE TABLE permettant de créer les tables de la base de données en langage SQL, - les commandes INSERT permettant d insérer et DELETE de supprimer des tuples (enregistrements) dans une base de données créée. Dans cette séance 4, nous verrons d autres commandes du langage SQL (SELECT, UPDATE) permettant d exploiter la base de données remplie d enregistrements. Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 8
Soit le MLD suivant : CLIENT cli_num cli_nom cli_age cli_adresse cli_type cli_ca cli_tremise COMMANDE cmd_num cmd_cli cmd_date cmd_statut Schémas relationnels : Table CLIENT (cli_num, cli_nom, cli_age, cli_adresse, cli_type, cli_ca, cli_tremise) - cli_num = clé primaire Table COMMANDE (cmd_num, cmd_cli, cmd_date, cmd_statut) - cmd_num = clé primaire - cmd_cli, = clé étrangère : elle permet le lien entre les 2 tables Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 9
CHAR(taille) Chaînes de caractères de longueur fixe CHAR(3) VARCHAR(taillemax) Chaînes de caractères de longueur variable VARCHAR(10) SMALLINT Entier court (sur 16 bits : de -32768 à 32757) INTEGER Entier long (sur 32 bits : de -2 147 483 648 à 2 147 483 647) NUMBER(n,[d]) Nombres décimaux qui ont n chiffres dont d chiffres après la virgule REAL Nombre à virgule flottante (faible précision) FLOAT Nombre à virgule flottante (grande précision) DOUBLE PRECISION DATE Date (jour, mois, année) 10/01/2002 TIME Heures, minutes et secondes (les secondes peuvent 10:12:42.85 comporter un certain nombre de décimales) TIMESTAMP Moment précis : date avec heures, minutes et secondes (6 chiffres après la virgule, c'est-à-dire en microsecondes) Nombre à 5 chiffres avant la virgule et 2 après la virgule : NUMBER(7,2) Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 10
Table CLIENT (cli_num, cli_nom, cli_age, cli_adresse, cli_type, cli_ca, cli_tremise) CREATE TABLE Client (cli_num CHAR(8) NOT NULL, cli_nom CHAR(25) NOT NULL, cli_age INTEGER NOT NULL, cli_adresse VARCHAR(80), cli_type VARCHAR(16), cli_ca INTEGER, cli_tremise INTEGER NOT NULL, PRIMARY KEY (cli_num)) ; NOT NULL : on n accepte pas que l attribut puisse avoir une valeur nulle (valeur inconnue) PRIMARY KEY (cli_num): l attribut cli_num est clé primaire de la table Client. Remarque : un attribut déclaré clé primaire doit être défini avec l'option NOT NULL Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 11
Table COMMANDE (cmd_num, cmd_cli, cmd_date, cmd_statut) Création de la table COMMANDE : CREATE TABLE Commande (cmd_num CHAR(8) NOT NULL, cmd_cli CHAR(8) NOT NULL, cmd_date DATE NOT NULL, cmd_statut VARCHAR(16), PRIMARY KEY (cmd_num), FOREIGN KEY (cmd_cli) REFERENCES client); PRIMARY KEY (cmd_num): l attribut cmd_num est clé primaire de la table Commande. FOREIGN KEY (cmd_cli) REFERENCES client: l attribut cmd_cli est une clé étrangère qui réfère à la table Client Remarques : 1- la table client doit déjà exister 2- l'attribut cmd_cli de la table commande est du même type que celui de la clé primaire de la table client. Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 12
Table ARTICLE (art_num, art_nom, art_four, art_stock, art_poids, art_pa, art_pv) ; Création de la table ARTICLE : CREATE TABLE Article (art_num CHAR(8) NOT NULL, art_nom VARCHAR(25) NOT NULL, art_four CHAR(8), art_stock INTEGER NOT NULL, art_poids NUMERIC (8,1), art_pa INTEGER NOT NULL, art_pv INTEGER NOT NULL, PRIMARY KEY (art_num), FOREIGN KEY (art_four) REFERENCES Fournisseur); PRIMARY KEY (art_num): l attribut art_num est clé primaire de la table article. FOREIGN KEY (art_four) REFERENCES Fournisseur: l attribut art_cli est une clé étrangère qui réfère à la table Fournisseur. Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 13
Table LIGNE_CMD (lcd_cmd, lcd_art, lcd_qte, lcd_liv, lcd_pu) CREATE TABLE Ligne_cmd (lcd_art CHAR(8) NOT NULL, lcd_cmd INTEGER NOT NULL, lcd_qte INTEGER NOT NULL, lcd_liv INTEGER, lcd_pu INTEGER NOT NULL, FOREIGN KEY (lcd_cmd) REFERENCES Commande, FOREIGN KEY (lcd_art) REFERENCES Article, PRIMARY KEY (lcd_cmd, lcd_art)) ; <- Clé primaire composée FOREIGN KEY (lcd_cmd) REFERENCES commande: l attribut lcd_cmd est une clé étrangère qui réfère à la table Commande. FOREIGN KEY (lcd_art) REFERENCES commande: l attribut lcd_art est une clé étrangère qui réfère à la table Article. PRIMARY KEY (lcd_cmd, lcd_art): la clé primaire de la table Ligne_cmd est composée des attributs lcd_cmd et lcd_art qui sont ici clés étrangères. Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 14
2 Compléments Insertion d enregistrements : INSERT Modification d enregistrements : UPDATE Suppression d enregistrements : DELETE Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 15
Table CLIENT (cli_num, cli_nom, cli_age, cli_adresse, cli_type, cli_ca, cli_tremise) CREATE TABLE Client (cli_num CHAR(8) NOT NULL, cli_nom CHAR(25) NOT NULL, cli_age INTEGER NOT NULL, cli_adresse VARCHAR(80), cli_type VARCHAR(16), cli_ca INTEGER, cli_tremise INTEGER NOT NULL, PRIMARY KEY (cli_num)) ; Insertion d un nouvel enregistrement dans la table Client : INSERT INTO client VALUES ( C2345, Tranvouez, 29, Marseille, particulier, 3680, 25) ; Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 16
Table CLIENT (cli_num, cli_nom, cli_age, cli_adresse, cli_type, cli_ca, cli_tremise) CREATE TABLE Client (cli_num CHAR(8) NOT NULL, cli_nom CHAR(25) NOT NULL, cli_age INTEGER NOT NULL, cli_adresse VARCHAR(80), cli_type VARCHAR(16), cli_ca INTEGER, cli_tremise INTEGER NOT NULL, PRIMARY KEY (cli_num)) ; Suppression d un enregistrement dans la table client : DELETE FROM client WHERE (cli_nom = Tranvouez ); Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 17
Table ARTICLE (art_num, art_nom, art_four, art_stock, art_poids, art_pa, art_pv) ; Mise à jour du prix de vente du produit «lasure» : UPDATE Article SET art_pv = 12 WHERE art_nom = lasure Augmenter les prix de vente de tous les produits fournis par Castorama de 10% : UPDATE Article SET art_pv = art_pv *1.1 WHERE art_four IN (SELECT four_num FROM FOURNISSEUR WHERE FNOM = Castorama ) Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 18
MLD (Relationnel) dérivé : COMMANDE LIGNE_CMD CLIENT cli_num cli_nom cli_age cli_adresse cli_type cli_ca cli_tremise PASSER cmd_num cmd_cli cmd_date cmd_statut FOURNISSEUR four_num four_nom four_adresse lcd_cmd lcd_art lcd_qté lcd_liv lcd_pu FOURNIR ARTICLE art_num art_four art_nom art_stock art_poids art_pa art_pv Schémas relationnels associés : CLIENT (cli_num, cli_nom, cli_age, cli_adresse, cli_type, cli_ca, cli_tremise) ARTICLE (art_num, art_nom, art_four, art_stock, art_poids, art_pa, art_pv) COMMANDE (cmd_num, cmd_cli, cmd_date, cmd_statut) LIGNE_CMD (lcd_cmd, lcd_art, lcd_qte, lcd_liv, lcd_pu) FOURNISSEUR (four_num, four_nom, four_adresse) Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 19
TABLE Client cli_num CHAR(8) cli_nom CHAR(25) cli_age INTEGER cli_adresse VARCHAR(80) cli_type VARCHAR(16) cli_ca INTEGER cli_tremise INTEGER TABLE Article art_num CHAR(8) art_nom VARCHAR(25) art_four CHAR(8) art_stock INTEGER art_poids NUMERIC (8,1), art_pa INTEGER NOT NULL, art_pv INTEGER NOT NULL TABLE Ligne_cmd lcd_art CHAR(8) lcd_cmd INTEGER lcd_qte INTEGER lcd_liv INTEGER lcd_pu INTEGER TABLE Fournisseur four_num CHAR(8) four_nom CHAR(25) four_adresse VARCHAR(80) TABLE Commande cmd_num CHAR(8) cmd_cli CHAR(8) cmd_date DATE cmd_statut VARCHAR(16) Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 20
CREATE TABLE Client (cli_num CHAR(8) PRIMARY KEY CONSTRAINT PK_CLIENT, cli_nom CHAR(25) UNIQUE, CONSTRAINT UNIQUE_CLIENT, cli_age INTEGER CHECK (cli_age > 0 AND cli_age < 120), CONSTRAINT AGE_CLIENT, cli_adresse VARCHAR(80), cli_type VARCHAR(16) DEFAULT 'Particulier', cli_ca INTEGER DEFAULT 0 cli_tremise INTEGER NOT NULL); CHECK (cli_type IN ('Particulier', 'Administration, 'Entreprise')) CONSTRAINT TYPE_CLIENT); CREATE TABLE Article (art_num CHAR(8) DEFAULT 0 PRIMARY KEY CONSTRAINT PK_ARTICLE, art_nom VARCHAR(25) NOT NULL, art_four CHAR(8) REFERENCES Fournisseur ON UPDATE CASCADE ON DELETE SET NULL CONSTRAINT FK_FOURNISSEUR art_stock INTEGER DEFAULT 0 CHECK (art_stock > 0) CONSTRAINT STOCK_ARTICLE, art_poids NUMERIC (8,1), art_pa INTEGER NOT NULL, art_pv INTEGER NOT NULL, CHECK (art_pv > art_pa / 0.8) CONSTRAINT PVPA_ARTICLE); CREATE TABLE Fournisseur (four_num CHAR(8) PRIMARY KEY CONSTRAINT PK_FOURNISSEUR, four_nom CHAR(25) UNIQUE, CONSTRAINT UNIQUE_FOURNISSEUR, four_adresse VARCHAR(80); CREATE TABLE Ligne_cmd (lcd_art CHAR(8) NOT NULL, lcd_cmd INTEGER NOT NULL, lcd_qte INTEGER NOT NULL, lcd_liv INTEGER DEFAULT 0, lcd_pu INTEGER NOT NULL, PRIMARY KEY (lcd_cmd, lcd_art) CONSTRAINT PK_LIGNCDE FOREIGN KEY (lcd_cmd) REFERENCES Commande ON UPDATE CASCADE ON DELETE CASCADE CONSTRAINT FK_COMMANDE FOREIGN KEY (lcd_art) REFERENCES Article ON UPDATE CASCADE ON DELETE NO ACTION CONSTRAINT FK_ARTICLE CHECK (lcd_pu >=0.75 * (SELECT art_pv FROM Article WHERE art_num = lcd_art)) CONSTRAINT PU_LIGNCDE); CREATE TABLE Commande (cmd_num CHAR(8) PRIMARY KEY CONSTRAINT PK_COMMANDE, cmd_cli CHAR(8) NOT NULL REFERENCES Client ON UPDATE CASCADE ON DELETE NO ACTION CONSTRAINT FK_CLIENT cmd_date DATE NOT NULL, cmd_statut VARCHAR(16) DEFAULT 'Prévisionelle' CHECK (cmd_statut IN ('Prévisionnelle', 'Validée', 'Urgente') CONSTRAINT STATUT_COMMANDE); Bernard ESPINASSE PEIP 2013 Séance 3 : MLD 21