|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Gratien Inscription : octobre 2009 Messages : 70 ![]() |
Bonjour,
Attention débutant inside Je modélise actuellement une base de données pour une application avec les tables suivantes : ![]() Je souhaite représenter le fait qu'un afficheur peut être lié à un emplacement ou à un code géo ou à un groupe de sortie ou à un ensemble. L'ajout de la clef NO_AFFICHEUR dans chacune des tables ne me parait pas propre et surtout pas du tout évolutif. Si je souhaite lier un afficheur à une table autre de mon MCD (il est beaucoup plus vaste), alors je serai obligé de modifier ma base... Y a t il une solution élégante de faire cela ??? Merci ! |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
Il suffit d'utiliser le principe de modélisation d'un héritage comme je l'indique dans cet article :
http://sqlpro.developpez.com/cours/m...tion/heritage/ certains outils de modélisation comme Power AMC ou Win Design implémente cela sans problème. A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#3 | |
|
Candidat au titre de Membre du Club
![]() Gratien Inscription : octobre 2009 Messages : 70 ![]() |
Citation:
Je connaissait la modélisation par héritage que j'avais étudié pour un autre projet. Très bon article au passage d'ailleurs. Cependant, en tant que dev c++, j'ai cette vieille habitude de croire que l'héritage s'applique si l'entité est une sorte de. Or ici, l'entité EMPLACEMENT, n'est pas une sorte d'AFFICHEUR mais elle peut avoir un afficheur. Donc je vois pas trop comment appliquer la méthode d'héritage dans ce cas... Vous est il possible d'être plus précis ? |
|
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
C'est votre afficheur ensemble qui est la racine des afficheurs spécialisés
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
01
|
|
|
#5 | |
|
Candidat au titre de Membre du Club
![]() Gratien Inscription : octobre 2009 Messages : 70 ![]() |
Citation:
La table afficheur_ensemble est une table d'association entre un afficheur et un ensemble (qui n'est pas représentée sur le schéma ici) elle n'est pas un afficheur spécialisé. Bon alors je pense que j'ai mal exprimé ma demande. Je reformule. J'ai le schéma suivant : ![]() Comment modéliser le fait qu'un emplacement, un code geo, un groupe de sortie ou un ensemble puissent avoir un afficheur ? Vous allez me dire que c'est simple, en mettant juste la clef de la table afficheur dans chacune des tables citées. Mais cela ne me parait pas judicieux et pas évolutif. J'ai d'autres tables dans mon modèle. Je ne le sais pas encore mais il se peut que je soit obligé de faire un lien entre d'autres tables de mon modèle et la table afficheur. Je souhaite faire un modèle qui prenne en compte tout de suite cette possibilité. Désolé pour le doublon mais j'ai toujours l'impression que je ne suis pas clair... Edit : j'ai volontairement omis les autres colonnes des tables. je suppose que l'indicateur important est que j'utilise toujours un champ int unique pour clef primaire dans toutes les tables de mon modèle. |
|
|
|
00
|
|
|
#6 | |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 131 ![]() |
Citation:
Il peut être lié à un seul emplacement ? Dans l'affirmative, tu peux rajouter dans la table Afficheur la colonne LinkTable et LinkPK. Sinon, crée une table Affichage, avec les colonnes FKafficheur, LinkTable et LinkPK Pas très propre, mais très générique... |
|
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Gratien Inscription : octobre 2009 Messages : 70 ![]() |
C'est effectivement très générique et c'est le but recherché.
Le ou est exclusif, oui. J'ai en effet la possibilité d'associer un afficheur a plus d'un emplacement. Je penche donc, comme vous me l'avez indiqué, pour une table supplémentaire d'association. Je vais continuer a regarder cela. Merci |
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 2 160 ![]() |
Mais quel est la cardinalité de votre relation entre Afficheur et un des composants ?
Afficheur-0,n-----Associer------1,1-Composant ? Sinon, concernant l'héritage : Il faut une entité supplémentaire qui ferai office de générateur de pk (voir peut-être certains attributs pourrai être déporté dedans) Code :
|
||
|
|
00
|
|
|
#9 | ||
|
Candidat au titre de Membre du Club
![]() Gratien Inscription : octobre 2009 Messages : 70 ![]() |
Citation:
Citation:
En fait la table ensemble sert a faire un regroupement de code geo multi niveau. C'est à dire qu'il est possible faire des groupes de code géo, qui eux même sont dans des groupe de groupes etc... Comme je ne connais pas le nombre de niveaux, je fait une représentation d'arbre intervallaire (voir l'article). Le truc c'est qu'a chaque ensemble, il est possible d'associer un afficheur... Le problème avec la solution d'héritage, c'est que les entités n'ont vraiment rien à voir entre elles. Si j'ai bien compris, dans cette solution, il faut que les tables en dessous aient la même clef que la table composant. Or je suis pas sûr que cela soit pertinent de dire que emplacement par exemple ait pour clef no_composant. |
||
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 2 160 ![]() |
Donc un code_geo n'est pas associé directement à un afficheur ?!
Faites un tour sur le forum de modélisation et posez clairement votre problématique ... http://www.developpez.net/forums/f62...sation/schema/ |
|
|
00
|
|
|
#11 | |
|
Candidat au titre de Membre du Club
![]() Gratien Inscription : octobre 2009 Messages : 70 ![]() |
Non pas toujours.... Certain codes géo n'ont pas d'afficheur, d'autre un afficheur et certains codes géo partagent le même afficheur. En revanche, un code géo ne peut pas avoir deux afficheurs.
Citation:
|
|
|
|
00
|
|
|
#12 | |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 131 ![]() |
Citation:
(pour ne pas qu'un même afficheur puisse être relié à un code déo et à un emplacement, par exemple) la table d'association Affichage ne contenant plus que les colonnes FKafficheur et LinkPK. C'est une solution non relationnelle, aucune integrité ne peut vérifier l'existence de LienPK dans la table visée par LinkTable (a moins de le faire par Trigger) ...mais c'est générique, facile (...et moche Sinon, la solution suggérée par punkoff est tout a fait envisageable, c'est dans ce cas la table Composant qui contiendrai la colonne LinkTable. C'est plus propre et tout aussi générique, mais il faut prendre en charge cette table Composant lors des Insert et Delete sur les tables CodeGéo, ensemble etc... Même si la clef no_composant n'a pas de sens sémantiquement, tu y gagnes tellement en fiabilité que ça en vaut la peine, il me semble. En bref, tu peux choisir d'être fainéant ou perfectionniste, mais pas puriste ! |
|
|
|
00
|
|
|
#13 | |||
|
Candidat au titre de Membre du Club
![]() Gratien Inscription : octobre 2009 Messages : 70 ![]() |
Citation:
Citation:
Citation:
Je suis plutôt du genre à être perfectionniste, même au détriment de la fainéantise ! Donc si j'ai bien compris, cela devrait donner un truc de ce genre : ? ![]() A noter que je commence a entrevoir d'autres modifications dans mon modèle. J'ai ajouté l'entité sortie et groupe sortie. Pourquoi j'ai ajouté cela ? Parce que dans mon modèle, j'ai plein d'entités qui peuvent être regroupées de cette façon : code géo, sortie, emplacement pour ne citer qu'elles. Je me demande s'il n'est pas plus judicieux de faire la gestion d'arbre dans l'entité composant, comme cela j'aurais à la fois l'association avec les afficheurs et la gestion des groupes. Dans ce cas, comment ne pas grouper des entités de nature différentes entre elles. Par trigger ? Merci pour vos explications |
|||
|
|
00
|
|
|
#14 | |||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 2 160 ![]() |
Citation:
Donc ce n'est pas l'ensemble qui est associé à un afficheur mais bien ce code_geo père ? Ensuite vous travaillez avec SqlServeur, selon la version, celui-ci dispose de requête recurssive qui permettent de recréer une arboressance avec des niveau. Ceci avec une simple modélisation : Code :
Cf. cette discussion sur des messages (lire la 1ere page) : http://www.developpez.net/forums/d11...-commentaires/ |
|||
|
|
00
|
|
|
#15 | |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 131 ![]() |
Citation:
Peut-être les deux en même temps ? mais alors y a plus de question |
|
|
|
10
|
|
|
#16 | |||
|
Expert Confirmé
![]() Inscription : septembre 2006 Messages : 2 375 ![]() |
Citation:
Code :
un "afficheur à emplacement" est en fait un "afficheur à ensemble" dont le #(emplacement) == 1 idem pour "afficheur à sortie" : "afficheur à groupe de sortie" dont le #(sortie) == 1 Il faut que toutes les tables qui sont susceptibles de "fournir des composants" à l'afficheur partagent la PK de la table Composant dès le début, sinon c'est le choix du type de PK qui déterminera si le refactoring futur sera aisé ou non. La complexité apparente de la situation provient du fait que vous êtes confronté à deux formes de taxonomie : une "object oriented" autour de Composant : vous avez une hiérarchie de classes définies déterminant le contenu des objets (le Composant est un CodeGeo implique qu'il contienne des champs bien déterminés…) une "ontologique" au niveau de Afficheur : la classe est déterminée par le contenu, c'est parce que l'Afficheur contient des composants d'un certain type (et en certaine quantité) qu'il est considéré d'une certaine classe. (Rien n'empêche d'ailleurs que l'Afficheur soit polymorphe si vous changez d'avis à ce niveau-là…) |
|||
|
|
00
|
|
|
#17 | ||||
|
Candidat au titre de Membre du Club
![]() Gratien Inscription : octobre 2009 Messages : 70 ![]() |
Citation:
Citation:
|
||||
|
|
00
|
|
|
#18 | |
|
Candidat au titre de Membre du Club
![]() Gratien Inscription : octobre 2009 Messages : 70 ![]() |
Citation:
En réponse a ta question sous-entendue, la bonne indication est que l'afficheur peut etre partagé entre deux code géo. Donc le ou n'est pas exclusif. Encore désolé pour la confusion. |
|
|
|
00
|
|
|
#19 | |||||
|
Candidat au titre de Membre du Club
![]() Gratien Inscription : octobre 2009 Messages : 70 ![]() |
Citation:
Ce qui est compliqué pour moi c'est que j'ai érigé en dogme la règle de certains ici qui est de mettre un clef technique entière dans chaque table du modèle (la plupart du temps en auto incrément). Je connais les longs débats sur le sujet, et ce n'est pas le propos ici. Je me considère comme un débutant et je garde l'esprit ouvert sur le sujet. La solution proposée me semble aller à l'encontre de mon dogme (bêtement arbitraire). Citation:
Citation:
La plupart de ces notions sont propres à un langage objet je ne sais pas les représenter dans une base de données relationnelle. |
|||||
|
|
00
|
|
|
#20 |
![]() ![]() |
Je ne comprends rien à ces histoires d'afficheur partageant des codes géo.
Pourriez-vous expliquer concrêtement ce que vous essayez de modéliser ? Lisez la phrase en bleu de ma signature et appliquez son principe !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. 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 la suite Linux Mageïa ! |
|
00
|
Copyright © 2000-2013 - www.developpez.com