mysql +noob + plusieurs tables

mysql +noob + plusieurs tables - SQL/NoSQL - Programmation

Marsh Posté le 09-01-2007 à 00:31:29    

Salut a tous,
 
je doit faire une base de donnees d'image, dans la table de base il y a un champ categorie de type enum:
catégorie    enum('dessin', 'image', 'photo') ;
 
ensuite et ca la ou je vois pas trop comment faire pour optimiser le tout, j ai 4 champ qui varie en fonction de la categorie choisit:
par ex:
 
categorie dessin: taille , auteur style annee ...
categorie image: format, chose ,truc,bidule...
 
comment je fait pour permettre d ajouter des champs differents en fonction d un champ predefinit ?
Faut il creer des tables en fonction de chaque categories? si oui faut il ajouter des cles etrangeres?
 
merci
 
mysql 5.0 serveur debian.
 

Reply

Marsh Posté le 09-01-2007 à 00:31:29   

Reply

Marsh Posté le 09-01-2007 à 11:48:35    

en faisant un modèle de données qui prenne en compte ces contraintes... :o
 
Ce post peut t'aider : http://forum.hardware.fr/hfr/Progr [...] m#t1480675


Message édité par rufo le 09-01-2007 à 11:50:52
Reply

Marsh Posté le 09-01-2007 à 12:27:32    

Salut,
je suis aller voir ton lien c est un peu complexe pour mon ptit pb  :D  
je reexplique le but de la manoeuvre , je pense pas que ca doit etre trop compliquee mais je m y connais pas assez pour voir ca clairement...
 
en gros j ai une table image comme ca:
 
images (id, nom,categorie) -- voila la table image  
 
et en fonction des categories:
 
dessin (taille , auteur style annee) --categorie dessin
image: (format, chose ,truc,bidule) --categorie image
 
suis obliger de creer une table par categories?
si oui par quels champs les liés?(j ai lu qu on pouvait ce passer de cle etrangere sous mysql)?
 
merci de vos eclaircissements

Reply

Marsh Posté le 09-01-2007 à 12:38:43    

c'est cool, je réponds à des topics sans même être au courant :D
 
oui, tu crée une table par catégorie.
 
t'as donc une table "image", qui correspond à l'image "en général".
dedans t'aura un ID, un chemin d'accès et peut-être quelques autres infos communes (titre, uploadeur, gallerie, etc.)
 
ensuite, un champ "catérogie".
 
et effectivement une table "photo", une table "dessin" et une table "autrenomqueimageparcequecestdejapris".
 
leur identifiant sera simplement l'id de l'image dans la table principale. tu auras une foreign key photo(id) refenrences image(id) pour chaque table.

Reply

Marsh Posté le 09-01-2007 à 13:00:44    

salut,

 

ok donc ca donne un truc comme ca:

 


images (id, nom,categorie) -- voila la table image  
 
et en fonction des categories:
 
