2010-11-10 16 views
0

J'ai un site Web où les utilisateurs peuvent publier des photos, des vidéos, des liens, des articles et des événements.Conception de base de données MySQL - table des relations

Mais maintenant vient la partie difficile (pour moi): Je veux que les utilisateurs puissent joindre des photos, des vidéos et des liens vers des événements et/ou des articles.

Quelle est la meilleure pratique pour cela? Dois-je créer une autre table où je les relier les uns aux autres:

[media2articles] 
m_id, m_type, media_id, m_article_id 

[media2events] 
m_id, m_type, media_id, m_events_id 

ou devrais-je ajouter quelques champs à mes tables actuelles comme ceci:

[videos] 
v_id, v_file, **v_article_id, v_event_id** 

Ou est-il un autre moyen?

Répondre

0

En général, vous utiliseriez une table "link", avec des références "to_" et "from_" (ou tout ce qui est approprié pour votre modèle de données). Cela permettra à une photo d'être liée à plus d'un article, ou vice-versa.

0

Si un élément multimédia peut être associé à différents événements et que différents événements peuvent partager le même élément multimédia, vous devez disposer d'une table supplémentaire pour décomposer la relation N: M entre les deux tables en cours.

+0

Les éléments multimédias doivent uniquement être connectés à 1 événement à la fois, et différents événements ne doivent pas partager les mêmes éléments multimédias. – PinkFloyd

+0

La structure que j'ai proposée peut répondre à vos besoins actuels et à la possibilité de relations différentes. L'extension des tables actuelles répondra uniquement à vos besoins actuels. – symcbean

0

Je créerais les tables "médias" pour cela et les relier. Ajouter des colonnes à la table existante est une conception terrible. Vous ne pourrez pas prendre en charge les relations 1: n sauf si vous continuez d'ajouter plus de colonnes à la table.

1

Cela dépend du type de relation que vos données ont. Gardez aussi à l'esprit que vous voulez penser à la relation que vous aurez à l'avenir, car changer le schéma peut être douloureux.

  • Si une photo est toujours d'un seul événement, jamais plus d'un, jamais moins d'un, alors vous mettriez votre identifiant d'événement dans votre tableau de photos.
  • Si un événement a toujours une photo, jamais plus, et qu'une photo peut contenir plusieurs événements, vous devez placer l'identifiant de la photo dans votre table d'événements.
  • Si un événement peut contenir plusieurs photos et qu'une photo peut contenir plusieurs événements, vous créez une troisième table.
  • Si chaque événement comporte une photo et que chaque photo correspond à un événement, vous pouvez alors procéder à une division d'attributs, et les deux tables devraient peut-être en être une. (Je suppose ne pas.)

Ceci est la modélisation relationnelle de base; la lecture sur elle vous aidera grandement dans la conception de la base de données.

Questions connexes