拥有一个包含外键的复合主键是不是一个坏主意?

Is it a bad idea to have a composite primary key that contains a foreign key?

我正在设计一个数据库,有下面两个表:

可以看出,t_model_version它的PK是复合PK。 PK的字段部分之一也是FK(t_model的PK)。我想知道这是好事还是坏事?我想避免以后遇到我无法预见的困难...

t_model 持有不同的模型(例如不同的 models/functional 形式来预测宏观经济增长)。 t_model_version 保存每个模型的版本号(例如,不同版本的模型意味着保留函数形式但系数估计已更新)。

编辑:我的问题不是关于如何在感兴趣的领域已经是复合PK的一部分时添加FK,但这是否是一个好习惯。因此,我的问题不是 Composite Primary Key + Foreign Key 的重复。

只要在你找到它们的地方声明它们,这样 DBMS 就可以强制执行它们——除非其他声明已经暗示——除非你必须声明一个 PRIMARY KEYUNIQUE NOT NULL 列列表,它被引用一个 FOREIGN KEY.

当列不能为 NULL 时声明 NOT NULL。当子行值唯一且不为空时声明 PRIMARY KEYUNIQUE NOT NULL(并且不包含较小的此类子行,这意味着)。声明剩余的 UNIQUE 子行(不包含较小的子行,这意味着)。当子行值必须作为 PRIMARY KEYUNIQUE NOT NULL 值出现在别处时声明 FOREIGN KEY(并且 FOREIGN KEY 的链还没有这样说)。然后,如有必要,声明由 FOREIGN KEYs.

引用的剩余子行

PS 担心你学到的每一种概念组合是没有用的。阅读有关信息建模和关系数据库的信息以学习良好的设计。

这很好——很常见,即使你使用的是自然键。如果您使用代理键,则没有必要。

最大的问题是,如果 FK 字段在您的数据中也可能为空,因为它可能会导致唯一性问题。但是,鉴于您的字段结构,我发现您在任何情况下都不太可能在该字段中允许空值。