2010-10-22 11 views
1

Je développe un site web dans lequel seront classées des publicités. Dans chaque catégorie sera possible différents champs d'entrée (exemple: pour la voiture il y aura la taille du moteur, pour le chat il y aura une course). Je pense donc à construire une base de données pour gérer cela (j'utiliserai la base de données MYSQL). Une façon que vous pouvez voir dans l'image ci-joint, je sais que c'est aussi une solution pour créer une table pour chaque valeur de données, mais je me demande si cela va ralentir un site Web. Cette solution qui est en image va générer des champs vides dans la table sp_advertisement_value ce qui n'est pas bon aussi.Quelle est la meilleure solution de colonne dynamique pour la page Web de publicité?

Quelle est selon vous la meilleure solution? Peut-être qu'il y a autre chose? p.s. Voici un lien vers database market.

Répondre

1

Vous pouvez le stocker comme des paires nom/valeur (plus ou moins identiques à ce que vous avez décrit dans l'image jointe).

Un schéma simple serait une table ayant deux colonnes nom et valeur. Au lieu d'avoir une colonne pour chaque type de données, comme value_int, value_string, etc., une seule valeur de colonne dont le type de données peut être varchar (ou Text comme vous semble approprié). Vous pouvez effectuer toutes les conversions de données dans votre code d'application selon vos besoins. Vous pouvez également effectuer une normalisation ici, par exemple, au lieu d'enregistrer le nom, vous pouvez créer une table de recherche distincte nommée paramètres avec l'ID, le nom et d'autres informations connexes et avoir le paramètre id dans la table où vous stockez les valeurs des paramètres.

+0

Le stockage de colonnes et de valeurs dans des tables distinctes aurait de graves répercussions sur les performances de la base de données. Parce que le tri et le filtrage de l'ensemble de données nécessiteraient plusieurs JOINs et des requêtes SQL complexes. Je pensais que si MySQL VIEWs pouvait être utilisé, mais que MySQL VIEWS n'est pas indexé, et n'accélérerait pas le tri et le filtrage des données. Peut-être qu'il y a quelque chose comme des tables dynamiques ou des tables indexées temporaires dans MySQL? – Martins

+0

Je ne suis pas au courant de la prise en charge des tables dynamiques dans MySQL. Peut-être jetez un oeil à des trucs NoSQL - cela devrait vous aider. –