Vous êtes sur la page 1sur 6

Normalisation

Cas

UNF
NUM_CLIENT NOM_CLIENT NUM_PROPRIETE ADRESSE_PRO DEB_BAIL FIN_BAIL MNT_LOC NUM_PROPRIETAIRE NOM_PROPRIETAIRE

CL76 Jean Martin LM4 430 des Peupliers #5, 2003-07-01 2004-08-31 350 CP40 Brigitte Gauthier
LM16 Montréal 2004-09-01 2005-09-01 450 CP93 Guy Lacasse
911 de l’Aéroport #1809, Montréal

CL56 Oscar Meier LM4 430 des Peupliers #5, 2002-09-01 2003-06-10 350 CP40 Brigitte Gauthier
Montréal 2003-10-10 2004-12-01 375 CP93 Guy Lacasse
LM36 1780 Boul. Central #210, Montréal 2005-11-01 2006-08-10 450 CP93 Guy Lacasse
LM16 430 des Peupliers #5,
Montréal
Mise à plat vers 1NF
NUM_CLIENT NUM_PROPRIETE NOM_CLIENT ADRESSE_PRO DEB_BAIL FIN_BAIL MNT_LOC NUM_PROPRIETAIRE NOM_PROPRIETAIRE

CL76 LM4 Jean Martin 430 des Peupliers #5, 2003-07-01 2004-08-31 350 CP40 Brigitte Gauthier
Montréal

CL76 LM16 Jean Martin 911 de l’Aéroport #1809, 2004-09-01 2005-09-01 450 CP93 Guy Lacasse
Montréal

CL56 LM4 Oscar Meier 430 des Peupliers #5, 2003-06-10 2003-06-10 350 CP40 Brigitte Gauthier
Montréal

CL56 LM36 Oscar Meier 1780 Boul. Central #210, 2004-12-01 2004-12-01 375 CP93 Guy Lacasse
Montréal

CL56 LM16 Oscar Meier 911 de l’Aéroport #1809, 2006-08-10 2006-08-10 450 CP93 Guy Lacasse
Montréal

Notes : Étapes précédentes possibles si données présentes, sinon on débute ici :

On énumère les attributs


NUM_CLIENT, NUM_PROPRIETE, NOM_CLI, ADRESSE_PROPRIETE,
DATE_DEB_BAIL, DATE_FIN_BAIL, MNT_LOCATION_PROPRIETE,
NUM_PROPRIETAIRE, NOM_PROPRIETAIRE

C’est aussi notre table de départ :


CLIENT_PROPRIETE (NUM_CLIENT, NUM_PROPRIETE, NOM_CLI,
ADRESSE_PROPRIETE, DATE_DEB_BAIL, DATE_FIN_BAIL,
MNT_LOCATION_PROPRIETE, NUM_PROPRIETAIRE, NOM_PROPRIETAIRE)

On identifie les df
Df1
NUM_CLIENT, NUM_PROPRIETE  NOM_CLI, ADRESSE_PROPRIETE,
DATE_DATE_BAIL, DATE_FIN_BAIL, MNT_LOCATION_PROPRIETE,
NOM_PROPRIETAIRE

Df2
NUM_CLIENT  NOM_CLI

Df3
NUM_PROPRIETE  ADRESSE_PROPRIETE, MNT_LOCATION_PROPRIETE,
NUM_PROPRIETAIRE, NOM_PROPRIETAIRE

Df4
NUM_PROPRIETAIRE  NOM_PROPRIETAIRE

Df5
NUM_CLIENT, DATE_DEBUT_BAIL  NUM_PROPRIETE, NOM_CLI,
ADRESSE_PROPRIETE, DATE_FIN_BAIL, MNT_LOCATION_PROPRIETE,
NUM_PROPRIETAIRE, NOM_PROPRIETAIRE
DF6
NUM_PROPRIETE, DATE_DEBUT_BAIL  NUM_CLIENT, NOM_CLI,
ADRESSE_PROPRIETE, DATE_FIN_BAIL, MNT_LOCATION_PROPRIETE,
NUM_PROPRIETAIRE, NOM_PROPRIETAIRE

DF7 et DF8 possibles en inversant DATE_DEBUT_BAIL et DATE_FIN_BAIL dans df5


et df6.

On identifie les clés candidates, pour le faire, on regarde les déterminants des 6 df :
Pour df1, NUM_CLIENT, NUM_PROPRIETE
Pour df2, NUM_CLIENT
Pour df3, NUM_PROPRIETE
Pour df4, NUM_PROPRIETAIRE
Pour df5, NUM_CLIENT, DATE_DEBUT_BAIL
Pour df6, NUM_PROPRIETE, DATE_DEBUT_BAIL
Les 3 clés candidates sont les déterminants de la df1, df5 et df6.

On choisit la clé primaire NUM_CLIENT, NUM_PROPRIETE de la df1. Alors


NUM_CLIENT, DATE_DEBUT_BAIL et NUM_PROPRIETE, DATE_DEBUT_BAIL
deviennent des clés alternatives.

CLIENT_PROPRIETE (NUM_CLIENT, NUM_PROPRIETE, NOM_CLI,


ADRESSE_PROPRIETE, DATE_DEB_BAIL, DATE_FIN_BAIL,
MNT_LOCATION_PROPRIETE, NUM_PROPRIETAIRE, NOM_PROPRIETAIRE)

