2009-06-25 44 views
1

例如我有一个标签查找表将标签连接到3种不同类型的表(ObjectTypes)。每个都有标签,但不共享。我应该总是围绕外键设计吗?

所以我可以做到这一点

Tagid | ObjectType | ObjectId |

而当我将表格连接在一起时,我会在加入之前按对象类型进行过滤。

现在我知道这会破坏在ObjectId列上执行外键的能力,可能是三个表中的任何一个。

问题是..这是一件可怕的事情吗?如果是的话为什么

另一种选择是为每个对象创建查找表,除非有更好的方法。

+0

这可能是一个设计未来的例子,当我不应该。添加其他对象表变得更少的设计工作,但从长远来看,它可能会让事情变得更糟。 – efbenson 2009-06-25 18:43:28

回答

1

不要考虑外键,请考虑是否要在数据库级别强制实施参照完整性。如果没有RDBMS强制引用完整性,则必须自己在应用程序中强制执行它,或者用自己的方式编写复杂的数据库约束来完成RDBMS以外键形式提供的某些内容。

但实际上,你不会有任何理由在一个大表中存储三个概念表。仅仅因为它们具有相同的列,将多个表中的数据存储在同一个表中并不是一个好主意。它们具有相同的模式,但它们不是同一个表。