说我有一个ER模型
_____________
| E2 |
|_____________|
| | |
| | |
A21* A22 A23*
其中A21和A23是主键。
这是否意味着E2的主键是
PRIMARY KEY(A21,A23)?
如果是这样,那么下图中的区别是什么。
_____________
| E2 |
|_____________|
| | |
| | |
[]---|----[]---[]
| | |
| | |
A21* A22 A23*
其中[]表示主键组合。 这与上图和主键相同 主要关键(A21,A23)?
然后,基于第一个图,应该有SQL代码,可以声明 参考文献E2(A21)和参考文献E2(A23)存在? 或者我们是否必须始终引用表中的所有主键?
我希望我的问题很清楚。
答案 0 :(得分:1)
我不认识你正在使用的图表符号(用星号指定键)。通常在ER图中,键属性带下划线(Chen表示法)或通过一行(IDEF1X)与其他属性分开。
大多数ER符号的一个限制是它们不容易显示多个候选键。通常只显示每个实体的一个密钥(“主密钥”)。所以我猜想如果你的图表上显示了多个关键属性,那么它们可能都是同一复合键的一部分。
外键只能引用整个候选键,而不是键的一部分。
答案 1 :(得分:0)
图片最初来自 this question/answer ,我将用它来说明几个基本点。
外键引用完整的主键。
ER非常擅长表示复合键。
有很多不错的ER工具(一些开源) - 使用一个。
查看Answer
表
create table Answer (
SurveyID integer
, QuestionID integer
, OfferedAnswerID integer
, PersonID integer
, OtherText varchar (2000)
);
alter table Answer
add constraint pk_answer
primary key (SurveyID, QuestionID, OfferedAnswerID, PersonID)
, add constraint fk2_answer
foreign key (SurveyID, QuestionID, OfferedAnswerID)
references Survey_Question_Answer (SurveyID, QuestionID, OfferedAnswerID)
, add constraint fk1_answer
foreign key (PersonID) references Person (PersonID)
;
答案 2 :(得分:-1)
假设我正确理解了你的问题,那个表的sql将是
创建表AKS.E2 ( a21号码, a22号码, a23号码 );
ALTER TABLE AKS.E2 ADD( 约束E2_PK 首要的关键 (a21,a23));
即使它们引用了复合主键的部分键,也可以使用REFERENCES E2(A21)或REFERENCES E2(A23)等外键约束。