Méthodes de conception debases de données
Joël QuinquetonLicence Pro LIPAE, Université
Montpellier III
Les méthodes
• Concepts et outils : introduction à SQL• Compléments sur SQL : schéma , tri, calcul• Les méthodes:
– Construction– Modèle E/A (Entité Association)– Schéma conceptuel– Schéma SQL
• Etude de cas.• Dépendances fonctionnelles et formes normales
Modèle entité Association
• Entités: celles du monde que l’on veutreprésenter dans cette base
• Ont des attributs (informations)• Associations: relient des entités• Peuvent avoir des propriétés (attributs)
Exemple 1
• Gérer un marché d’armement• 3 types d’objets:
– Fournisseurs– Produits– Livraisons
produits fournisseurslivraisons
Exemple 2
• Gérer un club sportif (sport individuel)• 3 types d’objets:
– Adhérents– Compétitions– Résultats
adhérents compétitionsrésultats
Exemple 3
• Gérer un parc automobile• 3 types d’objets:
– Conducteurs– Véhicules– Cartes grises
conducteurs véhiculesCarte grise
Cardinalités des relations
• Pour chaque entité-1: N1 entités-2• Pour chaque entité-2: N2 entités-1• On met le minimum (0 ou 1) et le
maximum (1 ou N)
Entité-1 Entité-2associationN1
N2
Exemples
produits fournisseurslivraisons
adhérents compétitionsrésultats
conducteur véhiculeCarte grise
1-N 1-N
1-N
1-1
0-N
0-N
Exemple 1 (rappel)
• Gérer un marché d’armement• 3 types d’objets:
– Fournisseurs– Produits– Livraisons
produits fournisseurslivraisons
Modèle entité association
produits
fournisseurs
livraisons
1-N
1-N
nom
pays
prix
type
Exemple de schéma
textetextenombreVilleNomN°
textenombreTypeN°
nombrenombrenombrePrixN° pièceN° four.
fournisseurs
produits
livraisons
Exemple 1: tables
Avion15Cutter57Avion14TypeN°
57574610001546605715211001581550014815000141525057174100015152PrixN° pièceN° four.
fournisseurs
produits
livraisons
BagdadSaddam46MoscouPoutine259BahamasMeissier376ParisChirac81KaboulBen Laden174New YorkBush152VilleNomN°
Passage E/A vers relationnel
• Relation pour chaque Entité ouAssociation
• Différentes solutions selon la cardinalité– Pas besoin de relation pour une
association (1-1, 1-N) en général– Les entités peuvent être dans une même
relation en cas d’association (1-1,1-1)
Implémenter une base dedonnées
• création, suppression, modification:– de table– de ligne
• Identifiants• Contraintes référentielles• Colonnes obligatoires• Type des valeurs
Modèle entité association
produits
fournisseurs
livraisons
1-N
1-N
nom
pays
prix
type
Exemple: relations
• Modèle relationnel:– Fournisseur(n°, nom, ville)– Produit(n°, type)– Livraison(n°four., n°pièce, prix)
• Les clés primaires et étrangères sontspécifiées
Exemple: schéma SQL
textetextenombreVilleNomN°
textenombreTypeN°
nombrenombrenombrePrixN° pièceN° four.
fournisseurs
produits
livraisons
Création d’une table
• Create table fournisseurs (– Numero int(6),– Nom varchar(20),– Ville varchar(20)– ) primary key (numero);
Varchar(20)Varchar(20)Int(6)VilleNomNumero
fournisseurs
Remplissage d’une table• Insert into
fournisseurs values(152, ‘Bush’, ‘NewYork’);
• …BagdadSaddam46MoscouPoutine259BahamasMeissier376ParisChirac81KaboulBen Laden174New YorkBush152VilleNomN°
Effacement d’une table
• Drop fournisseurs;– Efface les tuples de la table– Détruit la structure de la table
• Delete * from fournisseurs;– Efface les tuples de la table
Mise à jour
• Update <table>– set<att=val>– where …
• Peut mettre à jour plusieurs tuples• Exemple:
– Update tab set att=att+1 where att > 10;
Implémentation d’une table
• Différents types de table (mySQL):– Classiques: ISAM, HEAP, MyISAM– Sécurisés: InnoDB, BDB
• Le schéma d’une table est stocké dansun fichier <nom>.frm
Tables MyISAM
• Index dans un fichier <nom>.MYI• Données dans un fichier <nom>.MYD• Différents types d’index: usuellement
ISAM– B-arbre– Taille du fichier Index: (lg_clé + 4)/0,67
pour chaque clé• Format statique ou dynamique
Format statique
• si aucun champ TEXT, BLOB ouVARCHAR
• Tous les tuples ont même longueur L(remplissage par des 0)
• Emplacement du nème tuple: n*L• Il est facile de reconstituer une table
corrompue
Format dynamique
• si champ(s) TEXT, BLOB ou VARCHAR• Bitmap pour chaque tuple décrivant les
champs vides (0 ou ‘’)• Chaine:
– longueur suivie des caractères– En cas de largeur excessive (update):
fragmentation (morceaux ≥ 20 octets)– Pénalité de 6 octets par lien de fragmentation
Espace disque
• Moins d’espace perdu, mais il est plus difficilede reconstituer une table corrompue
• Longueur moyenne:– 3 +– (nb col + 7) / 8 +– nb char +– taille des champs num +– longueur des chaines +– (nb de NULL + 7) / 8
Tables ISAM et Merge
• Type Merge = MRG_MyISAM• Table MyISAM fragmentée en plusieurs
tables de même schéma• Tables ISAM: périmé
– Index (B-arbre) dans <nom>.ism– Données dans <nom>.isd
Tables HEAP
• Résidant en mémoire• Utilisent des index hashés• Plutôt pour les tables temporaires• Il faut spécifier un nombre maxi de
tuples à la création de la table
Tables InnoDB
• Supportent les clés étrangères (qui doiventêtre des index)– [CONSTRAINT symbol]– FOREIGN KEY (index_col_name, ...)
REFERENCES table_name (index_col_name, ...)– [ON DELETE {CASCADE | SET NULL | NO
ACTION | RESTRICT}] [ON UPDATE {CASCADE| SET NULL | NO ACTION | RESTRICT}]
• Transactions sécurisées– Contrôle de concurrence– Transaction « commit »
Index dans les tables InnoDB
• Des B-arbres• Allocation par page de 16 kO
– Si on remplit la table dans l’ordre del’index: la page est remplie à 15/16
– Si on remplit dans un ordre aléatoire: pageremplie entre 1/2 et 15/16
– Si < 1/2, MySQL cherche à libérer la pageen contractant l’index
Tables BDB
• Type = Berkeley DB• Transactions réversibles (par le biais de
logfiles)• Ne fonctionne pas sur tous les OS
Exemple de schéma
textetextenombrevillenomnum
textenombretypenum
nombrenum
nombrenombrenombreprixnpiecenfour
fournisseurs
produits
livraisons
Création des tables
• Tables sans clé étrangères:– Create table fournisseurs (num int(6), nom varchar(20), ville
varchar(20)) primary key (num);– Create table produits (num int(6), type varchar(20), primary
key (num);
• Dernière table:– Create table livraisons (num int(6), npiece int(6),
nfour int(6), prix int(10)– index quoi (npiece), index qui (nfour),– foreign key npiece references produits (num) on
delete set null– foreign key nfour references fournisseurs (num) on
delete set null) primary key (num);
Exemple 1: tables
Avion15Cutter57Avion14TypeN°
57574610001546605715211001581550014815000141525057174100015152prixnpiècenfour.
fournisseurs
produits
livraisons
BagdadSaddam46MoscouPoutine259BahamasMeissier376ParisChirac81KaboulBen Laden174New YorkBush152villenomnum
Les index
• Manière de localiser une informationpar son contenu:– Nom =‘Chirac’?
• Exemples:– Répertoire, dictionnaire– B-arbre– Hash-coding
Dictionnaires
• Savoir si un nom figure dans un Carnetd’adresses contenant N adresses:– Index à 1 lettre: N/26 étapes en moyenne,
taille de l’index = 26– Index à 2 lettres: N/262 étapes, taille = 262
• Problème: les lettres les plus occupéessont aussi les plus demandées dans lesrequêtes
Arbres binaires
• Soit une listes de valeurs à indexer– Par exemple une liste de noms, ou de nombres– On la coupe en 2 parties de taille quasi égale– On retient l’élément du milieu, et les deux listes
des précédents et suivants– On recommence sur les sous listes
• Facile à mettre à jour• Temps d’accès logarithmique (si l’arbre est
« équilibré »)
Exemple
A, C, D, F, H, M, N, P, Z
A, C, D, F M, N, P, Z
H
B-Arbre obtenuH
Z
P
M
N
D
F
C
A
Mise à jourH
Z
P
M
N
D
F
C
A
G
Hashage
• Basé sur les treillis N/pN• L’index est supposé représenté par un
nombre (ce peut être un codage)• L’élément est stocké à l’emplacement d’indice
égal à son reste dans la division par p• En cas de collision: liste auxiliaire ou autre
hashage• Préféré au B-arbre pour les tables résidant en
mémoire