MySQL数据库设计 - 关系表

时间:2010-11-10 17:22:26

标签: php mysql database

我有一个网站,用户可以发布照片,视频,链接,文章和活动。

但现在是困难的部分(对我来说): 我希望用户能够将照片,视频和链接附加到活动和/或文章中。

这是什么最佳做法?我应该创建另一个表格,我将它们相互链接:

[media2articles]
m_id, m_type, media_id, m_article_id

[media2events]
m_id, m_type, media_id, m_events_id

或者我应该在我当前的表中添加一些字段,如下所示:

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

或者还有其他方法吗?

4 个答案:

答案 0 :(得分:1)

这取决于您的数据的关系类型。还要记住,你想要考虑它将来会有什么样的关系,因为改变架构会很痛苦。

  • 如果一张照片总是一件事,一件事永远不会超过一件,那么你就可以将你的事件ID放在你的照片表中。
  • 如果一个活动总是有一张照片,而不是更多,而且一张照片可以是多个活动,那么你就可以将照片ID放在你的活动表中。
  • 如果某个活动可以有多张照片,并且一张照片可能包含多个活动,那么您可以创建第三张照片。
  • 如果每个事件都有一张照片,而且每张照片都是一个事件,那么您可能正在进行属性分割,也许这两个表应该是一个。 (我猜不会。)

这是基本的关系建模;阅读它将极大地帮助您进行数据库设计。

答案 1 :(得分:0)

通常,您使用“链接”表,其中包含“to_”和“from_”引用(或任何适合您的数据模型的引用)。这样可以将照片链接到多个文章,反之亦然。

答案 2 :(得分:0)

如果一个媒体项可能与不同的事件相关联,并且不同的事件可能共享同一个媒体项,那么您需要一个额外的表来分解当前两个表之间的N:M关系。

答案 3 :(得分:0)

我会为此创建“媒体”表并链接它们。将列添加到现有表是一种糟糕的设计。除非您继续向表中添加更多列,否则您将无法支持1:n关系。