|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juillet 2004 Messages : 3 ![]() |
Bonjour à tous,
Etant en pleine conception de base de données, je me retrouve, avec mon équipe, confronté à un dilemne. Cette discussion fait suite à la lecture de cette discussion très intéressante ! Je vais donc essayer d'exposer mon problème en version simplifiée et les différentes solutions auxquelles nous avons pensé. Donc je modélise un schéma de base pour une refonte d'appli gérant les interventions dans des résidences. Les interventions peuvent avoir lieu sur un appartement, un couloir (lot d'appartements), un étage ou un bâtiment. Les résidences peuvent avoir plusieurs bâtiments. Les appartements ont un type ainsi que les couloirs (rien à voir entre les 2 types). Voilà en gros la partie qui me pose souci, sachant que les appartements, les couloirs et les étages ont des informations communes (superficie...), mais que les bâtiments en ont d'autres (syndic, adresse). Et les solutions auxquelles nous avons pensé, et attention, il y en a de très mauvaises :
Voilà donc le point sur notre réflexion. Pour info, on part sur du SQL Server ou de l'Oracle (choix laissé aux clients). Merci par avance à ceux qui pourront éclairer notre lanterne, nous souhaitons quand même partir sur des bases solides |
|
|
00
|
|
|
#2 | |
![]() ![]() |
Citation:
1) Dans tous les appartements du couloir ? 2) Dans le couloir ? Dans le cas 1), d'après la description de la situation actuelle, j'ai l'impression qu'il n'est quand même pas indispensable d'enregistrer précisément dans quels appartements à eu lieu une intervention "couloir" mais que ce serait implicitement dans tous les appartements du couloir, ce qui peut se retrouver par interrogation de la BDD, les appartements ne changeant pas de couloir. Partant de ces considérations, je suggérerais le modèle suivant... D'abord un héritage de tous les types de lieux pour rassembler leurs attributs communs et associer les interventions à une seule entité Lieu. Appartement -(1,1)----Etre----0,1- Lieu -0,n----Subir----1,1- Intervention Couloir -(1.1)----Etre----0,1-------------| Etage -(1,1)----Etre----0,1---------------| Batiment -(1.1)----Etre----0,1----------| Residence -(1,1)----Etre----0,1--------| Appartement -1,1----Situer----1,n- Couloir -1,1----Situer----1,n- Etage -1,1----Situer----1,n- Batiment -1,1----Appartenir----1,n- Residence Ce qui donnerait les tables suivantes : Lieu (l_id, attributs communs à tous les lieux) Intervention (int_id, int_id_lieu, int_date...) Residence (rsd_id_lieu...) Batiment (btm_id_lieu, btm_id_residence...) Etage (etg_id_lieu, etg_id_batiment...) Couloir (clr_id_lieu, clr_id_etage...) Appartement (apt_id_lieu, apt_id_couloir...) Résultat : disparition du bonhomme NULL !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : juillet 2004 Messages : 3 ![]() |
Tout d'abord, merci pour ta réponse !
Citation:
Citation:
Le fait que les données soient communes entre Etage, Couloir et Appartement, cela n'influe pas ? N'y a-t-il pas une redondance à les stocker dans 3 tables différentes ? Cela concerne potentiellement 2 champs qui sont communs à ces 3 entités. |
||
|
|
00
|
|
|
#4 | |
![]() ![]() |
Citation:
Appartement -(1,1)----Etre----0,1- Lieu_interieur -(1,1)----Etre----0,1- Lieu -0,n----Subir----1,1- Intervention Couloir -(1.1)----Etre----0,1-------------------| Etage -(1,1)----Etre----0,1---------------------| Batiment -(1.1)----Etre----0,1----------------------------------------------------------| Residence -(1,1)----Etre----0,1--------------------------------------------------------| Ce qui donnerait les tables suivantes : Lieu (l_id, attributs communs à tous les lieux) Intervention (int_id, int_id_lieu, int_date...) Lieu_interieur (li_id_lieu, attributs communs aux lieux intérieurs) Residence (rsd_id_lieu...) Batiment (btm_id_lieu, btm_id_residence...) Etage (etg_id_lieu_interieur, etg_id_batiment...) Couloir (clr_id_lieu_interieur, clr_id_etage...) Appartement (apt_id_lieu_interieur, apt_id_couloir...)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#5 | |
|
Invité de passage
![]() Inscription : juillet 2004 Messages : 3 ![]() |
Citation:
EDIT : j'en profite pour rajouter une question : nous avions prévu de typer le lieu, tu ne l'évoques pas. Pour toi, le fait d'avoir les autres tables liées suffit pour savoir le type ? Et sinon, finalement, il n'y aurait qu'un seul champ commun aux lieux "intérieurs". Cela vaut-il le coup d'avoir cette table intermédiaire puisqu'elle n'aurait qu'un champ ? Ou vaut-il mieux lier directement mes 4 finales à Lieu ? |
|
|
|
00
|
|
|
#6 | |||
![]() ![]() |
Citation:
Citation:
Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
Copyright © 2000-2012 - www.developpez.com