在我的搜索中,这个问题在各种论坛上已经出现过几次,但没有一个问题提供了一个简明的解决办法。
如果我有以下表格:
User
+- id
+- username
+- password
Article
+- id
+- title
+- content为了确定是谁创建了哪些文章,我想加入它们,我只需将user_id一栏添加到中作为参考。或者,我添加了一个中间表来显示谁/何时/什么,例如:
User
+- ...
Article
+- ...
ChangeHistory
+- id
+- article_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime这很好,但是我正在开发的系统需要更加动态,因为新的模块可以很容易地被引入和集成。因此,如果现在添加一个Media表,则需要将ChangeHistory拆分为文章和Media,具有:
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*字段,保存记录所属的表的名称,但这很难看。我需要一个类似于“表ID”的东西来引用来自它的表。这样,当/如果添加或删除模块时,模型就不会崩溃。
有什么想法吗?提前谢了。
发布于 2010-10-22 18:35:16
@Majid:我知道这可能是最合理的解决方案,但我希望找到一些更直观的方法,它可能会利用现有的DB参数,比如难以捉摸(而且显然不存在)表id (在我的例子中,它是引擎InnoDB用来描述表的某种内部引用)。
@沮丧:我想我要做这样的事情。我会继续调查各种可能性。
https://stackoverflow.com/questions/3999268
复制相似问题