dessin (taille , auteur style annee,#id) --categorie dessin
photo: (format, chose ,truc,bidule,#id) --categorie image

 

#-->clé etrangere
 en fait #id est a la fois cle etrangere et a la fois cle primaire pour chaque categorie ?
merci d'oter mes doutes :hello: mysql peut gere ca non?

 

merci

 



Message édité par krifur le 09-01-2007 à 13:33:03
Reply

Marsh Posté le 09-01-2007 à 13:28:43    

avoir une table image et images :/ bonjour la confusion après à la relecture...

Reply

Marsh Posté le 09-01-2007 à 13:32:44    

effectivement... j ai editer, sinon la syntaxe est correcte ?
 
merci :jap:

Reply

Marsh Posté le 09-01-2007 à 13:52:13    

oui c'est ça. id sera à la fois pk et fk. mysql le gère très bien.
ce ne seront pas des auto-incrément. et ne tu auras des trous, c'est normal.

Reply

Marsh Posté le 10-01-2007 à 14:28:43    

petite precision,
 

Citation :

ce ne seront pas des auto-incrément


 
l id de la table images peut lui etre un auto increment, mais pas les id des "tables filles" photos et dessins?
c est cela ?
 
 
merci!

Reply

Marsh Posté le 10-01-2007 à 14:29:14    

c'est ça

Reply

Marsh Posté le 10-01-2007 à 14:29:14   

Reply

Marsh Posté le 10-01-2007 à 18:04:30    

ok merci,
mais en fait je comprends pas trop l utilites des cle etrangeres est ce que cela simplifie les requetes (insert select) passées a la BDD ou est ce que ca sert juste comme contrainte d integrité(il ne pourra pas y avoir 2 numero d index identiques pour les 2 categories photos et dessins par exemple)?
 

Reply

Marsh Posté le 10-01-2007 à 18:57:40    

pour simplifier, dans ton cas, tu devrais avoir ceci :
 
images (id, fichier, etc.)
dessin (id, images_id, auteur, etc.)
photo (id, images_id, modele_apn, etc.)
 
Hors, dans ton cas, un dessin n'est rattaché qu'à un fichier image. Idem pour une photo. Donc "images_id" est unique. Il peut être utilisé comme clé primaire, ce qui rend inutile les "id" dans "dessin" et "photo". Par contre, image_id ne sera pas séquenciel dans ces deux tables, puisqu'une même fichier est soit une photo, soit un dessin.
 
La FK quand à elle (donc dessin.images_id = images.id et photo.images_id = images.id) permet de lier physiquement le dessin ou la photo à l'image.
Ainsi, impossible de supprimer un enregistrement de "images" sans avoir au préalable effacé l'enregistrement "photo" ou "dessin" correspondant. De même, impossible de créer un enregistrement "photo" ou "dessin" qui ne référence pas un fichier existant.
 
Deplus, la FK est utile lors des requêtes récupérant des données à la fois de images et dessin par exemple, puisque le lien entre les deux est connu par le SGBD. Dans ton cas simple, c'est pas forcément très intéressant, mais dans un cas plus complexe, cela peut éviter au SGBD de s'emmêler les pinceaux et ralentir considérablement.

Reply

Marsh Posté le 11-01-2007 à 03:59:13    

ok magicbuzz, merci de ces reponses,
2 ptites questions avant d aller dormir...
par defaut les tables crees par mysql sont de quel type myIsam?
est ce qu on peut creer des cle etrangeres avec des myIsam ou il faut plutot un type innoDB?
 
question subsidaire :o tu penses quoi de ce site http://ondras.praha12.net/sql/demo/, j ai essayer de creer des cles etrangeres avec mais ca a pas l air d avoir fonctionner...
 
 
merci :hello:  

Reply

Marsh Posté le 11-01-2007 à 11:20:57    

- aucune idée
- aucune idée. je dirais qu'il vaut mieu être en innodb de toute façon
- ça a l'air pas mal comme truc :)

Reply

Marsh Posté le 11-01-2007 à 11:29:54    

- rtfm :o ( http://dev.mysql.com/doc/refman/4. [...] table.html )

Citation :

The ENGINE and TYPE table options take the storage engine names shown in the following table.
...
If a storage engine is specified that is not available, MySQL uses the default engine instead. Normally, this is MyISAM.
...


- innoDB c'est mieux surtout si tu as un vieux mysql

Reply

Marsh Posté le 11-01-2007 à 11:34:03    

innodb, me semble t'il, a bien plus de possibilités (plus de champs, taille des champs plus importante etc..), mais , revers de la médaille, est moins rapide..

Reply

Marsh Posté le 11-01-2007 à 12:38:42    

thx, j ai mysql  Ver 12.22 Distrib 4.0.24, for unknown-linux-gnu (mipsel)
 
du coup je vais passer en innodb.

Reply

Marsh Posté le 18-01-2007 à 10:28:21    

MySQL ver 12.22^^ ?

Reply

Sujets relatifs:

Leave a Replay

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