Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
966 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Héritage ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Héritage ?

n°1691783
Gulien
Times are gone for honest men
Posté le 25-02-2008 à 10:13:38  profilanswer
 

Bonjour,
 
Je suis en train de faire un MCD relativement vaste où il y aura plusieurs héritages.
 
J'aimerais que ces héritages ne soient pas trop lourd de conséquence sur la programmation du code plus tard.
 
J'ai essayé de me renseigner sur le net, mais je ne trouve pas beaucoup de réponse, certains semble dire qu'il n'y a pas d'héritage en MySQL (qu'il faut une base PostgreSQL), certains semble contourner le problème en ne faisant qu'une table qui regroupe tous les champs des table mère et fille (beaucoup de champs vide dans ce cas, est-ce génant ?).
 
La base de donnée va être assez grosse, contenant des dizaines de milliers d'entregistrements (pour ces tables héritées) et des millions dans d'autres tables.
 
Qu'en est-il vraiment ?


Message édité par Gulien le 25-02-2008 à 10:13:51
mood
Publicité
Posté le 25-02-2008 à 10:13:38  profilanswer
 

n°1691789
skeye
Posté le 25-02-2008 à 10:17:52  profilanswer
 

Pour modéliser de l'héritage dans ta bdd il y a des solutions très simples - par exemple mettre l'id de la "table mère" dans la "table fille" en clé étrangère non nulle...mais la notion d'héritage n'existe pas directement.


Message édité par skeye le 25-02-2008 à 10:18:02

---------------
Can't buy what I want because it's free -
n°1692840
MagicBuzz
Posté le 26-02-2008 à 15:40:25  profilanswer
 

Les bases "objet" gèrent l'héritage. PostGreSQL supporte ce mode.
 
Cependant, je trouve ça passablement pourri, c'est un moyen goret selon moi de dénormaliser une base, et gérer salement des données hétérogènes.
 
Il vaut mieux avoir une table "de base" (qui contient les éléments de base de ton objet) et des tables filles contenant les éléments "étendus" de ton objet.
 
Exemple :
 
Type de base : TIERS (Nom, Prenom)
Type étendu1 : CONTACT (Nom, Prenom, Email)
Type étendu2 : FOURNISSEUR (Nom, Prenom, Email, Adresse, RIB)
 
Tu as donc 3 tables TIERS (ID, Nom, Prenom) ; CONTACT (TIERS_ID, Email) ; FOURNISSEUR (TIERS_ID, Adresse, RIB).
 
TIERS_ID étant des FK vers TIERS.ID.
 
Ainsi, tu retrouves par exemple un CONTACT de la façon suivante :
 

Code :
  1. SELECT TIERS.Nom, TIERS.Prenom, CONTACT.Email
  2. FROM TIERS
  3. INNER JOIN CONTACT ON CONTACT.TIERS_ID = TIERS.ID


 
Pas besoin donc de gestion "objet". Je ne me suis jamais vraiment penché sur les bases objet, mais honnêtement, je n'en vois pas l'intérêt mise à part transformer en usine à gaz quelquechose de simple.
 
Ensuite, rien ne t'empêche de dénormaliser ta base selon les besoins, en virant par exemple la table "CONTACT", estimant que 95% de tes TIERS sont des contacts, et que donc le champ EMAIL peut être rappatrié dans la table TIERS moyennant quelques lignes à NULL.

n°1692844
MagicBuzz
Posté le 26-02-2008 à 15:44:43  profilanswer
 

Ensuite, je ne vais pas m'attarder sur le sujet (j'en ai déjà parlé plein de fois), mais il y a la notion de "descripteurs" qui permet sans problème de créer virtuellemet une infinité de champs supplémentaires dans une table, avec une structure très simple, tout en permettant la segmentation par "type", ainsi que les contrôles de cohérences, etc.

n°2113709
Pascal le ​nain
Posté le 28-11-2011 à 20:12:07  profilanswer
 

Veuillez excuser cette exhumation de topic, mais je me pose la meme question quant au choix du SGBD (MySQL ou PostGreSQL), ou des notions d'heritage m'interesseraient beaucoup.
 

MagicBuzz a écrit :

