我应该总是围绕外键设计吗?

时间:2009-06-25 18:10:53

标签: database-design

例如,我有一个标签查找表,将标签连接到3种不同类型的表(ObjectTypes)。每个都有标签,但不共享。

所以我可以这样做

Tagid | ObjectType | ObjectId |

当我一起加入桌子时,我会在加入之前按对象类型进行过滤。

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

问题是......这是一件可怕的事吗?如果是这样的话?

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

1 个答案:

答案 0 :(得分:1)

不要考虑外键,考虑是否要在数据库级别强制实施引用完整性。如果没有RDBMS强制执行的引用完整性,您将不得不在应用程序中自行执行它,或者不遗余力地编写复杂的数据库约束来执行RDBMS已经以外键形式提供给您的内容。

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