Programmation et administration des BD Chapitre 1 Introduction aux BD Oracle yannick.benezeth@iut-dijon.u-bourgogne.fr IUT Dijon IQ S2 2015/2016
2 Notion de base de données Définition Ensemble structuré d'informations non redondantes dont l'organisation est régie par un modèle de données BD
3 Notion de SGBD Définition Ensemble d outils logiciels qui assurent la gestion et l accès à une BD Les principaux objectifs des SGBD sont de masquer la représentation physique des données et d assurer la protection et la cohérence de ces données dans un environnement multi-utilisateurs impliquant des accès concurrents.
4 Le modèle de données le plus courant : Le modèle relationnel Une BD est un ensemble de Relations (tables) Chaque relation a un ensemble d attributs (colonnes) Chaque tuple (ligne, enregistrement) a une valeur pour chaque attribut Chaque donnée a un type (ou domaine) ETUDIANT ID Nom Moyenne bac 123 André 12,5 234 Sylvie NULL 345 Charlotte 15 Photo IUT NomIUT Région Frais d inscription IUT Bordeaux Aquitaine 1800 IUT Dijon Bourgogne 1500 IUT Lyon Rhône Alpes 2000
5 Le modèle relationnel Clé primaire : attribut dont la valeur est unique pour chaque tuple Ou ensemble d attributs dont la combinaison des valeurs est unique On peut choisir une propriété naturelle, artificielle ou composée de plusieurs propriétés ETUDIANT ID Nom Moyenne bac 123 André 12,5 234 Sylvie NULL 345 Charlotte 15 Photo IUT NomIUT Région Frais d inscription IUT Bordeaux Aquitaine 1800 IUT Dijon Bourgogne 1500 IUT Lyon Rhône Alpes 2000
6 Le modèle relationnel Clé étrangère : Attribut qui est clé primaire dans une autre table. IUT ETUDIANT CANDIDATER NomIUT Région FI IDEtu NomEtu Moy #IDEtu #NomIUT Décision
7 Le modèle relationnel Contrainte référentielle : L ensemble des valeurs d une clé étrangère est un sousensemble des valeurs de la clé primaire cible IUT ETUDIANT CANDIDATER NomIUT Région FI IDEtu NomEtu Moy #IDEtu #NomIUT Décision IUT Dijon Bourgogne 100 IUT Bordeaux Aquitaine 200 123 Jean 12 234 Lucie 14 345 Marie 18 123 IUT Dijon OK 123 IUT Bordeaux OK 678 IUT DIjon KO Contrainte référentielle non respectée
8 Le modèle relationnel Pour résumer Nom de relation ou nom de table ETUDIANT Une colonne est un attribut ou un champ ID Nom Moyenne bac Photo #Parain 123 André 12,5 012 Une ligne est un tuple, un n-uplet ou un enregistrement 234 Sylvie NULL 547 345 Charlotte 15 NULL 840 Schéma relationnel : ETUDIANT(ID, Nom, Moyenne bac, Photo, #Parain)
13 Conception d une BD Lorsque le problème est simple, on peut décrire directement la base en termes de Tables, Colonnes, Contraintes. Lorsque le domaine d activité est plus complexe complexe la conception est réalisée avec un modèle graphique, assez simple et dissocié de l implémentation du SGBD Modèle E/A ou UML Le modèle est traduit en un schéma dans le modèle de données du SGBD En général modèle relationnel Modèle haut niveau, graphique, user-friendly Traducteur SGBD Schéma dans le modèle de données du SGBD
14 Conception d une BD Exemple de modèle Entité-Association (E-A) ou Modèle Conceptuel des Données (MCD)
15 Conception d une BD Règles du passage du MCD au Modèle Relationnel (ou Modèle Logique des Données - MLD) 1. Chaque entité devient une table 2. Les identifiants des entités deviennent les clés primaires des tables 3. On examine chaque association, 2 cas : cardinalités (X,n) - (X,1) : La clé primaire de la table à la cardinalité (X,n) devient une clé étrangère dans la table à la cardinalité (X,1) cardinalités (X,n) - (X,n) : Il y a création d'une table supplémentaire ayant comme clé primaire une clé composée des identifiants des 2 entités. Exemple : Donnez le MLD correspondant à ce MCD MENU(NumMenu, Libellé, PrixDeVente) PLAT(NumPlat, LibelléPlat, PrixDeVente, #NumType) TYPEPLAT(NumType, Désignation) CONSTITUER(#NumMenu, #NumPlat)
16 Conception d une BD Diagramme de classes UML ETUDIANT(NumEtu, Nom, MoyenneBac, #NomIUT) IUT(NomIUT, Région, FI) ETUDIANT(NumEtu, Nom, MoyenneBac) IUT(NomIUT, Région, FI) CANDIDATER(#NumEtu, #NomIUT, Date, Décision)
17 Notion de schéma Définition : Avec Oracle un schéma rassemble tous les objets qui appartiennent à un utilisateur (tables, vues, indexes, procédures, synonymes, etc.). Avec Oracle, un USER est sensiblement la même chose qu un SCHEMA. La notion de schéma est différente entre MySQL et Oracle Une BD dans MySQL est un schéma dans Oracle Le serveur MySQL contient plusieurs BD, ces BD n ont pas de lien avec les Users Le serveur Oracle contient une seul BD. Lorsqu on crée un User Oracle, on crée un schéma du même nom que l User.
18 Le dictionnaire des données définition Structure centralisée, un ensemble de tables qui donne des informations sur tous les objets d une BD. On accède au dictionnaire des données par l intermédiaire de vues
19 Le dictionnaire des données contient :... La définition des tables, vues, index, clusters, synonymes, séquences, procédures, fonctions, paquetages, déclencheurs, etc. Description de l espace disque alloué et occupé pour chaque objet Les valeurs par défaut des colonnes La description des contraintes de vérification et d intégrité référentielle Les noms des utilisateurs de la BD Les privilèges et rôles de chaque utilisateur Toutes les tables du dictionnaires des données sont accessibles en lecture seule. Elles appartiennent à l utilisateur SYS. On utilise des requêtes (SELECT) pour accéder aux vues de ces tables.
20 Le dictionnaire des données Les différentes classes de vues : permettent de filtrer les informations du dictionnaire des données en fonction des droits des utilisateurs. USER_% : informations sur les objets qui appartiennent à l utilisateur. ALL_% : informations sur tous les objets accessibles à l utilisateur. DBA_% : informations sur tous les objets de la BD. Accessibles aux DBA. Par exemple : USER_TABLES, ALL_TABLES, DBA_TABLES On accède à ces vues avec des requêtes
22 Les principales vues du dictionnaire des données qui concernent un utilisateur ( USER_% ) Les objets d un schéma (USER_OBJECTS)
23 Les principales vues du dictionnaire des données qui concernent un utilisateur ( USER_% ) La structure d une table (USER_TAB_COLUMNS) cf. DESC FACTURE;
24 Les principales vues du dictionnaire des données qui concernent un utilisateur ( USER_% ) Les contraintes d une table (USER_CONSTRAINTS)
25 La table DUAL C est une table spéciale d'une seule colonne présente par défaut dans toutes les installations du SGBD Oracle. Utile pour écrire des requêtes qui ne portent pas sur une table, faire des opérations, tester des fonctions SELECT 10+12 FROM DUAL; SELECT substr( juste un test de substr,5) FROM DUAL;
26 Pour afficher la structure d une table DESC[RIBE] <nom_table>
27 Les différents clients SQL*Plus SQL Developper
28 SQL*Plus est un outil d Oracle qui permet : d utiliser les commandes du langage standard SQL Interrogation, insertion, mise à jour, etc.
29 SQL*Plus est un outil d Oracle qui permet : d utiliser les commandes du langage standard SQL d utiliser les commandes du langage procédural PL/SQL SET SERVEROUTPUT ON; DECLARE l_nom VARCHAR2(32); l_moy NUMBER(4,2); BEGIN SELECT NomEtu, Moy INTO l_nom, l_moy FROM ETUDIANT WHERE Moy = (SELECT MAX(Moy) FROM ETUDIANT); DBMS_OUTPUT.PUT_LINE('Meilleur étudiant : ' l_nom ' ' l_moy ); END;
30 SQL*Plus est un outil d Oracle qui permet : d utiliser les commandes du langage standard SQL d utiliser les commandes du langage procédural PL/SQL d utiliser des commandes propres à SQL*Plus De saisir, stocker, retrouver et exécuter des commandes SQL et des blocs PL/SQL, stockées temporairement dans un Buffer, De formater des sorties, d effectuer des calculs, de stocker les résultats, de lister les descriptions de tables ou de colonnes D accéder et échanger des données entre différentes BD De générer des rapports TP1!
31 SQL Developper est un outil d Oracle qui permet : d utiliser les commandes du langage standard SQL d utiliser les commandes du langage procédural PL/SQL d utiliser la plupart des commandes SQL*Plus SQL Developper vs. SQL*Plus GUI vs. lignes de commandes SQL*PLUS est utile pour exécuter des scripts, automatiser des tâches, formater des rapports, client léger. SQL Developper affiche le contenu de la BD, permet d éditer les données
32 Définition de variables utilisateur et requêtes paramétrées DEFINE définit une variable utilisateur et lui affecte une valeur Crée une variable et lui affecte une valeur DEFINE <variable> = <valeur> Affiche la variable, sa valeur et son type DEFINE <variable> Affiche toutes les variables DEFINE UNDEFINE permet de libérer une variable
33 Définition de variables utilisateur et requêtes paramétrées DEFINE définit une variable utilisateur et lui affecte une valeur Exemple
34 Définition de variables utilisateur et requêtes paramétrées ACCEPT permet de saisir une variable utilisateur. Si elle n a pas été définie, elle est créée. Affiche un message personnalisé et récupère une valeur saisie par l'utilisateur. On peut définir le type de donnée (CHAR, NUMBER et DATE) On peut masquer la saisie avec HIDE (utile pour les mots de passe) Syntaxe ACCEPT <nom_variable> [<type>] [PROMPT <texte à afficher>] [HIDE] Exemple
35 Définition de variables utilisateur et requêtes paramétrées On utilise le caractère & pour faire référence aux variables utilisateur Exemple &varnumerique ou &varchar Si la variable n existe pas, une saisie est demandée. Equivalent à une requête paramétrée. Les critères des requêtes sont saisis pendant l exécution. Exemple : Afficher le nom et la moyenne d un étudiant dont l identifiant est saisi par l'utilisateur ETUDIANT IDEtu NomEtu Moy TailleLycee
36 Définition de variables utilisateur et requêtes paramétrées On utilise le caractère && pour écrire une requête paramétrée et sauvegarder la valeur de la variable utilisateur. Exemple
37 Les séquences : SEQUENCE Une séquence est un objet Oracle partageable entre plusieurs utilisateurs. Permet de générer une suite d entiers. Les séquences sont souvent utilisées pour générer des clés primaires. Syntaxe {CREATE ALTER} SEQUENCE <nomsequence> [START WITH <m>] [INCREMENT BY <n>] [MAXVALUE <max>] [MINVALUE <min>] [{CYCLE NOCYCLE}]; Par défaut, les séquences commencent à 1 et s incrémentent de 1 en 1. Exemple CREATE SEQUENCE masequence1 START WITH -1 INCREMENT BY -1; CREATE SEQUENCE masequence2; CREATE SEQUENCE masequence3 MAXVALUE 100 CYCLE;
38 Les séquences : SEQUENCE On peut consulter toutes les séquences d un utilisateur grâce à la vue USER_SEQUENCES
39 Les séquences : SEQUENCE Une séquence est composée de 2 pseudo-colonnes NEXTVAL : Incrémente la séquence et donne la nouvelle valeur. CURRVAL : Donne la valeur courante de la séquence Exemple CREATE SEQUENCE seq_etudiant MAXVALUE 1000; -- La séquence est utilisée pour générer la clé primaire INSERT INTO ETUDIANT VALUES (seq_etudiant.nextval, Bob, 12.5, 800); -- On utilise la table DUAL pour avoir la valeur courante de la séquence SELECT seq_etudiant.currval FROM DUAL; ETUDIANT IDEtu NomEtu Moy TailleLycee
40 Les séquences : SEQUENCE Pour utiliser la séquence d un autre utilisateur, il faut préciser son schéma. Exemple : Afficher la valeur courante de la séquence seqamichel du schéma Michel SELECT Michel.seqAMichel.CURRVAL FROM DUAL; Il faut avoir les privilèges objet SELECT ou le privilège système SELECT ANY SEQUENCE Modification d une séquence (ALTER), Il faut en être propriétaire ou avoir le privilège Objet ALTER. ALTER SEQUENCE ne modifie que les numéros de séquence à venir Il faut supprimer la séquence puis la recréer pour modifier le premier numéro (START WITH) Pour supprimer une séquence DROP SEQUENCE <nomsequence> ;