【发布时间】:2010-10-22 17:15:45
【问题描述】:
这个问题在我搜索的各个论坛中出现过几次,但没有一个提供简洁的解决方案。
如果我有以下表格:
User
+- id
+- username
+- password
Article
+- id
+- title
+- content
我想加入他们以确定谁创建了哪些文章,我可以简单地将列 user_id 添加到 Article 以用作参考。或者,我正在添加一个中间表来显示谁/何时/什么,例如:
User
+- ...
Article
+- ...
ChangeHistory
+- id
+- article_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
现在这很好,但是我正在开发的系统需要更加动态,因为可以轻松引入和集成新模块。所以现在如果我添加一个 Media 表,我需要在 Article 和 Media 之间拆分 ChangeHistory : p>
User
+- ...
Article
+- ...
Media
+- id
+- title
+- path
ArticleChangeHistory
+- id
+- article_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
MediaChangeHistory
+- id
+- media_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
随着许多模块的引入,这很快就会失控。每个模块都需要负责创建和管理它自己的 ChangeHistory 表。
TL;DR:我可以探索哪些实践来创建可以接收对多个其他不相关表的引用的中间表?我可以添加一个 *record_type* 字段,保存记录所属表的名称,但这很难看。我需要像“table ID”这样的东西来引用它来自的表。这样,当/如果添加或删除模块时,模型不会崩溃。
有什么想法吗?提前非常感谢。
【问题讨论】:
-
您认为“表 ID”比“记录类型”更好吗?
标签: sql mysql database-design foreign-key-relationship