我有两张桌子:
第一个是这样的:
Person
first_name (primary key)
family_name (primary key)
age
[other things..]
第二个是:
Doctor
first_name
family_name
specialty
所以基本上,在表Person中,他们不能是2具有相同first_name
和family_name
的人。如果我使用phpmyadmin在primary key
上设置它们,那么这很有效。
我的问题是,现在我想要添加一个不是Doctor
的{{1}}。我已尝试在Person
和doctor.first_name
上设置外键约束,但它显然无法解决我的问题。
(不要让我使用id或者其他东西,我的表比这复杂得多,我不能使用id,它必须是带有复合主键的表。)
答案 0 :(得分:1)
你的措辞不准确。一个表不能有2个主键。但是,它可以包含复合(复合)主键,它由2列或更多列组成。
CREATE TABLE Person
( first_name
, family_name
, age
, ...
, PRIMARY KEY (first_name, family_name)
)
不考虑代理与自然键的讨论,当你有这样一个复合主键时,另一个表中的任何外键应该是复合词并引用你的复合主键:
CREATE TABLE Doctor
( first_name
, family_name
, specialty
, ...
, PRIMARY KEY (first_name, family_name)
, FOREIGN KEY (first_name, family_name)
REFERENCES Person (first_name, family_name)
)
这种外键约束,其中PRIMARY KEY
表(Doctor
)也是FOREIGN KEY
到另一个表(Person
)是常见的解决方案1::0..1
关系(也称为超类型/子类型)。