[merise] Probleme d'heritage, MCD et sgbd mysql..

Probleme d'heritage, MCD et sgbd mysql.. [merise] - SQL/NoSQL - Programmation

Marsh Posté le 12-03-2007 à 18:54:05    

Voila j'ai modélisé en MCD ma base, et j'ai une entité generique "MEDIA" qui comportes les caracteristique commums(id, type..) et des sous_type qui heritent de cet entité generique tels que "VIDEO", "IMAGE", "SONS" qui disposent des caracteristiques propres d'ou le recours à l'heritage.
 
Mais le probleme c'est que lorsque je transpose pas ma base sous mysql, et que j'insert une ligne dans la table "VIDEO"(id=1 pour la premiere insertion car c'est en auto-increment), la table generique "MEDIA" ne se met pas à jour automatiquement, donc il peux bien y avoir des "id" identiques dans les trois tables hérités(video, image, sons).
 
Comment doit-je proceder pour regler le probleme? C'est à dire n'est pas le SGBD qui doit regler ça tout seul? ou dois-je obligatoirement le faire dans l'application appelant?

Reply

Marsh Posté le 12-03-2007 à 18:54:05   

Reply

Marsh Posté le 12-03-2007 à 19:11:51    

Je pense (mais je n'en suis pas sûr) que ça viendrait au format de ta base.
Tu est en MyISAM ou en InnoDB ?
MyISAM ne respecte aucune contrainte d'intégrité.
 
Edit: je pense que tu dois créer tes tables en format InnoDB et rajouter les contraintes qui vont bien ;)


Message édité par nucl3arfl0 le 12-03-2007 à 19:12:33
Reply

Marsh Posté le 12-03-2007 à 21:42:22    

MyISAM ou en InnoDB ?  
 
Je ne connais pas ces termes du tout lol, comment faire pour la créer en innodb, en faite je l'a crées sous phpmyadmin.
 
En faite j'ai pas spécialement besoin qu'il vérifie tout les contraintes etant donné que je sais ce que je fais en php, ce que je voudrait c'est qu'il fait bien la corespondance entre l'id de la table générique et de l'id des trois tables hérités. En gros que l'auto_increment se fait par rapport à la table générique.

Reply

Marsh Posté le 12-03-2007 à 21:48:41    

Alors ton MLD tu l'as fait toi même à la main ou tu l'as fait avec un script ?
Par exemple, Windesign te permet de générer le script SQL selon le SGBDR utilisé.
Je dis ça, parce que je connais pas la syntaxe de contraintes à utiliser dans le cas d'un héritage.  
 
Une chose est sûre, c'est que ces contraintes ne sont pas du tout respectées sur les tables au format MyISAM (normalement, quand tu cées dans phpmyadmin, tu peux choisir le format).
C'est dans la liste "Moteur de stockage". Là tu peux choisir divers format notamment MyISAM et InnoDB (MyISAM est par défaut).
 
Donc tu crées en prenant le format InnoDB. Ensuite, je pense que tu dois créer tes CONSTRAINTS pour l'héritage, et ça devrait marcher.

Reply

Marsh Posté le 12-03-2007 à 23:29:14    

Bah justement j'ai generer automatiquement le script à partir du MCD dans windesign, je suppose qu'il doit bien y avoir une option donc...
 
A defaut je ferais comme tu me le dis dans phpmyadmin...
 
Quand tu dis creer les CONSTRAINTS, c'est avec des triggers??
 

Reply

Marsh Posté le 13-03-2007 à 07:39:38    

Alors si tu as créé le script via Windesign, je pense (mais je ne suis pas totalement sûr) que tu as déjà tout ce qu'il faut pour l'héritage et les contraintes. Maintenant il faut bien évidemment que tu ais correctement fait ton MCD avec les contraintes d'intégrités.
 
Faut juste que tes tables soient en InnoDB.

Reply

Marsh Posté le 13-03-2007 à 14:02:23    

Ok merci  :)

Reply

Marsh Posté le 15-03-2007 à 11:21:13    

VIDEO, SON et IMAGE ont énormément d'informations redondantes.
 
Donc tu ne fais qu'une seule table MEDIA, avec comme clé "ID, TYPE_MEDIA". TYPE_MEDIA est un énum qui permet de différencier les vidéos, sons et images.
 
La table MEDIA contient la liste de tous les champs nécessaires à stocker chacun des types.
 
Genre :
nom_fichier (commun)
auteur (commun)
résolution (image + vidéo)
bitrate (son + vidéo)
 
C'est de loin la solution la plus simple et la plus propre.
 
Si tu utilises un SGBD objet, alors tu peux effectivement "étendre" ta table MEDIA en fonction de son contenu. Pour ce point, je ne peux pas t'en dire plus, je n'ai jamais essayé (et je ne suis qu'à moitié convaincu par l'utilité de la chose)

Reply

Marsh Posté le 16-03-2007 à 01:58:56    

Merci pour ton point de vue, je vois que tu à l'ai calé en sgbd.
 
Je pense que je vais opter pour ta solution parcque je rame toujours pour generer le scrip en innodb.
 
Voila ce que je veux faire en gros :  
 
http://md.dia.free.fr/mcd.JPG
 
Finalement c'est pas SONS mais texte, mais pourquoi : comme clé "ID, TYPE_MEDIA" et non seulement le id?

Reply

Marsh Posté le 16-03-2007 à 02:15:02    

Voila j'ai essayé de reediter, voila ce que ça donne :  
 
http://md.dia.free.fr/mcdv2.JPG
 
Donc le probleme c'est pour l'entite "COMMENTAIRE_MEDIA" qui disposent des clés entrengeres de l'entité media et texte ce qui posera probleme surtout qu'elle est relative. Ou me conseil tu de refaire une autre table de commentaire comme "COMMENTAIRE_TEXTE" pour l'entité texte afin d'eviter ce probleme?

Reply

Marsh Posté le 16-03-2007 à 02:15:02   

Reply

Marsh Posté le 16-03-2007 à 02:34:47    

MagicBuzz a écrit :

VIDEO, SON et IMAGE ont énormément d'informations redondantes.
 
Donc tu ne fais qu'une seule table MEDIA, avec comme clé "ID, TYPE_MEDIA". TYPE_MEDIA est un énum qui permet de différencier les vidéos, sons et images.
 
La table MEDIA contient la liste de tous les champs nécessaires à stocker chacun des types.
 
Genre :
nom_fichier (commun)
auteur (commun)
résolution (image + vidéo)
bitrate (son + vidéo)
 
C'est de loin la solution la plus simple et la plus propre.

C'est surtout la plus correcte... [:aloy]
Pour la clé primaire, ID suffit, c'est une valeur unique auto-incrémentée apparemment.
 
Sinon c'est quoi ton entité "Texte" ? Un media ou un commentaire ? :pt1cable:  
 
PS : renomme tes attributs stp... Aucun intérêt à appeler tes attributs "num_aut", "login_aut", "mdp_aut" quant ils appartiennent tous à l'entité Auteur, même plus tard pour écrire tes requêtes. Soit tu connais le modèle sur lequel tu bosses, soit tu le connais pas.

Reply

Marsh Posté le 16-03-2007 à 12:08:39    

Texte c'est du texte(poési, un extrait de roman etc..) qui fait aussi l'objet de commentaire.
 
LE probleme c'est que la table commentaire_media est relatif à deux table distincte!! Comment faire?

Reply

Marsh Posté le 19-03-2007 à 21:24:23    

Considérer Texte comme un média, ce qui est le cas (au même titre que son/image/vidéo)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed