2011-09-11 9 views
3

Le titre pourrait être pas très précis, mais voici ce que je voudrais faire, et de demander des conseilsComment structurer une base de données pour stocker différentes valeurs

J'ai deux tables, l'une est dédiée à des artistes différents, l'autre pour différents genres musicaux. L'idée finale est d'assigner un ou plusieurs genres à un artiste.

Je pensais utiliser tbl_genre.ID et le stocker dans tbl_artist.genre mais cela ne fonctionnera pas (problèmes possibles lors de la recherche d'un genre spécifique dans tbl_artist en utilisant LIKE%%).

L'autre option est peut-être de créer une table 3 et de stocker tous les types de caractères pertinents pour un artiste dans une rangée séparée, mais cette solution semble "boiteuse", et je me demande s'il y en a une meilleure.

Merci.

Répondre

5

Il s'agit d'une relation très typique à plusieurs. Le genre a beaucoup d'artistes et les artistes peuvent avoir beaucoup de genres. Vous devez utiliser une troisième table 'join' pour accomplir ceci. Je l'appellerais quelque chose comme tbl_artists_genres et il n'aura que deux champs, artist_id et genre_id.

+0

Très typique je dirais. C'est la deuxième relation la plus fréquente après one-to-many. – GolezTrol

+0

N'oubliez pas de créer une clé primaire composite autour de artist_id et genre_id. – cdhowie

+0

Bon point. Mis à jour pour lire 'très' :) – rwilliams

2

Votre solution «lame» est correcte. Vous devez créer une table avec ArtistID et GenreID et ajouter une ligne à cette table pour chaque genre auquel un artiste appartient.

+0

Merci pour la réponse. – Boris

0

Une table de carte est une très bonne solution (ce que vous appelez "lame"). Une autre solution plus dénormalisée consiste à stocker tous les ID des genres dans la table des artistes dans un champ de table. Utilisez un format standard tel que JSON pour sérialiser et désérialiser ce champ.

Questions connexes