2012-04-20 69 views
1

我需要創建3個表看起來像這樣SQL如何設置外鍵

學生(SID:CHAR(12),SNAME:VARCHAR(50),bdate:日期,地址:VARCHAR(50 ),scity:VARCHAR(20),年:CHAR(20),GPA:FLOAT)

公司(CID:CHAR(8),CNAME:VARCHAR(20))

申請(SID :CHAR(12)CID:CHAR(8)

(粗體屬性是主鍵)

但我不知道如何自例如申請表的CID設置外鍵既是主鍵在申請表和公司表(有sid同樣的情況在申請表和學生表之間)。謝謝你的幫助。

這些是用於創建表的代碼:

myQuery = "CREATE TABLE student " 
       + "(sid CHAR(12), sname VARCHAR(50), " 
       + "bdate DATE, address VARCHAR(50), " 
       + "scity VARCHAR(20), year CHAR(20), " 
       + "gpa FLOAT) ENGINE=InnoDB;"; 
myQuery = "CREATE TABLE company " 
       + "(cid CHAR(8), cname VARCHAR(20), quota CHAR(8))ENGINE=InnoDB;"; 
myQuery = "CREATE TABLE apply " 
       + "(sid CHAR(12), cid CHAR(8)) ENGINE=InnoDB;"; 
+0

你可以有一個主鍵也是一個外鍵。 – 2012-04-20 13:07:58

+0

在申請表中的CID是FK,在公司表中的CID是PK – Randy 2012-04-20 13:08:03

+0

使用InnoDB類型的表,你的問題將得到解決用戶加入讓數據 – 2012-04-20 13:17:50

回答

3

它看起來像apply表是許多一對多studentcompany之間的連接。

在這種情況下,您希望像設置studentcompany(儘管發佈SHOW CREATE TABLE student的輸出可能會爲您提供更有幫助的答案)。所以對於申請表,你希望兩個外鍵:一個在sid它引用student.sid,和一個在cid它引用company.cid。可能是這樣的:

ALTER TABLE apply ADD CONSTRAINT sid FOREIGN KEY (sid) REFERENCES student(sid); 
ALTER TABLE apply ADD CONSTRAINT cid FOREIGN KEY (cid) REFERENCES copmany(cid); 

編輯:根據您的表創建,你也沒有設置主鍵。將PRIMARY KEY標識符添加到您希望成爲主鍵的任何列中。

+0

可以改變表整合到innodb類型的表?因爲我使用的是InnoDB引擎 – droidata 2012-04-20 13:53:55

+0

是的。他們在所有引擎上工作。如果您使用外鍵,您將需要使用InnoDB。 – 2012-04-20 14:02:25

+0

我在表格創建時添加了PRIMARY KEY標識符和相關表格的主值。還添加了在所有表創建後提供的alter table語句。現在我怎樣才能檢查這個作品或不。(順便說一句,它編譯並創建所有表並插入數據,沒有任何錯誤或異常) – droidata 2012-04-20 14:13:28

0

i中的應用表中設置兩個SID和CID作爲foreignkeys..this表稱爲結合表這裏的主鍵是一個複合主鍵既SID和CID一起。 appply表的外鍵是SID和CID apply表的主鍵是(sid,cid)複合主鍵。 每個公司可以有任意數量的學生.. 每個學生都可以是任意數量的公司 但一個組合不會重複的一部分。