注意:我是开发人员...
我有一个资产表,其中有许多代码是第二个表 OutlineFiles 的外键。OutlineFiles 表将 Type 和 Code 作为主键。外键约束需要看起来像这样......
ALTER TABLE "dbo"."Assets"
ADD CONSTRAINT "Locations" FOREIGN KEY ( "LN", "LocationCode" ASC )
REFERENCES "dbo"."OutlineFiles" ( "Type", "Code" );
ALTER TABLE "dbo"."Assets"
ADD CONSTRAINT "CostCentre" FOREIGN KEY ( "CC", "CostCentreCode" ASC )
REFERENCES "dbo"."OutlineFiles" ( "Type", "Code" );
因此,将通过“LN”和“CC”的固定值与轮廓表建立关系。或者将数据库更改为有两个表并删除 OutlineFiles 表上的 Type 列会更容易吗?我在 Sybase 中尝试这样做,但我们支持许多数据库。
听起来您有一个“一个真正的查找表”(OTLT)反模式,并且您在此表中混合实体。您已经找到了为什么这不是一个好主意:
您上面的示例代码令人困惑(同一 Code 列有多个父级),所以我会告诉您我的理解
如果您有 30 个要查找的代码,您将有 30 个查找表:这是正确的。
如果您坚持使用 OTLT,则必须添加额外的列以将类型存储在 Assets 中并将它们 FK 到您的 OTLT。我不会这样做的。
或者使用触发器来维护正确的代码。我也不会这样做。