Voilà, j'ai un problème qui concerne plus mysql, mais comme c'est souvent
utilisé conjointement avec PHP, je me permet de le poster ici...
Mon idée est toute simple : je veux développer un grande base de données
produits différents qui auront chacuns leurs propriétés différentes, donc
des champs différents..
Comme je me vois mal créer autant de tables qu'il y a de types de produits..
j'ai pensé faire des champs dynamiques... Je ne vais pas créer une table
Ampoules, Tondeuses, Voitures,ect.. mais 3 tables :
- type_produit (code,libelle)
- type_produit_champ (nom,type,----type_produit---)
- produit_valeurs (id_produit,----type_produit_champ---,valeur)...
En fait, j'ai un problème avec mon champ valeur..
Ce champ valeur, c'est lui qui contiendra toutes les données du produit
(nom, description, prix, ect.....) Le problème c'est qu'il n'y aura aucun
type de donnée similaires.. Donc, oour qu'il s'adapte à tous les cas, j'ai
du mettre un "blobtext"... Mais, mettre un blobtext pour stoker par exemple
un booleen (0-1), c'est pas super optimisé.. et je risque d'avoir une bdd
super monstrueusement lente non ???
Comment puis-je sortir de ce pétrin ?? En rajoutant dans ma table
"produits_valeurs" différents type de champs valeurs..
Par exemple,
- produit_valeurs (id_produit,----type_produit_champ---, valeur_int,
valeur_varchar, valeur_text)...
et de mettre la valeur juste dans le champ en question et de laisser les
autres vides.. (Ex, si mon champ est par exemple "Puissance de l'ampoule",
remplir juste valeur_int, et laisser les autres vides...?)..
Comme je me doute bien de pas avoir inventé un nouveau systeme de
conceptualisation... j'aimerai bien savoir comment ce problème est résolu
habituellement...
Merci merci merci aux ptits génis qui pourront sortir de leur lampe pour
m'éclairer un peu !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Spontex
Fr. wrote:
Voilà, j'ai un problème qui concerne plus mysql, mais comme c'est souvent utilisé conjointement avec PHP, je me permet de le poster ici...
Mon idée est toute simple : je veux développer un grande base de données produits différents qui auront chacuns leurs propriétés différentes, donc des champs différents.. Comme je me vois mal créer autant de tables qu'il y a de types de
produits..
j'ai pensé faire des champs dynamiques... Je ne vais pas créer une table Ampoules, Tondeuses, Voitures,ect.. mais 3 tables : - type_produit (code,libelle) - type_produit_champ (nom,type,----type_produit---) - produit_valeurs (id_produit,----type_produit_champ---,valeur)...
Salut, En effet, c'est un choix possible, mais il faut bien peser le pour et le contre : ça risque de ne pas être très très optimisé ensuite pour faire des jointures, pour mettre des index sur certains champs et pas sur d'autres, etc. Tu vas en plus nous sortir une table liste_relations (nom, type_produit, type_produit, cardinalité) et une table relation(id_relation, produit1, produit2), etc... on peut aller très loin comme cela !
Dans le même style, je soumets le problème suivant : j'ai une table films, une table news, une table dvd, et je voudrais pouvoir associer une date de création d'enregistrement, une date de dernière modification, et le pseudo du créateur pour chacune de ces données.
L'idée la plus simple est une table : history(id, type_objet, id_objet, pseudo, dateCreation, dateModif)
avec des enregistrements du type : (1, 'film', 100, 'spontex', '2004-07-22', '2004-07-23)
Mais je crois que ça "casse" la troisième forme normale d'avoir le nom d'une table dans une autre table.
L'autre solution, c'est d'avoir une table history_film, une table history_news, et une table history_dvd, mais alors pas évident de connaître les derniers objets, tous types confondus insérés par spontex !
J'ai aussi sur DvdToile un forum, où chaque message peut être associé à un film, une news, un dvd, un artiste, etc. Actuellement j'ai une table : Message(id, type_objet, ref_objet, title, body, author, ........) avec à chaque fois le nom d'une table et un identifiant désignant l'objet en question.
Quelle est la "meilleure" méthode concernant ces problèmes "transversaux" (un besoin commun à plusieurs tables, pour lequel on ne souhaite pas de duplication) ?
Merci !
Fr. wrote:
Voilà, j'ai un problème qui concerne plus mysql, mais comme c'est souvent
utilisé conjointement avec PHP, je me permet de le poster ici...
Mon idée est toute simple : je veux développer un grande base de données
produits différents qui auront chacuns leurs propriétés différentes, donc
des champs différents..
Comme je me vois mal créer autant de tables qu'il y a de types de
produits..
j'ai pensé faire des champs dynamiques... Je ne vais pas créer une table
Ampoules, Tondeuses, Voitures,ect.. mais 3 tables :
- type_produit (code,libelle)
- type_produit_champ (nom,type,----type_produit---)
- produit_valeurs (id_produit,----type_produit_champ---,valeur)...
Salut,
En effet, c'est un choix possible, mais il faut bien peser le pour et le
contre : ça risque de ne pas être très très optimisé ensuite pour faire
des jointures, pour mettre des index sur certains champs et pas sur
d'autres, etc.
Tu vas en plus nous sortir une table liste_relations (nom, type_produit,
type_produit, cardinalité) et une table relation(id_relation, produit1,
produit2), etc... on peut aller très loin comme cela !
Dans le même style, je soumets le problème suivant : j'ai une table
films, une table news, une table dvd, et je voudrais pouvoir associer
une date de création d'enregistrement, une date de dernière
modification, et le pseudo du créateur pour chacune de ces données.
L'idée la plus simple est une table :
history(id, type_objet, id_objet, pseudo, dateCreation, dateModif)
avec des enregistrements du type : (1, 'film', 100, 'spontex',
'2004-07-22', '2004-07-23)
Mais je crois que ça "casse" la troisième forme normale d'avoir le nom
d'une table dans une autre table.
L'autre solution, c'est d'avoir une table history_film, une table
history_news, et une table history_dvd, mais alors pas évident de
connaître les derniers objets, tous types confondus insérés par spontex !
J'ai aussi sur DvdToile un forum, où chaque message peut être associé à
un film, une news, un dvd, un artiste, etc.
Actuellement j'ai une table :
Message(id, type_objet, ref_objet, title, body, author, ........)
avec à chaque fois le nom d'une table et un identifiant désignant
l'objet en question.
Quelle est la "meilleure" méthode concernant ces problèmes
"transversaux" (un besoin commun à plusieurs tables, pour lequel on ne
souhaite pas de duplication) ?
Voilà, j'ai un problème qui concerne plus mysql, mais comme c'est souvent utilisé conjointement avec PHP, je me permet de le poster ici...
Mon idée est toute simple : je veux développer un grande base de données produits différents qui auront chacuns leurs propriétés différentes, donc des champs différents.. Comme je me vois mal créer autant de tables qu'il y a de types de
produits..
j'ai pensé faire des champs dynamiques... Je ne vais pas créer une table Ampoules, Tondeuses, Voitures,ect.. mais 3 tables : - type_produit (code,libelle) - type_produit_champ (nom,type,----type_produit---) - produit_valeurs (id_produit,----type_produit_champ---,valeur)...
Salut, En effet, c'est un choix possible, mais il faut bien peser le pour et le contre : ça risque de ne pas être très très optimisé ensuite pour faire des jointures, pour mettre des index sur certains champs et pas sur d'autres, etc. Tu vas en plus nous sortir une table liste_relations (nom, type_produit, type_produit, cardinalité) et une table relation(id_relation, produit1, produit2), etc... on peut aller très loin comme cela !
Dans le même style, je soumets le problème suivant : j'ai une table films, une table news, une table dvd, et je voudrais pouvoir associer une date de création d'enregistrement, une date de dernière modification, et le pseudo du créateur pour chacune de ces données.
L'idée la plus simple est une table : history(id, type_objet, id_objet, pseudo, dateCreation, dateModif)
avec des enregistrements du type : (1, 'film', 100, 'spontex', '2004-07-22', '2004-07-23)
Mais je crois que ça "casse" la troisième forme normale d'avoir le nom d'une table dans une autre table.
L'autre solution, c'est d'avoir une table history_film, une table history_news, et une table history_dvd, mais alors pas évident de connaître les derniers objets, tous types confondus insérés par spontex !
J'ai aussi sur DvdToile un forum, où chaque message peut être associé à un film, une news, un dvd, un artiste, etc. Actuellement j'ai une table : Message(id, type_objet, ref_objet, title, body, author, ........) avec à chaque fois le nom d'une table et un identifiant désignant l'objet en question.
Quelle est la "meilleure" méthode concernant ces problèmes "transversaux" (un besoin commun à plusieurs tables, pour lequel on ne souhaite pas de duplication) ?