数据库子表最佳实践

时间:2015-01-09 03:09:57

标签: sql relational-database

考虑以下假设情景:

ObjectA 1 - * ObjectB ObjectC 1 - * ObjectB ObjectD 1 - * ObjectB

是否有最佳做法是否要创建以下表格(多个到多个表格)......

对象A 对象B ObjectC ObjectD ObjectA_ObjectB ObjectC_ObjectB ObjectD_ObjectB

...对(具有多个可空列的单个子表)...

对象B    ObjectAID(可空)    ObjectCID(可空)    ObjectDID(可空)

我有一个案例,其中7个以上的对象可以有许多与之关联的ObjectB。

一个注意事项是,个人关系没有什么特别之处(即,没有任何属性,ObjectA和ObjectB之间的关系只有...否则我会直接找到多对多的表格)。

1 个答案:

答案 0 :(得分:0)

创建一个包含3列的表:

  • object_b_id
  • other_object_id
  • other_object_type

这样,所有引用都保存在一个表中,并且没有稀疏记录。您可以轻松地从任何对象连接到其注释,也可以从任何注释到其引用对象。这是一个如何工作的简单例子。

Select * from ObjectX as x
Join ObjectBReferences as r
 on x.id = r.other_object_id and r.other_object_type = 'X'
Join ObjectB b
  on r.object_b_id = b.id

我自己实现了这种确切类型的东西,这是我从我使用过的商业软件中借用的设计模式。它也是rails中使用的标准“多态”方法,例如,和其他框架。