Méthodes de conception de bases de donnéesMéthodes de conception de bases de données Joël...

Post on 28-Mar-2021

2 views 0 download

transcript

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