vendredi 29 avril 2011

Petit rappel sur le design des bases de données

Dépendance fonctionnelle

Notation: A->B

Si a tout instant, chaque valeur de A n'a qu'une valeur associée de B.

(Patient, Visite)->(Température, pression systolique, poids)

(Clé Primaire)->(Patient, Visite, Température, pression systolique, poids)

A la clé primaire, à tout instant, il n'y a qu'une valeur associée de tous les autres attributs de la table.

Propriété

Transitivité : Si A->B et B->C alors A->C


Formes Normales dans les bases de données.

But : Eliminer les redondances inutiles d'informations.

1NF : Première Forme Normale

a) les attributs de la relations contiennent une valeur atomique.

Ex: On crée la table tblVS

PatID VisitID VSTP VSDBP VSSBP VSWGHT

1 23 37.2 60 120 80

Autre exemple: supposons qu'il faille prendre différents points de température durant la visite pour le patient. Une façon rapide de résoudre le problème serait de séparer les prises de température par un “;”.

PatID VisitID VSTP VSDBP VSSBP VSWGHT

1 23 37.2;36.9;37.1 60 120 80

L'information est stockée toutefois la 1NF est violée car l'information contenue dans VSTP n'est pas atomique.

Une autre manière de faire serait de prévoir 3 champs de température supplémentaires.

PatID VisitID VSTP1 VSTP2 VSTP3 VSDBP VSSBP VSWGHT

1 23 37.2 36.9 37.1 60 120 80

A présent l'information est atomique, toutefois si on ne connaît pas le nombre de prises de température durant la visite, cela pose problème puisqu'il faut considérer le cas maximum. D'où gaspillage de place inutile.


b) Mettre en évidence les groupes répétitifs hors d'une table

Ici les groupes répétitifs sont: VSTP1, VSTP2, VSTP3

On peut donc les factoriser dans une autre table

PatID VisitID VSDBP VSSBP VSWGHT

1 23 60 120 80

Et là on crée une seconde table tblPriseTP

PatID VisitID VSTP

1 23 37.2

1 23 36.9

1 23 37.1


Ici on a factorisé l'information dynamique dans une autre tabl,e l'avantage est double:

  1. on évite d'utiliser des champs inutiles qui seront vides

  2. on gère dynamiquement les prises de températures sans devoir se fixer une borne maximale.

Remarque: cette factorisation peut se faire de manière récursive (c-à-d que la table factorisée peut peut-être elle même factorisée à nouveau, jusqu'à ce que ce ne soit plus possible).

  1. Les variables doivent être constante dans le temps.

Exemple plutôt que de stocker l'age du patient qui sera out of date un an plus tard, on conseille d'utiliser la birthdate et déduire l'age en utilisant: AGE=NOW – BIRTHDATE (var déduite)


2NF : Seconde forme normale

Postulat: La table concernée à déjà été normalisée par la 1NF (c'est un peu comme dans les trois lois de la robotique d'Isaac Asimov, les lois dépendent toujours des précédentes)

Les attributs non clé primaire dépendent de la totalité de la clé primaire. Tout attribut qui ne dépendrait que d'une partie de la clé primaire doit être factorisé de la table.

Exemple DM:

Soit la table tblVS contenant une information complémentaire : VSDT

PatID VisitID VSDT VSDBP VSSBP VSWGHT

1 23 18/05/2009 60 120 80

2 23 18/05/2009 75 118 65

1 24 19/05/2009 72 121 72

tblPriseTP

PatID VisitID VSTP

1 23 37.2

1 23 36.9

1 23 37.1

2 23 36.8

La normalisation à 1NF est totale sur une clé contenant deux champs PatID et VisitID

Toutefois, on remarque que VSDT ne dépend pas entièrement de PatID et VisitID mais uniquement de VisitID soit d'une partie de la clé primaire. Dans ce cas de figure je peux extraire VSDT et le placer dans une table pour économiser un champ (dans certains il se peut que plusieurs champs dépendent d'une partie de la clé primaire, donc l'économie est plus grande)

La 2NF me dit que je peux construire une troisième table qui contiendra VSDT

tblVS

PatID VisitID VSDBP VSSBP VSWGHT

1 23 60 120 80

2 23 75 118 65

1 24 72 121 72


tblVisit

VisitID VSDT

23 18/05/2009

23 19/05/2009


tblPriseTP

PatID VisitID VSTP

1 23 37.2

1 23 36.9

1 23 37.1

2 23 36.8


3NF – Troisième Forme Normale

Pour appliquer la troisième forme normale il faut être sure que la table répond déjà à la 2NF

Regrouper dans une autre table les attributs dépendants transitivement de la clé

Reprenons l'exemple 2NF avec les champs suivants dans la table principale: SiteID, City, Country


tblVS

PatID VisitID SiteID City Country VSDBP VSSBP VSWGHT

1 23 25 Arles France 60 120 80

2 23 26 Namur Belgique 75 118 65

1 24 25 Arles France 72 121 72

Ici on remarque une redondance entre City et Country

SiteID ne fait pas partie de la clé primaire, toutefois il y a une relation (PatID, VisitID)->SiteID

or a SiteID->(City,Country). Il y a donc transitivité (PatID,VisitID)->(City,Country). La 3NF peut donc s'appliquer on va créer un table tblSite qui reprendra l'information du Site


tblSite

SiteID City Country

25 Arles France

26 Namur Belgique


tblVS deviendra

PatID VisitID SiteID VSDBP VSSBP VSWGHT

1 23 25 60 120 80

2 23 26 75 118 65

1 24 25 72 121 72


Avantage :

  • supprime la redondance d'information

  • Dans l'ancienne version, supprimer le patient 2 avait pour risque de supprimer aussi le site de Namur de l'étude, ce n'est plus le cas après normalisation.