2014-09-20 25 views
0

以此圖片爲例:enter image description here如何爲連接了兩個關係集的實體編寫create table語句?

**忽略ISA關係,因爲我理解這個概念。

我的問題是爲團隊創建表。我知道如何爲實體和關係創建表,但是我對如何創建與兩個關係集相關的Team的表有些混淆。

我可能的解決方案:團隊擁有SSN(來自教授)和SSN(來自GTAs,來自它的ISA)的屬性,我使用PRIMARY KEY(profssn,gtassn)來唯一標識團隊?如果我這樣做,我將如何成功建模on_team_1和on_team_2?我想過讓on_team_1擁有屬性SSN(因爲它是教授的主鍵),然後有兩個屬性,比如來自Team實體的team_profssn和team_gtassn。

難道這聽起來可行嗎?或者我完全缺少如何做到這一點?

回答

1

我認爲你需要一個擁有特定於團隊屬性的團隊表(NAME,至少),那麼你似乎需要一個TEAM_MEMBER表來模擬個人和特定團隊之間的關係。如果我理解了你的數據,我認爲TEAM_MEMBER只會有TEAM_NAME和SSN--儘管在委婉的稱之爲「真實世界」中,你無法逃避將SSN用於這樣的事情。例如,在我們的系統(大型國際零售商)中,任何個人身份識別數據(PID)都被掩埋得如此之深以至於大多數系統(包括我所使用的系統)完全無法看到任何此類數據。我建議,除非你的設計已經被鈦金屬激光蝕刻,否則你不應該使用SSN來代替任何東西 - 而是使用一個序列爲「人物ID」生成一個唯一的值。

CREATE TABLE TEAM 
(TEAM_NAME VARCHAR2(50) 
    CONSTRAINT PK_TEAM 
     PRIMARY KEY 
     USING INDEX); 

CREATE TABLE TEAM_MEMBER 
(TEAM_NAME VARCHAR2(50) 
    CONSTRAINT TEAM_MEMBER_FK1 
     REFERENCES TEAM(TEAM_NAME), 
    PERSON_ID NUMBER, 
    CONSTRAINT PK_TEAM_MEMBER 
    PRIMARY KEY(TEAM, PERSON_ID) 
    USING INDEX); 

祝你好運。