2012-11-13 3 views
0

J'ai un projet avec une base de données MySQL, et j'aimerais pouvoir télécharger différents jeux de données. Dites que je construis un agrégateur d'avis de restaurant. Donc, nous aimerions continuer à ajouter toutes les sources de critiques de restaurants que nous pourrions mettre la main sur, et garder toutes les informations.Schéma RDBMS pour les colonnes inconnues

J'ai une table review_sources

========================= 
| id | name    | 
========================= 
| 1 | Zagat   | 
| 2 | GoodEats Magazine| 
| ...     | 
| 50 | Allergy News  | 
========================= 

Maintenant que j'ai un commentaire de table

===================================================================== 
| id | Restaurant Name  | source_id | Star Rating | Description | 
===================================================================== 
| 0 | Joey's Burgers  | 1   | 3.5   | Wow!  | 
| 1 | Jamal's Steaks  | 1   | 3.5   | Yummy!  | 
| 2 | Jenny's Crepes  | 1   | 4.5   | Sweet!  | 
| ....                | 
| 253| Jeeva's Curries  | 3   | 4   | Spicy!  | 
===================================================================== 

Supposons maintenant que quelqu'un veut ajouter des avis de « Allergy Nouvelles », ils ont un champ « fruits à coque gratuit". Ou une source d'examens pourrait décrire le degré de conformité kashrut, ou la conformité halal ou la convivialité végétalienne. En tant que concepteur, je ne connais pas les champs optionnels possibles que pourraient avoir les futures sources de données. Je veux être en mesure de répondre aux questions:

  • Quels sont tous les champs des avis sur Zagat?
  • Pour la révision id = x, quelle est la valeur du champ optionnel "végétalien"?

Comment puis-je concevoir un schéma capable de gérer ces sources de données disparates et de répondre à ces requêtes? Mes raisons pour ne pas aller à NoSQL sont que je veux certains types de normalisation, et que cela fait partie d'un projet MySQL existant.

Répondre

0

J'utiliserais une relation many-to-many avec une table contenant un review_id, un field (par exemple "vegan-friendly") et la valeur du champ. Alors bien sûr une table reviews_fields pour mapper l'un à l'autre.

Cheers

Questions connexes