2010-09-28 104 views
0

說,我有一個ER模型主鍵和ER模型

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

,其中A21和A23是主鍵。

這是否意味着E2的主鍵將

PRIMARY KEY(A21,A23)?

如果是這樣,那麼下圖有什麼不同。

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

其中[]是主鍵組合的表示。 是否與上圖相同,主鍵是 PRIMARY KEY(A21,A23)?

然後,根據第一個圖,應該有SQL代碼,是否存在參考E2(A21)和參考E2(A23)的語句? 或者我們必須始終引用表中的所有主鍵?

我希望我的問題已經夠清楚了。

+0

看看您是否使用ER捕獲數據分析或數據庫設計?同樣的圖表工具可以用於任何一種。有些人沒有區分這兩者。 – 2010-09-28 12:04:42

回答

-1

假設我明白你的問題正確表的SQL會

CREATE TABLE AKS.E2 ( A21號,A22 號, A23號 );

ALTER TABLE AKS.E2 ADD( 約束E2_PK PRIMARY KEY (A21,A23));

即使引用了複合主鍵的部分鍵,也可以擁有引用E2(A21)或引用E2(A23)等外鍵約束。

+1

我不認爲你只能引用主鍵的一部分。 [來自維基百科](http://en.wikipedia.org/wiki/Foreign_key)「引用表中的列必須是引用表中的主鍵或其他候選鍵。」你會用哪個DBMS來做到這一點? – pascal 2010-09-28 06:59:02

+0

啊好的,所以我們應該使用第一個表,語句REFERENCES E2(A21)和REFERENCES E2(A23)不能存在right pascal?標準SQL中的 – ali 2010-09-28 07:01:23

+0

,並且在大多數DBMS中,您不能創建引用複合鍵的一部分的引用約束。他們必須在唯一性約束中完整地引用列的完整列表。 – sqlvogel 2010-09-28 07:43:44

1

我不承認您正在使用的圖表符號(用星號指定密鑰)。通常在ER圖中,關鍵屬性用下劃線表示(Chen表示法)或通過一行(IDEF1X)與其他屬性分隔。

大多數ER符號的侷限性之一是它們並不容易顯示多個候選鍵。通常每個實體只顯示一個鍵(「主鍵」)。所以猜測我會說如果你的圖上有多個關鍵屬性,那麼它們可能都是同一個複合關鍵字的一部分。

外鍵只能引用整個候選鍵,而不是鍵的部分。

0

該圖像是從this question/answer,我會用它來說明幾個基本點。

  1. 外鍵引用完整主鍵。

  2. ER在表示組合鍵方面非常出色。

  3. 有很多不錯的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) 
; 

alt text