我正在设计一个数据库,并有以下两个表:
t_model
(包含字段:model_id
(PK),model_name
)t_model_version
(包含字段:model_id
(PK,FK),model_version
(PK),start_validity_date
,end_validity_date
)可以看出,t_model_version
它的PK是复合PK。 PK的一部分字段也是FK(t_model
的PK)。我想知道这是好事还是坏事?我想避免以后遇到困难,我还不能预见......
t_model
拥有不同的模型(例如,不同的模型/函数形式来预测宏观经济增长)。 t_model_version
保存每个模型的版本号(例如,模型的不同版本意味着保留了函数形式,但系数估计已更新)。
编辑:当感兴趣的字段已经是复合PK的一部分时,我的问题不是关于如何添加FK,而是这是一个好的做法。因此,我的问题不是Composite Primary Key + Foreign Key的重复。
答案 0 :(得分:1)
只需在找到它们的位置声明它们,以便DBMS可以强制执行它们 - 除非已经被其他声明暗示 - 除非您必须声明PRIMARY KEY
或UNIQUE NOT NULL
列列表由{引用{1}}。
当列不能为NULL时,声明FOREIGN KEY
。当子行值唯一且不为空时(并且不包含较小的此类子行,这将暗示),声明NOT NULL
或PRIMARY KEY
。声明剩余的UNIQUE NOT NULL
子行(不包含较小的子行,这意味着它)。当子行值必须显示在UNIQUE
或FOREIGN KEY
值的其他位置时,我们会声明PRIMARY KEY
(并且UNIQUE NOT NULL
的链并不是这样说的)。然后,如有必要,声明FOREIGN KEY
s引用的剩余子目录。
答案 1 :(得分:1)
最大的问题是,如果FK字段在数据中也可能为空,因为它可能会导致唯一性问题。但是,根据您的字段结构,我发现在任何情况下都不可能允许该字段中的空值。
答案 2 :(得分:0)
如果您使用自然键,那很好 - 甚至是常见的。如果您使用代理键,则没有必要。