Php MySQL数据库设计-关系表

Php MySQL数据库设计-关系表,php,mysql,database,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_f

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

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

这方面的最佳实践是什么?我是否应该创建另一个表,将它们彼此链接:

[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**

或者还有其他方法吗?

通常,您会使用带有“to”和“from”引用的“link”表(或适合您的数据模型的任何引用)。这将允许一张照片链接到多个文章,反之亦然。

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

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

这取决于数据的关系类型。还请记住,您需要考虑它在未来的关系,因为更改模式可能会很痛苦

  • 如果一张照片总是一个事件的,从来没有超过一个,从来没有少于一个,那么你应该把你的事件id放在你的照片表中
  • 如果一个事件总是有一张照片,而不是更多,并且一张照片可以包含多个事件,那么您应该将照片id放入事件表中
  • 如果一个事件可以有多张照片,并且一张照片可以有多个事件,则创建第三个表
  • 如果每个事件都有一张照片,并且每张照片都是一个事件的照片,那么您可能正在进行属性拆分,并且可能这两个表实际上应该是一个。(我想不会的。)

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

媒体项一次只需连接到一个事件,不同的事件不必共享相同的媒体项。我提出的结构可以满足您当前的需求以及不同关系的可能性。扩展当前表只能满足您当前的需求。