Précédent   Forum du club des développeurs et IT Pro > Général Développement > ALM > Modélisation > Schéma
Schéma Modélisation Relationnelle (Dépendances Fonctionnelles, Formes Normales, Entité-relation, MCD, MPD ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/06/2012, 14h25   #1
Steph0
Nouveau Membre du Club
 
Stephen
Inscription : mars 2009
Messages : 87
Détails du profil
Informations personnelles :
Nom : Stephen
Localisation : France

Informations forums :
Inscription : mars 2009
Messages : 87
Points : 27
Points : 27
Par défaut Relation réflexive sur une table

Bonjour,

Je me demandais si les associations réflexives étaient une mauvaise pratique en général.

Exemple classique, une table Salarié, dont chaque champ est composé de : id, nom, prénom, supérieur_hiérarchique où supérieur_hiérarchique pointe sur un autre champ de la table salarié.

La question est : cela pose-t-il problème de fonctionner ainsi, c'est à dire est-il faire une table de mariage qui gère cet appairage simple ?

Exemple pratique :
Code :
1
2
3
4
(id), (nom), (prenom), (superieur_hierarchique)
1, toto, toto, NULL
2, moi, moi, 1
Merci
Steph0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2012, 15h02   #2
Richard_35
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 857
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 857
Points : 3 865
Points : 3 865
Bonjour Steph0,

Citation:
Envoyé par Steph0
Je me demandais si les associations réflexives étaient une mauvaise pratique en général.
==> non. Mais cela dépend du contexte : des règles de gestion.

De ce point de vue, ton exemple est significatif. Les données que tu présentes reflète ces règles de gestion :
  • 1 salarié reporte à 0 (NULL) ou 1 seul supérieur hiérarchique ;
  • 1 supérieur hiérarchique a, sous sa responsabilité, 1 ou n salariés.
donc :
Code :
1
2
3
4
5
Salarie -0,1--+
   |          |  
   |     [Reporter à]
   |          |
   +---- 1,n--+
donnant :
Salarie(id, nom, ...)
Salarie_Superieur(idSalarie, #IdSalarieSuperieur, ...)
une table associative, à cause du fait qu'un salarié peut ne pas avoir de supérieur hiérarchique. En effet, la possibilité qu'une clé étrangère soit nulle est dangereuse performance, quota, etc...).

A contrario, si tes règles de gestion avaient été :
  • 1 salarié reporte, obligatoirement, à 1 et 1 seul supérieur hiérarchique ;
  • 1 supérieur hiérarchique a, sous sa responsabilité, 1 ou n salariés.
donc :
Code :
1
2
3
4
5
Salarie -1,1--+
   |          |  
   |     [Reporter à]
   |          |
   +---- 1,n--+
donnant :
Salarie(id, nom, #IdSalarieSuperieur,...)
N.B : la solution de la table associative peut s'avérer payante, même dans le second cas : par exemple, si ton association (réflexive) doit posséder des attributs propres (date de collaboration entre idSalarie et IdSalarieSuperieur, ...).
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/06/2012, 15h16   #3
Steph0
Nouveau Membre du Club
 
Stephen
Inscription : mars 2009
Messages : 87
Détails du profil
Informations personnelles :
Nom : Stephen
Localisation : France

Informations forums :
Inscription : mars 2009
Messages : 87
Points : 27
Points : 27
Bonjour,

Merci pour votre réponse détaillée. Cela répond parfaitement à ma question (il s'agit du premier cas pour moi).

Je retiens néanmoins que de manière générale une table associative reste la bonne solution, sans parler de bonnes ou mauvaises pratiques.

Merci
Steph0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2012, 23h59   #4
fsmrel
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Homme François de Sainte Marie
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 3 640
Détails du profil
Informations personnelles :
Nom : Homme François de Sainte Marie
Localisation : Autre

Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 3 640
Points : 9 194
Points : 9 194
Citation:
Envoyé par Richard_35 Voir le message
Code :
1
2
3
4
5
Salarie -1,1--+
   |          |  
   |     [Reporter à]
   |          |
   +---- 1,n--+
Adam est donc le fils de quelqu’un (quitte à ce qu'il soit son propre père, réflexivité oblige), et c’est parti pour une boucle infinie si on n’y prend pas garde lors de la manipulation des données (jointure récursive et toutes ces sortes de choses)...
__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

__________________

Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2012, 10h00   #5
Richard_35
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 857
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 857
Points : 3 865
Points : 3 865
Bonjour Fsmrel,

C'est vrai, et ma réponse était incomplète.
Salarie(id, nom, ...)
Salarie_Superieur(idSalarie, #IdSalarieSuperieur, ...)
avec, dans un premier temps, un trigger qui contrôle idSalarie<>IdSalarieSuperieur.

Dans un second temps, nous sommes dans la problématique des nomenclatures et je ne vois pas d'autre moyen que de créer un second trigger qui contrôle que les arborescences "ne se mordent pas la queue". C'est ce que font les GPAO, en général, avec les nomenclatures de produits finis.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2012, 14h43   #6
fsmrel
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Homme François de Sainte Marie
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 3 640
Détails du profil
Informations personnelles :
Nom : Homme François de Sainte Marie
Localisation : Autre

Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 3 640
Points : 9 194
Points : 9 194
Citation:
Envoyé par Richard_35 Voir le message
un trigger qui contrôle idSalarie<>IdSalarieSuperieur
Une contrainte de table (CHECK) suffira.
__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

__________________

Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h02.


 
 
 
 
Partenaires

Hébergement Web