主键和ER模型

时间:2010-09-28 05:55:55

标签: sql database-design entity-relationship

说我有一个ER模型

 _____________
|     E2      |
|_____________|
  |    |    |
  |    |    |
 A21* A22  A23*

其中A21和A23是主键。

这是否意味着E2的主键是

PRIMARY KEY(A21,A23)?

如果是这样,那么下图中的区别是什么。

 _____________
|  E2         |
|_____________|
  |    |    |
  |    |    |
  []---|----[]---[]
  |    |    |
  |    |    |
 A21* A22  A23*

其中[]表示主键组合。 这与上图和主键相同 主要关键(A21,A23)?

然后,基于第一个图,应该有SQL代码,可以声明 参考文献E2(A21)和参考文献E2(A23)存在? 或者我们是否必须始终引用表中的所有主键?

我希望我的问题很清楚。

3 个答案:

答案 0 :(得分:1)

我不认识你正在使用的图表符号(用星号指定键)。通常在ER图中,键属性带下划线(Chen表示法)或通过一行(IDEF1X)与其他属性分开。

大多数ER符号的一个限制是它们不容易显示多个候选键。通常只显示每个实体的一个密钥(“主密钥”)。所以我猜想如果你的图表上显示了多个关键属性,那么它们可能都是同一复合键的一部分。

外键只能引用整个候选键,而不是键的一部分。

答案 1 :(得分:0)

图片最初来自 this question/answer ,我将用它来说明几个基本点。

  1. 外键引用完整的主键。

  2. ER非常擅长表示复合键。

  3. 有很多不错的ER工具(一些开源) - 使用一个。

  4. 查看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)
    ;
    

    alt text

答案 2 :(得分:-1)

假设我正确理解了你的问题,那个表的sql将是

创建表AKS.E2 (   a21号码,   a22号码,   a23号码 );

ALTER TABLE AKS.E2 ADD(   约束E2_PK  首要的关键  (a21,a23));

即使它们引用了复合主键的部分键,也可以使用REFERENCES E2(A21)或REFERENCES E2(A23)等外键约束。