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:
on évite d'utiliser des champs inutiles qui seront vides
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).
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.