Normalisation par transformation d'attributs en méthodes

Il arrive que la fonction sous-jacente à la DF soit une fonction simple, que l'on peut calculer. Par exemple pour la DF : ddn → age ( ddn), on peut calculer age en fonction de ddn par le calcul : age = today() - ddn.

Méthode

Chaque fois que c'est possible, on remplacera un attribut par une méthode si cela permet de supprimer une DF sans perdre d'information.

Cette solution est à privilégier a priori sur une décomposition.

En relationnel, on supprimera l'attribut de la table et on ajoutera une vue permettant de le retrouver.

ExempleExistence d'une fonction de calcul simple

Soit la relation en 2NF :

CTRL+C pour copier, CTRL+V pour coller
1
personne (#numsecu, nom, prenom, ddn, age) avec ddn → age
personne (#numsecu, nom, prenom, ddn, age) avec ddn → age

On remplacera cette relation par une relation en 3NF et une vue :

CTRL+C pour copier, CTRL+V pour coller
1
Personne (#numsecu, nom, prenom, ddn)
2
vPersonne (#numsecu, nom, prenom, ddn, age) avec  age = today() - ddn
Personne (#numsecu, nom, prenom, ddn)
vPersonne (#numsecu, nom, prenom, ddn, age) avec  age = today() - ddn

ExempleCas de transformation d'un héritage exclusif par la classe mère

Soit le schéma UML suivant :

Une transformation de l'héritage par la classe mère donnera :

CTRL+C pour copier, CTRL+V pour coller
1
Salle (#nom:string, surface:string, nbplaces:int, type:{Réunion|Bureau})
2
DF : nom → surface, type, nbplaces et nbplaces → type
Salle (#nom:string, surface:string, nbplaces:int, type:{Réunion|Bureau})
DF : nom → surface, type, nbplaces et nbplaces → type

On peut donc supprimer l'attribut type et aboutir à la relation en 3NF :

CTRL+C pour copier, CTRL+V pour coller
1
Salle (#nom:string, surface:string, nbplaces:int)
2
vSalle (nom, surface, nbplaces, type) avec SI nbplace IS NULL ALORS type=Bureau SINON type=Réunion
Salle (#nom:string, surface:string, nbplaces:int)
vSalle (nom, surface, nbplaces, type) avec SI nbplace IS NULL ALORS type=Bureau SINON type=Réunion