mysql +noob + plusieurs tables - SQL/NoSQL - Programmation
Marsh Posté le 09-01-2007 à 11:48:35
en faisant un modèle de données qui prenne en compte ces contraintes...
Ce post peut t'aider : http://forum.hardware.fr/hfr/Progr [...] m#t1480675
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
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
Marsh Posté le 09-01-2007 à 12:38:43
c'est cool, je réponds à des topics sans même être au courant
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.
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 mysql peut gere ca non?
merci
Marsh Posté le 09-01-2007 à 13:28:43
avoir une table image et images bonjour la confusion après à la relecture...
Marsh Posté le 09-01-2007 à 13:32:44
effectivement... j ai editer, sinon la syntaxe est correcte ?
merci
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.
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!
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)?
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.
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 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
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
Marsh Posté le 11-01-2007 à 11:29:54
- rtfm ( 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. |
- innoDB c'est mieux surtout si tu as un vieux mysql
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..
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.
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.