1NF vers 2NF


Identifier les dépendances partielles sur la clé primaire NUM_CLIENT,
NUM_PROPRIETE
Df2 et df3 sont des dépendances partielles sur la clé primaire.

Pour la df2, on crée une nouvelle relation CLIENT en sortant le déterminé NOM_CLI de
la df2 et en copiant le déterminant NO_CLIENT qui devient la clé primaire de la
nouvelle table, et clé étrangère de la table principale. On peut ajuster le nom des tables en
cours de route. Ce qui donne :

BAIL (NUM_CLIENT#, NUM_PROPRIETE, ADRESSE_PROPRIETE,


DATE_DEB_BAIL, DATE_FIN_BAIL, MNT_LOCATION_PROPRIETE,
NUM_PROPRIETAIRE, NOM_PROPRIETAIRE)

CLIENT (NUM_CLIENT, NOM_CLI)

Pour la df3, on crée une nouvelle relation PROPRIETE en sortant les déterminés
ADRESSE_PROPRIETE, MNT_LOCATION_PROPRIETE, NUM_PROPRIETAIRE,
NOM_PROPRIETAIRE de la df3 et en copiant le déterminant NUM_PROPRIETE qui
devient la clé primaire de la nouvelle table, et clé étrangère de la table principale. Ce qui
donne :

BAIL (NUM_CLIENT#, NUM_PROPRIETE#, DATE_DEB_BAIL,


DATE_FIN_BAIL)

CLIENT (NUM_CLIENT, NOM_CLI)

PROPRIETE_PROPRIETAIRE (NUM_PROPRIETE, ADRESSE_PROPRIETE,


MNT_LOCATION_PROPRIETE, NUM_PROPRIETAIRE, NOM_PROPRIETAIRE)

Avec les données :

2NF vers 3NF


Identifier les DF pour chaque table
CLIENT
df2 NUM_CLIENT → NOM_CLI
BAIL
df1 NUM_CLIENT, NUM_PROPRIETE → DATE_DEBUT_BAIL, DATE_FIN_BAIL
df5 NUM_CLIENT, DATE_DEBUT_BAIL → NUM_PROPRIETE, DATE_FIN_BAIL
df6 NUM_PROPRIETE, DATE_DEBUT_BAIL → NUM_CLIENT, DATE_FIN_BAIL
PROPRIETE_PROPRIETAIRE
df3 NUM_PROPRIETE → ADRESSE_PROPRIETE, MNT_LOCATION_PROPRIETE,
NUM_PROPRIETAIRE, NOM_PROPRIETAIRE
df4 NUM_PROPRIETAIRE → NOM_PROPRIETAIRE

Identifier les PK de chaque table


CLIENT, la PK est NUM_CLIENT
BAIL, la PK est NUM_CLIENT, NUM_PROPRIETE
PROPRIETAIRE_PROPRIETAIRE, la PK est NUM_PROPRIETE

Identifiez les dépendances transitives par rapport à la PK de chaque table


Dans CLIENT, 1 seule df, donc aucune transitivité possible
Dans BAIL, 3 df dont les déterminants sont 3 clés candidates. Pas de transitivité.
Dans PROPRIETE_PROPRIETAIRE, dans la df3 nous avons, par décomposition,
df3.1
NUM_PROPRIETE  NUM_PROPRIETAIRE
df3.2
NUM_PROPRIETE  NOM_PROPRIETAIRE

Donc, avec df3.1 et df4


NUM_PROPRIETE  NUM_PROPRIETAIRE  NOM_PROPRIETAIRE
Ou abc

Puis avec df3.2


NUM_PROPRIETE  NOM_PROPRIETAIRE
ac
Et il n’y a pas de DF inverse (pas de ca ou de ba)
C’est donc transitif. On doit briser les df transitives (soit la partie bc)

Pour enlever cette transitivité, on crée nouvelle relation PROPRIETAIRE avec copie du
déterminant de la df4 NUM_PROPRIETAIRE et en y déplaçant sont déterminé
NOM_PROPRIETAIRE. NUM_PROPRIETAIRE devient la PK de la nouvelle table
(PROPRIETAIRE) et clé étrangère dans la table d’origine (PROPRIETE)

Ce qui donne en 3NF :


BAIL (NUM_CLIENT#, NUM_PROPRIETE#, DATE_DEB_BAIL,
DATE_FIN_BAIL)

CLIENT (NUM_CLIENT, NOM_CLI)

PROPRIETE (NUM_PROPRIETE, ADRESSE_PROPRIETE,


MNT_LOCATION_PROPRIETE, NUM_PROPRIETAIRE#)

PROPRIETAIRE (NUM_PROPRIETAIRE, NOM_PROPRIETAIRE)

Et les AK de BAIL sont :


NUM_CLIENT, DATE_DEB_BAIL
NUM_PROPRIETE, DATE_DEB_BAIL
NUM_CLIENT, DATE_FIN_BAIL
NUM_PROPRIETE, DATE_FIN_BAIL
Ou en diagramme avec les données

Vous aimerez peut-être aussi