2009-07-18 5 views
2

J'ai une table de produits avec 100000 produits et j'ai aussi une table utilisateur avec 5000 enregistrements. et supposons qu'un utilisateur peut nous donner des commentaires sur n'importe quelle combinaison de ces produits. Alors supposons qu'il choisit de comparer les produits 1,3,100,200,400,500 et ainsi de suite. (Il peut nous envoyer un autre commentaire sur d'autres produits)Stocker un tableau dans une chaîne (question des experts en base de données)

Alors voici ma question, je veux juste savoir ce qu'un concepteur de base de données expert penserait de cette situation où le nombre de produits et d'utilisateurs est grand. Une façon de stocker ces évaluations est dans une seule chaîne comme: 1 # 5 3 # 4 100 # 5 .... x # y signifie qu'il a donné y étoiles à produit avec id de x. Je peux charger cette vote_string dans mon script php par exemple et en extraire les détails.

Donc, la table de notation aurait probablement cette structure: id, user_id, vote_string

Une autre façon est de stocker ce retour dans cette structure:

vote Tableau: id, user_id, la date

vote_details Tableau: vote_id, product_id, vote ==> (vote_id, products_id) comme clé primaire et vote_id est une clé étrangère.

(ou peuvent ces 2 tables peuvent être compressés dans un seul tableau comme id, user_id, product_id, vote [id, user_id, product_id] comme clé primaire)

donc je suppose qu'il est très facile d'interroger dans le deuxième conception, mais il consomme plus d'espace et de temps pour chaque requête, même en cas de suppression du produit, il est préférable d'utiliser le second design. Qu'est-ce que tu ferais?

Toute idée est appriciée.

Répondre

6

vous ne voulez presque jamais aller sur la route de la concaténation des chaînes dans la base de données. Cela rend la vie vraiment pénible pour faire des requêtes - et aussi, pas vraiment la façon dont les bases de données sont conçues pour traiter les données. Pense que vous voulez votre deuxième approche.

Vous devez penser à des clés primaires et similaires {ie la même personne peut-elle voter deux fois pour un produit?}

+0

Bon point sur la concaténation. et oui il peut. Il peut presque envoyer de nombreux commentaires sur un produit comparé à d'autres séparément. – EBAG

+0

+1 Je suis entièrement d'accord. – Halvard

2

En le stockant comme une chaîne, comme 1 # 5 3 # 4 100 # 5, vous rendez la tâche plus difficile plus tard pour créer des rapports. Vous devez également effectuer une manipulation de chaîne chaque fois que vous avez besoin d'utiliser les données. Pour une structure simple comme celle-ci, je ne vois pas l'avantage.

Je voudrais aller à une table (id, userid, productid, vote), mais je suis sûr que deux est bien aussi.

2

Ehsan

Par concaténer vous venez de tuer une capacité db a de forcer l'intégrité ou à l'aide d'un index de recherche efficace si un utilisateur a voté pour un produit particulier.

Questions connexes