# Base de données # BDD Une base de donnée représente un ensemble ordonnées de données dont l'organisation est régie par un modèle de donnée. # SGBD Le système de gestion de base de donnée (sgbd) peut être vue comme le logiciel qui prend en charge la structuration, le stockage, la mise a jour et la maintenance des données. C'est enfaite l'interface entre la base de données et les multiples utilisateurs où leurs programmes ### Conceptions des base de données relationnelles La conception des bases de données est la tache la plus ardue du processus de développement du système d'information. Les méthodes de conception préconnisent une démarche en étapes et font appel à des models pour représenter les objets qui composent les systèmes d'information, les relations existentent entre ces objets ainsi que les règles sous jacentes. La modélisation se réalise en trois étapes principales qui correspondent à trois niveaux d'abstraction différent: - niveau conceptuel: représentation de la base de donnée indépendament de toutes considération informatique - niveau logique: adaptation du schéma conceptuel en tableaux à deux dimensions - niveau physique: implémentation informatique sur un système de gestion de base de données relationnelles ![](https://i.imgur.com/YCCwbyl.png) ### Le modèle entité/associations Ce modèle permet de distinguer les entités qui constituent la base de données et les associations entre ces antités #### Entités, attributs et identifiants On appelle entité un objet pouvant être identifié distinctement. Chaque entité est donc unique et est décrite par un ensemble de propriété appelées attributs. Un ou plusieurs attributs permettent d'identifié de manière unique l'entité, on parle alors d'identifiant ou de clé. On peut représenter une entité par le schéma suivant: ![](https://i.imgur.com/iIOfnu9.png) Un attribut est désigné par : - un nom - une valeur de type définie(entier,chaine de caradctere, date...) ![](https://i.imgur.com/WK9YT9L.png) Une entité peut avoir une ou plusieurs occurences(et parfois aucunes) Ex: ![](https://i.imgur.com/dbFbAIw.png) #### association Une association définie un lien sémantique entre des entités. Elle permet de traduire une partie des règles de gestion qui n'ont pas été satisfaites par la simple définition des entités. Une associatione est à minimat caractérisée par: - un nom: généralement on utilise un verbe définissant le lien entre les endités - deux caradinalités: elles sont présentes sur les deux extrémités du lien. Chaque cardinalité est un couple de valeur (min,max) qui traduisent deux règles de géstions(une par sens). Remarque! Une association peut avoir des attributs ![](https://i.imgur.com/O5dVQfG.png) Les cardinalités les plus répandues sont les suivantes:0,n 1,n 0,1 1,1 ### Le modèle relationnel Dans le modèle relationnel, les entités et les association du schéma conceptuel sont transformées en tableaux à deux dimensions appelées **relations.** #### Transformation d'une entité en relation ![](https://i.imgur.com/zC08zid.png) Association avec la cardinalité 0,1 ou 1,1 Association avec la cardinalité 1,n ou 0,n Eleve(num_ss, # id_etablissement,...) Ecole(id_etablissement,...) ![](https://i.imgur.com/yGjCOT6.png) Une relation possède forcement une clé primaire ### Les contraintes d'intégrité Les modèles relationnels imposent une règle minimale qui est l'unicité des clés, comme nous allons le voir ci dessous. Cependant il existe plusieurs point pour respecter l'intégriter d'une base de donnée #### Unicité de clé Par définition, une relation est un ensemble de tuple. Un ensemble n'ayant pas d'élements en double, il ne peut pas exister deux fois dans une relation. Toute relation doit donc posseder une clé unique (clé primaire) #### Contraintes référentielles Correctement construire, une base de donnée fait appel a des données situées dans différentes relations. POur que les donnnées restent utilisables et cohérentes, il ne faut pas que l'on puisse détruire des données qui dépendent les unes des autres. C'est le role de l'intégrité référentielle de protéger ses relations. Autrement dis, l'integrite réferentielle verifie qu'une valeur de clé etrangeres existe bien en tant que valeur de clé primaire table. Remarque! les valeurs manquantes sont désignées par **null**. L'identifiant ne peut jamais etre Null. #### Contraines de domaines En théorie, une relation est construite a partir d'un ensemble de domaine. En pratique, les domaines gérés par les systèmes sont souvent limités aux types de base( entier, réel, chaines de caractères), parfois monnaie(€) et date. ### Le modèle physique: SGBD relationel Un système de gestion de base de donnée doit répondre aux objectif suivant: - Indépendance physique: la façon dont les données sont définies doit être indépendante des structures de stockage utilisés - Indépendance logique: un même ensemble de données peut etre vu différement par des utilisateurs différents. Toutes ces visions personnelles des données doivent êtres intégrées dans une vision globale. - accès aux données: l'accès aux données se fait par l'intermédiaire d'un langage de manipulation de données (lmd). Il est crucial que ce langage permette d'obtenir des réponse aux requetes en un temps raisonnable. - Administration centralisée des données (intégration): toutes les données doivent être centralisées dans un réservoir unique commun à toutes les applications - non-redondance des données: afin d'éviter les problèmes lors de smises à jour, chaque données doit être présente qu'une seule fois dans la base - cohérence des données: les données sont soumises à un certain nombre de contraintes d'intégrité qui définissent un état cohérent de la base. Elle doivent pouvoir être exprimé simplement et vérifiées automatiquement à chaque insertion, modification ou suppression des données. Les contraintes d'intégrité sont décrite dans le langage de déscription des données (LDD) - partage des données: le sgbd doit permettre un usage en multiutilisateur. - Sécurité des données: les données doivent pouvoir être protégées contre les accès non autorisées. Pour cela, il faut pouvoir associer à chaque utilisateur les droits d'accès aux données. - Résistance aux pannes: après une panne intervenant au milieu d'une modification, deux solutions sont possibles:soit récupérer les données dans l'Etat où elles étaitent avant la modification, soit terminer l'opération interompue ## Convention d'écriture SQL ##### Utilisation des majuscule lors de la rédaction réservés en SQL ##### Pas d'utilisation d'accent ##### Pas d'utilisation d'espace ##### Eviter l'utilisation des mots réservés 1) ## Comment créer une BDD ```sql CREATE DATABASE lycee_ndp CHARACTER SET 'utf8'; ``` 2) ## Comment supprimer une BDD ```sql DROP DATABASE lycee_ndp; ``` 3) ## Comment créer une relation/table ```sql CREATE TABLE Etablissement( id_etablissement INTEGER, annee_creation YEAR, PRIMARY KEY id_etablissement, nom VARCHAR(250), adresse VARCHAR(250) ); CREATE TABLE Eleve( num_SS INTEGER, PRIMARY KEY num_SS, nom VARCHAR(255) NOT NULL, prenom VARCHAR(255) NOT NULL, id_etablissement INTEGER, CHECK(date_naissance BETWEEN 2000-01-01 AND 2010-12-31), FOREIGN KEY (id_etablissement) REFERENCES Etablissement(id_etablissement), ON DELETE cascade ON UPDATE cascade ); ``` 4) ## Comment sont exprimées les contraintes d'intégrité ELle s sont intégrées au sein de la requete d'intégration 5) ## Comment sont exprimées les contraintes des domaines? Elle sont indiquées devant le nom de l'attribut au sein de la requete de création de la table. 6) ## Comment modifier une table une fois créée ? ```sql --ajout d'un attribut ALTER TABLE Eleve ADD Classe VARCHAR(10) -- modification d'un attribut ALTER TABLE Eleve MODIFY Classe VARCHAR(30) NOT NULL -- modification du nom d'un attribut ALTER TABLE Eleve CHANGE Classe Niveau; ``` 7) ## Quels sont les domaines attribués aux entiers? Citez les différences entre eux. Les types qui acceptent des nombres entier comme des valeurs sont désignés par INT et ses déclinaisons: TINYINT, SMALLINT, MEDIUMINT, BIGINT La différence entre ces types est le nombre d'octets(donc la place mémoire réservée à la valeur du champ). 2) ## Quels sont les domaines réservés aux flottants(décimaux)? FLOAT, DECIMAL, NUMERIC, REAL, DOUBLE (en fonction de la précision recherchée: nombre de digit après la virgule). 3) ## Qules sont les domaines attribuées aux chaines de caractères? ## Application directe du cours les chaines courtes en valeur réservée CHAR VARCHAR et les chaines longues TINYTEXTE MEDIUMTEXT LONGTEXT 4) ## Quels sont les domaines temporels? DATE DATETIME TIME TIMESTAMP YEAR (en fonction des besoins). ## Application directe du cours ### Reprendre les modèles entités/associations de l'activité précédente et proposer les réquetes de création d'une BDD et des relations qui leurs sont associées Client(numero, prenom_client, nom_client) Reservation(numero, #numero_client, #numero_chambre, date_reservation) Chambre(numero_chambre, #nom_hotel, prix) Hotel(nom_hotel, adresse_hotel) Patient(Numero_SS, Nom_patient) Consultation(Numero, #Numero_SS, #Matricule, Date_consult) Medecin(Matricule, Nom_medecin) Medicament(Code, Libelle) Prescription(#Numero, #Code, Nombre_prises) CREATE DATABASE Medecin CHARACTER SET 'utf8'; CREATE TABLE ```sql CREATE TABLE Hotel( nom_hotel VARCHAR(250), adresse_hotel VARCHAR(250) PRIMARY KEY (nom_hotel, adresse_hotel), ); CREATE TABLE Client( client INTEGER, nom_client VARCHAR(250) NOT NULL, prenom_client VARCHAR(250) NOT NULL, PRIMARY KEY (client), ); CREATE TABLE Chambre( numero_chambre INTEGER, nom_hotel VARCHAR(255) NOT NULL, prix INTEGER PRIMARY KEY(numero_chambre), FOREIGN KEY (nom_hotel) REFERENCES Hotel(nom_hotel), CHECK(prix) BETWEEN 50 AND 150, ); CREATE TABLE Reservation( numero INTEGER, numero_client INTEGER NOT NULL, numero_chambre INTEGER NOT NULL, date_reservation DATE NOT NULL CHECK, PRIMARY KEY(numero), FOREIGN KEY(numero_client) REFERENCES client(numero_client) FOREIGN KEY(numero_chambre) REFERENCES chambre(numero_chambre) ON DELETE CASCADE ON UPDATE CASCADE ); ```sql CREATE TABLE Patient( num_SS INTEGER, nom_patient VARCHAR(50) NOT NULL, prenom_patient VARCHAR(50) NOT NULL, PRIMARY KEY (Numero_SS) ); CREATE TABLE consultation( id_consultation INTEGER, PRIMARY KEY (id_patient), PRIMARY KEY (Medecin), nom VARCHAR(250), prenom VARCHAR(250) CREATE TABLE Medicament( code INTEGER libelle VARCHAR(255) NOT NULL, PRIMARY KEY(code), ); CREATE TABLE Reservation( num_SS INTEGER, PRIMARY KEY num_SS, nom VARCHAR(255) NOT NULL, prenom VARCHAR(255) NOT NULL, id_etablissement INTEGER, CHECK(date_naissance BETWEEN 2005-01-30 AND 2023-01-30), FOREIGN KEY (id_etablissement) REFERENCES Etablissement(id_etablissement), ON DELETE cascade ON UPDATE cascade ); CREATE TABLE Chambre( num_chambre INTEGER, PRIMARY KEY id_etablissement, nom VARCHAR(250), prenom VARCHAR(250)