2011-11-29 107 views
-1

比方說,我有2個表:FOREIGN KEY的用途是什麼?

Department(depNum) 
Worker(id,deptNum) - key should be id 

現在我想dept的參考系中的現有價值。 所以我寫在創建表:

CREATE TABLE Worker(
id integer primary key, 
dept integer references Department); 

我的問題是,我已經看到了很多例子,你也把foreign keyreferences聲明。我不明白什麼是主要關鍵。 是不是意味着dept也會成爲Worker的關鍵?

謝謝

+0

你的worker表應該有dept_id,而不是dept。用於'引用'和'外鍵'的語法可能會從SQL實現到SQL實現有點不同。 –

+0

一些實現可能讓你使用'部門引用部門',但在這些情況下,你可能想刪除'整數' –

回答

0

你有兩個表:

PLAYER, 
primary key (unique) PK_player_id 
player_name 
foreignt key to TEAM.team_id FK_team_id 

TEAM 
primary key (unique) PK_team_id 
team_name 

每個玩家都是在精確的一支球隊。

PLAYER有一個FOREIGN-KEY到TEAM(FK_team_id)。你也可以刪除TEAM,它將刪除級聯中的所有玩家(如果已配置)。

現在你不能創建沒有現有TEAM的播放器,因爲數據庫可以確保這一點。

編輯: 你不是要求外鍵嗎?

主鍵是一個或多個列,它將在數據庫中的數據行中標識。如果你想創建一個外鍵,你必須使用一列或多列),這是唯一的。

在我的示例中,每個表都有一個唯一的鍵(主鍵),因爲名稱可能會更改。爲了確定外鍵的「目標」,它必須是唯一的。所以它可以使用第二個表的主鍵。 (TEAM.PK_team_id)

1

Wikipedia

主鍵是唯一地指定一個 排列的組合。這是唯一鍵的特殊情況。 。 。 。主鍵爲 添加到SQL標準主要是爲了方便程序員應用程序 。

您不能在沒有主鍵的表中引用記錄。外鍵允許您在單個記錄中的另一個表中引用記錄。這個外鍵通常引用外表中的主鍵。

1

比方說,每個工人可以在一個只工作部門在任何時間。 所以每個部門都有自己的唯一ID。這是該部門的主要關鍵,因爲兩個部門不應該有相同的ID。

現在,每個單獨的工作人員都必須進行跟蹤,以便他們也被分配了自己的唯一ID。這是他們的主要關鍵。您需要將工作人員連接到他們工作的部門,並且由於他們一次只能在一個部門工作,因此可以將其部門作爲外鍵。 worker表中的外鍵鏈接到部門表的ID。

這提供了更多信息:http://www.1keydata.com/sql/sql-foreign-key.html

0

我不明白,這個要求應該是

部門(部門) 工人(ID,DEPT) - 關鍵的應該是ID

這意味着部門是部門中的主鍵和員工中的外鍵。 外鍵在worker表中不唯一,但在Department表中是唯一的。

工作表不能有部門中未定義的未知部門。

我有道理嗎?

0

爲了保證表的完整性,不會讓你在表(工人)沒有引用現有行(在部)

0

按照SQL-92標準輸入值:

一外鍵(FK)可能引用PRIMARY KEYUNIQUE CONSTRAINT。在PRIMARY KEY的情況下,所引用的列可以從外鍵聲明中省略,例如,以下三個都是有效的:

CREATE TABLE Department (Department INTEGER NOT NULL PRIMARY KEY, ...); 
CREATE TABLE Worker (dept INTEGER REFERENCES Department, ...); 

CREATE TABLE Department (Department INTEGER NOT NULL PRIMARY KEY, ...); 
CREATE TABLE Worker (dept INTEGER REFERENCES Department (dept), ...); 

CREATE TABLE Department (Department INTEGER NOT NULL UNIQUE, ...); 
CREATE TABLE Worker (dept INTEGER REFERENCES Department (dept), ...); 

下是無效的:

CREATE TABLE Department (Department INTEGER NOT NULL UNIQUE, ...); 
CREATE TABLE Worker (dept INTEGER REFERENCES Department, ...); 

...因爲涉及的外鍵所引用的列必須聲明。


當聲明一個簡單的(單柱)FK在線的FOREIGN KEY關鍵字如上刪去。

的複合(多列)不能在線進行聲明和一個簡單的FK不需要在在線聲明:在這些情況下,引用列需要(S)ANDFOREIGN KEY關鍵字(規則對於參考列保持與前面所述相同),例如這裏只舉幾個例子:

CREATE TABLE Department (Department INTEGER NOT NULL PRIMARY KEY, ...); 
CREATE TABLE Worker (dept INTEGER, FOREIGN KEY (dept) REFERENCES Department, ...); 

CREATE TABLE Department (Department INTEGER NOT NULL UNIQUE, ...); 
CREATE TABLE Worker (dept INTEGER, FOREIGN KEY (dept) REFERENCES Department (dept), ...); 

CREATE TABLE DepartmentHistory 
(
dept INTEGER NOT NULL, 
dt DATE NOT NULL, 
PRIMARY KEY (dt, dept), 
... 
); 
CREATE TABLE Worker 
(
dept INTEGER NOT NULL, 
dept_dt DATE NOT NULL, 
FOREIGN KEY (dept_dt, dept) REFERENCES DepartmentHistory, 
... 
);