2011-05-30 44 views
1

使用sql,我需要讓LINENO和訂單項目成複合鍵我怎麼能做到這一點這一點,到目前爲止,我已經得到了SQL複合鍵的幫助

CREATE TABLE ORDERLINE (
    ORDERNO INTEGER NOT NULL, 
    LINENO VARCHAR(4) NOT NULL, 
    NUMBERORDERED NUMERIC DEFAULT '1', 
    QUOTEDPRICE NUMERIC DEFAULT '0.00', 
    CONSTRAINT ORDERLINE_ORDERNO_PK PRIMARY KEY (ORDERNO), 
    CONSTRAINT ORDERLINE_ORDERNO_CC CHECK (ORDERNO BETWEEN 10000 AND 99999), 
    CONSTRAINT ORDERLINE_NUMBERORDERED CHECK (NUMBERORDERED BETWEEN 1 AND 100) 
); 
+1

複合鍵?就像在「* primary * composite key」中一樣?還是你真的在獨特的約束之後?我不清楚... – 2011-05-30 06:19:38

+0

在_composite主鍵_ - 似乎對我來說合理。可能會導致一些腦死亡的Web基礎設施問題,認爲您只能擁有單列主鍵,但您確實可以擁有多列主鍵,並且它們通常是完全可用的。 – 2011-05-30 07:19:14

回答

3
CREATE TABLE ORDERLINE (
    ORDERNO INTEGER NOT NULL, 
    LINENO VARCHAR(4) NOT NULL, 
    NUMBERORDERED NUMERIC DEFAULT '1', 
    QUOTEDPRICE NUMERIC DEFAULT '0.00', 
    CONSTRAINT ORDERLINE_ORDERNO_PK PRIMARY KEY(ORDERNO, LINENO), -- note alteration on this line 
    CONSTRAINT ORDERLINE_ORDERNO_CC CHECK (ORDERNO BETWEEN 10000 AND 99999), 
    CONSTRAINT ORDERLINE_NUMBERORDERED CHECK (NUMBERORDERED BETWEEN 1 AND 100) 
); 

你非常接近。請注意上面添加的列名稱。

確定哪個字段更有可能成爲任何查詢中的主要列並將其放在第一位。例如;如果您經常通過OrderNO進行訪問,LineNo將會是最好的訂單,但如果您通過LineNo訪問,OrderNO將按照該訂單進行操作。

2

如果您已經創建的表,你可以刪除現有主鍵(大概ORDERNO),然後重新創建一個這樣的兩列主鍵:

ALTER TABLE `orderline` DROP PRIMARY KEY; 
ALTER TABLE `orderline` ADD PRIMARY KEY (`ORDERNO`, `LINENO`); 

或者,你可以定義在創建表語句中的主鍵,如下所示:

CREATE TABLE `orderline` (
    ORDERNO INTEGER NOT NULL, 
    LINENO VARCHAR(4) NOT NULL, 
    NUMBERORDERED NUMERIC DEFAULT '1', 
    QUOTEDPRICE NUMERIC DEFAULT '0.00', 
    PRIMARY KEY (`ORDERNO`,`LINENO`), 
    CONSTRAINT ORDERLINE_ORDERNO_CC CHECK (ORDERNO BETWEEN 10000 AND 99999), 
    CONSTRAINT ORDERLINE_NUMBERORDERED CHECK (NUMBERORDERED BETWEEN 1 AND 100) 
)