2016-01-04 49 views
0

我試圖創建一家軟件開發公司的數據庫(如自由時間的項目)關係在ER圖

我一直在掙扎與此相當長一段時間,它的時間來問你們的幫幫我。

我有3個實體,PROGRAMMER,PROGRAM和PLATFORM。程序員可以在很多平臺上工作,程序可以在很多平臺上工作,程序員可以在很多程序上工作。但是對於特定的程序,程序員只能在一個平臺上工作。所以我創建了另一個名爲WORKS的女巫,它具有以下屬性:Programmer_ID,Program_ID和Platform_ID。前兩個是主鍵,以符合上述規格。

現在,問題是從哪裏開始的:程序員可以監督一個程序(這不是強制性的)。監督小組會議和數據庫必須存儲每個計劃的team_ID和會議日期,也是Meeting_ID,但這是無關緊要的。

因此,我必須創建一個表,不允許重複對Programmer_ID - Program_ID,這樣同一個人不會再次在同一個組上,也必須有一個Team_ID女巫將是與Program_ID的編號相同,並且必須將Team_ID引用到MEETING表,以便我可以存儲它。我怎麼能做這樣的事情?

謝謝你的時間。

PS:這是我ER的外觀:ER Diagram

而且這是在MS SQL 2012導出的DLL:

CREATE 
    TABLE CUSTOMER 
    (
    Customer_ID NUMERIC (5) NOT NULL , 
    Name  CHAR (30) NOT NULL , 
    PR_Guy  CHAR (30) NOT NULL , 
    Phone  CHAR (20) NOT NULL 
) 
    ON "default" 
GO 
ALTER TABLE CUSTOMER ADD CONSTRAINT CUSTOMER_PK PRIMARY KEY CLUSTERED (
Customer_ID) 
WITH 
    (
    ALLOW_PAGE_LOCKS = ON , 
    ALLOW_ROW_LOCKS = ON 
) 
    ON "default" 
GO 

CREATE 
    TABLE KNOWS 
    (
    Programmer_ID NUMERIC (5) NOT NULL , 
    Prog_Lang_ID NUMERIC (3) NOT NULL 
) 
    ON "default" 
GO 
ALTER TABLE KNOWS ADD CONSTRAINT KNOWS_PK PRIMARY KEY CLUSTERED (Programmer_ID, 
Prog_Lang_ID) 
WITH 
    (
    ALLOW_PAGE_LOCKS = ON , 
    ALLOW_ROW_LOCKS = ON 
) 
    ON "default" 
GO 

CREATE 
    TABLE MEETING_DATE 
    (
    Meeting_ID NUMERIC (3) NOT NULL , 
        DATE DATE , 
    Program_ID NUMERIC (5) , 
    Programmer_ID NUMERIC (5) 
) 
    ON "default" 
GO 
ALTER TABLE MEETING_DATE ADD CONSTRAINT MEETING_DATE_PK PRIMARY KEY CLUSTERED (
Meeting_ID) 
WITH 
    (
    ALLOW_PAGE_LOCKS = ON , 
    ALLOW_ROW_LOCKS = ON 
) 
    ON "default" 
GO 

CREATE 
    TABLE PLATFORM 
    (
    Platform_ID NUMERIC (5) NOT NULL , 
    Name   CHAR (30) NOT NULL , 
    OS   CHAR (30) , 
    Latest_Update DATE NOT NULL , 
    Dev_Name  CHAR (30) NOT NULL 
) 
    ON "default" 
GO 
ALTER TABLE PLATFORM ADD CONSTRAINT PLATFORM_PK PRIMARY KEY CLUSTERED (
Platform_ID) 
WITH 
    (
    ALLOW_PAGE_LOCKS = ON , 
    ALLOW_ROW_LOCKS = ON 
) 
    ON "default" 
GO 

CREATE 
    TABLE PROGRAM 
    (
    Program_ID NUMERIC (5) NOT NULL , 
    Name  CHAR (30) NOT NULL , 
    Deadline DATE NOT NULL , 
    Customer_ID NUMERIC (5) NOT NULL 
) 
    ON "default" 
GO 
ALTER TABLE PROGRAM ADD CONSTRAINT PROGRAM_PK PRIMARY KEY CLUSTERED (Program_ID 
) 
WITH 
    (
    ALLOW_PAGE_LOCKS = ON , 
    ALLOW_ROW_LOCKS = ON 
) 
    ON "default" 
GO 

CREATE 
    TABLE PROGRAMMER 
    (
    Programmer_ID NUMERIC (5) NOT NULL , 
    First_Name CHAR (30) NOT NULL , 
    Last_Name  CHAR (30) NOT NULL , 
    Money_Status NUMERIC (1) NOT NULL 
) 
    ON "default" 
GO 
ALTER TABLE PROGRAMMER ADD CONSTRAINT PROGRAMMER_PK PRIMARY KEY CLUSTERED (
Programmer_ID) 
WITH 
    (
    ALLOW_PAGE_LOCKS = ON , 
    ALLOW_ROW_LOCKS = ON 
) 
    ON "default" 
GO 

CREATE 
    TABLE PROG_LANG 
    (
    Prog_Lang_ID NUMERIC (3) NOT NULL , 
    Name   CHAR (30) NOT NULL 
) 
    ON "default" 
GO 
ALTER TABLE PROG_LANG ADD CONSTRAINT PROG_LANG_PK PRIMARY KEY CLUSTERED (
Prog_Lang_ID) 
WITH 
    (
    ALLOW_PAGE_LOCKS = ON , 
    ALLOW_ROW_LOCKS = ON 
) 
    ON "default" 
GO 

CREATE 
    TABLE SUPERVISE 
    (
    Programmer_ID NUMERIC (5) NOT NULL , 
    Program_ID NUMERIC (5) NOT NULL , 
    Group_ID  NUMERIC (5) NOT NULL 
) 
    ON "default" 
GO 
ALTER TABLE SUPERVISE ADD CONSTRAINT SUPERVISE_PK PRIMARY KEY CLUSTERED (
Program_ID, Programmer_ID) 
WITH 
    (
    ALLOW_PAGE_LOCKS = ON , 
    ALLOW_ROW_LOCKS = ON 
) 
    ON "default" 
GO 

CREATE 
    TABLE WORKS 
    (
    Programmer_ID NUMERIC (5) NOT NULL , 
    Program_ID NUMERIC (5) NOT NULL , 
    Platform_ID NUMERIC (5) NOT NULL 
) 
    ON "default" 
GO 
ALTER TABLE WORKS ADD CONSTRAINT WORKS_PK PRIMARY KEY CLUSTERED (Programmer_ID, 
Program_ID) 
WITH 
    (
    ALLOW_PAGE_LOCKS = ON , 
    ALLOW_ROW_LOCKS = ON 
) 
    ON "default" 
GO 

ALTER TABLE KNOWS 
ADD CONSTRAINT FK_ASS_2 FOREIGN KEY 
(
Programmer_ID 
) 
REFERENCES PROGRAMMER 
(
Programmer_ID 
) 
ON 
DELETE 
    NO ACTION ON 
UPDATE NO ACTION 
GO 

ALTER TABLE KNOWS 
ADD CONSTRAINT FK_ASS_3 FOREIGN KEY 
(
Prog_Lang_ID 
) 
REFERENCES PROG_LANG 
(
Prog_Lang_ID 
) 
ON 
DELETE 
    NO ACTION ON 
UPDATE NO ACTION 
GO 

ALTER TABLE MEETING_DATE 
ADD CONSTRAINT MEETING_DATE_SUPERVISE_FK FOREIGN KEY 
(
Program_ID, 
Programmer_ID 
) 
REFERENCES SUPERVISE 
(
Program_ID , 
Programmer_ID 
) 
ON 
DELETE 
    NO ACTION ON 
UPDATE NO ACTION 
GO 

ALTER TABLE PROGRAM 
ADD CONSTRAINT PROGRAM_CUSTOMER_FK FOREIGN KEY 
(
Customer_ID 
) 
REFERENCES CUSTOMER 
(
Customer_ID 
) 
ON 
DELETE 
    NO ACTION ON 
UPDATE NO ACTION 
GO 

ALTER TABLE SUPERVISE 
ADD CONSTRAINT SUPERVISE_WORKS_FK FOREIGN KEY 
(
Programmer_ID, 
Program_ID 
) 
REFERENCES WORKS 
(
Programmer_ID , 
Program_ID 
) 
ON 
DELETE 
    NO ACTION ON 
UPDATE NO ACTION 
GO 

ALTER TABLE WORKS 
ADD CONSTRAINT WORKS_PLATFORM_FK FOREIGN KEY 
(
Platform_ID 
) 
REFERENCES PLATFORM 
(
Platform_ID 
) 
ON 
DELETE 
    NO ACTION ON 
UPDATE NO ACTION 
GO 

ALTER TABLE WORKS 
ADD CONSTRAINT WORKS_PROGRAMMER_FK FOREIGN KEY 
(
Programmer_ID 
) 
REFERENCES PROGRAMMER 
(
Programmer_ID 
) 
ON 
DELETE 
    NO ACTION ON 
UPDATE NO ACTION 
GO 

ALTER TABLE WORKS 
ADD CONSTRAINT WORKS_PROGRAM_FK FOREIGN KEY 
(
Program_ID 
) 
REFERENCES PROGRAM 
(
Program_ID 
) 
ON 
DELETE 
    NO ACTION ON 
UPDATE NO ACTION 
GO 

回答

0

無法把這個評論,因爲存在是一個圖像所示。

如果您的WORKS表的主鍵全部爲3,即PROGRAMMER_ID,PROGRAM_ID和PLATFORM_ID,那麼MEETING表可以是WORKS表的一個孩子,我認爲可以解決您的問題。

參見下圖

enter image description here

+0

的Works的主鍵是Programmer_ID和Program_ID。不是Platform_ID。關鍵是不能在同一個程序上使用同一個程序員在多個平臺上工作。我想結束的是一個具有Team_ID,Programmer_ID和Program_ID的表。 Team_ID不是唯一的,而另外兩個是。 –

+0

即使尚未建立會議,也必須創建團隊。 –

+0

因此,在這種情況下,您從工作站的PK中刪除PLATFORM_ID,並根據程序ID在會議表中稱爲TEAM_ID從程序到會議之間建立另一個1-N關係。 – vmachan