我試圖創建一家軟件開發公司的數據庫(如自由時間的項目)關係在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
的Works的主鍵是Programmer_ID和Program_ID。不是Platform_ID。關鍵是不能在同一個程序上使用同一個程序員在多個平臺上工作。我想結束的是一個具有Team_ID,Programmer_ID和Program_ID的表。 Team_ID不是唯一的,而另外兩個是。 –
即使尚未建立會議,也必須創建團隊。 –
因此,在這種情況下,您從工作站的PK中刪除PLATFORM_ID,並根據程序ID在會議表中稱爲TEAM_ID從程序到會議之間建立另一個1-N關係。 – vmachan