Besoin d'infos sur les spécialisations [Modélisation BD] - SQL/NoSQL - Programmation
Marsh Posté le 15-06-2002 à 19:25:02
Masure a écrit a écrit : Voila je modélise une base de données, et celle ci nécessite pas mal de spécialisation si je veux suivre parfaitement la logique. Par manque d'experience, je ne sais pas quelles sont les consequences d'une abondance de spécialisation dans une base. J'aimerais savoir si ca ne pose pas de probleme au nivo rapidité et cohérence ds les requetes future. Sinon quelles sont les alternatives aux spécialisations ? |
Je suppose que tu parles de "subtyping", sinon tu peux ignorer le reste...
J'en ai aucune idée, je ne me suis jamais pênché sur la question et ca remonte à assez loin (l'année passé ) Mais tu pourrais à partir de ton modèle, génèrer qq tableaux. Et je dirais que si tes spécialisations génèrent plus de tableaux que sans spécialisations (donc si les différents attributs se retrouvent plus éparpiler à gauche et à droite) -> la performance sera moindre à cause des "cross joins" que tu devras utiliser pour chercher les valeurs dans les différents tableaux.
Une alternative aux spécialisations, c'est tout bêtement de reprendre les attributs du niveau au dessus et de les réutiliser en ajoutant les spécialisations que t'as besoin...
Avec quoi modèlises tu ta BD? ORM? ER? ...
Marsh Posté le 15-06-2002 à 19:34:46
euh g pas tout compris dslé, mais sinon je modelise avec windesign... je c pas si c connu
Marsh Posté le 15-06-2002 à 20:18:15
Masure a écrit a écrit : euh g pas tout compris dslé, mais sinon je modelise avec windesign... je c pas si c connu |
Connait pô, désolé... avec l'ORM (object role modeling) et ER (entity relationship), tu dessines des diagrammes (un peu dans le style de l'uml) et avec un programme (comme certaines versions de Visio de M$) tu sais génèrer des BD (dans le normal form que tu veux) à partir du diagramme.
Marsh Posté le 15-06-2002 à 20:41:27
ouais mon prog fait ca aussi, la spécialisation est modélise sous forme d'un triangle qui "aiguille" vers plusieurs propriétes en fonction de la valeur prise par une propriété maitresse.
Marsh Posté le 15-06-2002 à 22:20:26
Je vois, c'est dans le même style que les 2 autres (surtout ER, mais perso je trouve l'ORM bien mieux foutu).
Tu devrais essayer de génèrer ta BD avec les spécialisations et puis sans spécialisations. Tu regardes si les attributs de Majeur, de Mineur et Enfant (pour enfant j'emploierais plutôt Personne pour l'identifier ) se retrouvent plus ou moins éparpiller à travers les diffèrents tableaux (selon la méthode employée -> avec ou sans spécialisation). Au plus ces attributs seront éparpiller, au plus les requetes sur ces attributs prendront du temps à être éffectué (pcq il devra aller chercher des données dans différents tableaux). La requete sera aussi plus dure à formuler.
Pour enlever les spécialisations tu rajoutes tout les attributs d' Enfant à Majeur et Mineur (et tu vires Enfant) et tu rajoutes des liens vers Point de Rammassage. Je ne sais pas si WinDesign le permet par contre... (on dirait pas...)
En ORM tu peux génèrer des diagrammes intermediaire (des database schemas -> une représentation prôche des tableaux) avec les quels tu peux bidouiller pour optimiser les performances de ta BD.
Tout ca reste hypothétique, je ne sais pas si le fait d'utiliser des spécialisations ont une influence sur la base de donée. En tout cas moi j'utilisais assez bien de spécialisations et on ne m'a jamais dit que cela avait une influence sur la BD (et j n'ai jamais vérifier... pcq cela m'étonerait très fort. Les spécialisations sont la pour faciliter le boulot au niveau conceptuel et donc nôtre boulot. Ce serait bien môche que cela ait des répercutions sur la BD).
Marsh Posté le 15-06-2002 à 22:26:18
je crois que tu parles du mld, qui présente les tables je l ai généré d'apres le mcd du haut (avec spécialisation). Dis moi ce que tu en pense :
Marsh Posté le 16-06-2002 à 11:51:49
Une autre manière de le faire (j y avais pas pensé), c'est d'absorber tout de Majeur et de Mineur dans Enfant. Tu perderas qq "constraint" en chemin (comme le fait que Mineur a un lien de parenté avec Parent, mais Majeur pas). Donc tu rajoutes Numéro_Sécu, Groupe_Sanguin, Adresse, ID_Parent, Lien_Parenté à Enfant (tu vires Majeur et Mineur).
Fais ça et regardes cmt les différents attributs de Mineur, Majeur, et Enfant sont distribué à travers les différents tableaux.
J'ai ouvert un de mes bouquin ce matin, pour regarder cmt le mapping se faisait. Il y a 3 méthode: l'absorption -> les attributs des spécialisations (Majeur et Mineur) sont absorbé dans le tableau génèral (Enfant), la séparation -> les attributs des spécialisations sont mits dans des tableaux séparés (donc un tableau pour chaque spécialisation + un tableau avec les attributs de la génèralisation), une partition -> si les spécialisations forment une partition de la génèralisation: un tableaux pour chaque spécialisation et chacun de ces tableaux reprend les attributs de la génèralisation.
Comme tu peux le voir il y a 3 possibilité, je ne sais pas laquelle des 3 est exploité dans WinDesign (pour les autres non plus d'ailleurs). Essaies et tu veras...
ps: La spécialisation est utilisé pour explicitement mettre l'accent sur les rôles optionels. Si tu enleves les spécialisations tu ne sais pas éxprimer ce côté optionnel des chôses... à toi de voir cmt le traduction est fait (du diagramme vers les tableaux).
Marsh Posté le 16-06-2002 à 12:30:26
Je ne pense pas que l'absorption se fasse en fonction du logiciel, c'est pas plutot en fonction des cardinalités (0,n - 1,1 - 0,1) ?
Faudrait que je garde le coté optionnel, mais en fait c'est pas trop la rapidité qui va primer mais surtout le respect des informations (options) donc je pense que je vais garder mes spécialisations et générer comme ça. Si je vois que c'est la panique, je teste un autre modèle
Marsh Posté le 16-06-2002 à 12:48:51
Masure a écrit a écrit : Je ne pense pas que l'absorption se fasse en fonction du logiciel, c'est pas plutot en fonction des cardinalités (0,n - 1,1 - 0,1) ? Faudrait que je garde le coté optionnel, mais en fait c'est pas trop la rapidité qui va primer mais surtout le respect des informations (options) donc je pense que je vais garder mes spécialisations et générer comme ça. Si je vois que c'est la panique, je teste un autre modèle |
C'est en fonction de l'algorithme de conversion. Par exemple VisioModeler (un logiciel comme WinDesign) permet d'influencer l'éxècution de l'algorithme... j crois pas que les cardinalités ont qq chôse à voir.
L'absorption a un désavantages -> tu perds le côté optionnel de la chôse, puisque tout se retrouve dans un et même tableau.
J crois que garder les options est le mieux à faire et comme tu dis, si la performance en prend un coup -> tu changes ton modèle.
Marsh Posté le 16-06-2002 à 12:50:40
et bien vraiment merci pour tout, c'est pas evident de trouver qqun qui sy connait en modelisation ici, ca soulage d'avoir un autre avis !
Marsh Posté le 16-06-2002 à 13:02:39
Masure a écrit a écrit : et bien vraiment merci pour tout, c'est pas evident de trouver qqun qui sy connait en modelisation ici, ca soulage d'avoir un autre avis ! |
De rien, . C'est à cause de 2 de mes profs qu'ont travaillé sur l'ORM... un qui nous a soualer avec l'ORM (tu devrais voir, on dirait que WinDesign à pompé dessus ou le contraire ) et qui d'ailleurs a rajouté les spécialisations dans l'ORM (véridique)
Marsh Posté le 15-06-2002 à 18:26:14
Voila je modélise une base de données, et celle ci nécessite pas mal de spécialisation si je veux suivre parfaitement la logique. Par manque d'experience, je ne sais pas quelles sont les consequences d'une abondance de spécialisation dans une base.
J'aimerais savoir si ca ne pose pas de probleme au nivo rapidité et cohérence ds les requetes future.
Sinon quelles sont les alternatives aux spécialisations ?