Cependant, je trouve ça passablement pourri, c'est un moyen goret selon moi de dénormaliser une base, et gérer salement des données hétérogènes.


 
Cela m'a tout l'air de l'avis d'un vieux grincheux qui flatte ses vieux outils et insulte la jeunesse.
Qu'est-ce qui te permet d'affirmer que c'est une solution sale ?
Arrete-moi si je me trompe, mais j'imagine qu'en interne, PostgreSQL fait lui-meme la traduction avec plusieurs bases.
Il propose juste une couche d'abstraction supplementaire pour ne pas s'emmerder avec des jointures.
 
Merci pour vos conseils  ;)


Message édité par Pascal le nain le 28-11-2011 à 20:12:35
n°2113768
Oliiii
Posté le 29-11-2011 à 08:39:52  profilanswer
 

Une DB ce n'est pas une application orientée objet.
L'heritage a ca place dans une appli, pas dans une DB.
 
Ce n'est donc pas une reaction de vieux grincheux mais de quelqu'un qui a de l'experience et qui sait comment ne pas aller droit dans le mur.
 
Tu peux facilement faire ce que tu veux en utilisant plusieurs tables et des vues, sans exagerer avec les vues de vues.

n°2113790
Pascal le ​nain
Posté le 29-11-2011 à 10:19:30  profilanswer
 

Merci pour ta réponse.
Je comprends que l'héritage n'a pas sa place dans un SGBD, mais pourquoi en vouloir à un SGBD qui en fait un peu plus ?
Au niveau fonctionnel, performance, maintenance, etc , est-ce si mal que ca de l'utiliser, au delà des questions de principe de "pureté" ?


Message édité par Pascal le nain le 29-11-2011 à 10:20:59
n°2113819
rufo
Pas me confondre avec Lycos!
Posté le 29-11-2011 à 12:04:46  profilanswer
 

Je suis plutôt d'accord avec Oliii et la solution proposée par Magicbuzz : C'est comme ça que j'aurais fait aussi... Je vois pas trop l'intérêt de l'héritage dans une BD :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2113984
Oliiii
Posté le 30-11-2011 à 10:49:04  profilanswer
 

Le probleme est le meme qu'avec toutes les couches d'abstraction, si c'est utilisé raisonablement ca ne pose pas de probleme, mais quand on l'utilise serieusement on a un risque d'avoir des gros problemes de perfs parceque ca n'a pas ete prevu pour ca.
 
Le grand classique pour les probleme de perf dans une DB c'est que ca fonctionne bien au debut, puis la taille augmente pcq l'appli s'etoffe ou que les clients sont plus gros et puis du jour au lendemain plus rien ne fonctionne et c'est un cauchemard a resoudre.
 
C'est plus facil de faire un design correct de DB quand on a le minimum d'abstraction, car c'est tres tres rare que les couches d'abstraction fasse le travail correctement (c'est normal vu que ca doit rester generic).


Message édité par Oliiii le 30-11-2011 à 10:49:46
n°2113989
Mara's dad
Yes I can !
Posté le 30-11-2011 à 11:03:11  profilanswer
 

Il n'est jamais bon de s'appuyer sur une fonctionnalité "Spéciale" d'un SGBD.
Il vaut mieux rester le plus standard possible du point de vue SQL.
Ainsi, il sera possible de changer de SGBD assez facilement plus tard.
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le 30-11-2011 à 11:03:11  profilanswer
 

n°2114010
Pascal le ​nain
Posté le 30-11-2011 à 11:47:42  profilanswer
 

D'accord, merci pour vos conseils ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Héritage ?

 

Sujets relatifs
[MYSQL] Volume des enregistrements NULL ?[MySql] problème de décimales
glisser/déposer et MySQLDelphi 1 et Mysql
[mysql] select from *2 tables* where *pas jointées*[mySQL] structure de la base de données pour sondage multiples
[mysql] Aide pour l'activation[MySQL] Problème avec Jointure ( et plusieurs COUNT sur même table)
Moteur de recherche dans BDD MySQL[merise] Probleme d'heritage, MCD et sgbd mysql..
Plus de sujets relatifs à : [MySQL] Héritage ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR