2016-04-14 61 views
0

我比較新使用SQL和MySQL。向部分主鍵添加CONSTRAINT

我有下面的表定義,並且需要添加一個通用的約束,我將在稍後解釋。

CREATE TABLE `ProjInvestigat` (
    `projectID` INT, 
    `principalInvestigator` NUMERIC(8,0) ZEROFILL, 
    `coInvestigator` NUMERIC(8,0) ZEROFILL, 
    PRIMARY KEY (projectID, principalInvestigator, coInvestigator) 
); 

只要coInvesigator不同,我可以在表中有多個projectID和principalInvesigator實例。即

 projID principID coInvestID 
    15  17   27  OKAY 
    15  17   37  OKAY 
    15  27   47  NOT OKAY, I need to prevent having two principal investigators on the same project. 

我知道要在表定義或ALTER TABLE語句中添加CONSTRAINT,但是我該如何聲明以強制執行此策略?我如何解決這個問題?

感謝您的幫助。

+0

澄清,這裏是這個項目的約束。 – mike

+0

每個項目由一位教授管理,也稱爲項目首席研究員,AND教授可以管理或處理多個項目 – mike

+1

您不需要做任何事情。 'PRIMARY KEY'也是'UNIQUE'約束。僅供參考,MySQL支持的唯一約束條件是'UNIQUE KEY'和'FOREIGN KEY'。它可以讓你寫出其他約束,但忽略它們。 – Barmar

回答

0

在填寫您的基礎之前,您必須編寫一個腳本,它允許您驗證項目是否有兩名主要調查員。 你也可以看看這link,也許這是有幫助的。

+0

我應該也提到兩個基本關係的定義,他們在這裏。 BTW外鍵約束在alter table語句後添加。 – mike

+0

CREATE TABLE'Professors'( \t'SNN' NUMERIC(8,0)ZEROFILL NOT NULL CHECK(值介於0與99999999), \t'fName' VARCHAR(20), \t'lName' VARCHAR(20), \t'age' SMALLINT CHECK(值介於0與99), \t'rank' VARCHAR(15), \t'researchSpeciality' VARCHAR(30), \t PRIMARY KEY(SNN) ); – mike

+0

CREATE TABLE'Projects'( \t'projectNumber' INT NOT NULL AUTO_INCREMENT, \t'sponsorName' VARCHAR(20), \t'projectName' VARCHAR(30), \t'startingDate' DATE CHECK(VALUE> 2005-JAN -01), \t'endingDate' DATE CHECK(VALUE> 2005-JAN-01和值> STARTINGDATE) \t'budget' DECIMAL(10,2), \t PRIMARY KEY(projectNumber) ); – mike