2014-01-26 78 views
0

我在這裏遇到了一些問題,這些問題是如何工作的。 所以我有2個表學生就讀這樣的:sql中的主鍵

CREATE TABLE Students 
(sid CHAR(20), 
name CHAR(50), 
email CHAR(30), 
age INTEGER, 
gr INTEGER) 

CREATE TABLE Enrolled 
(sid CHAR(20), 
cid CHAR(20), 
grade CHAR(2), 
PRIMARY KEY (sid,cid)) 

所以我不明白這一點格外行PRIMARY KEY (sid,cid) 有人能向我解釋它是如何工作的?我指定我從哪裏cid.

是另一個表課程相當於說是這樣的:

CREATE TABLE Enrolled 
(sid CHAR(20) foreign key references Students(sid), 
cid CHAR(20) foreign key references Courses(cid) 
) 
+0

只能有一個主鍵。你怎麼能設置兩個主鍵? – 2014-01-26 10:23:32

+3

@ aliasm2k:這只是一個主鍵,引用2列。 –

+0

哦,我的壞。似乎我將不得不重新開始SQL。 – 2014-01-26 11:26:47

回答

0

A PRIMARY KEY用於識別表格。定義爲PRIMARY KEY的字段或列將在該表的每一行中包含不同的值,並且必須具有一個值(因此,PRIMARY KEY等於UNIQUENOT NULL)。

PRIMARY KEY可以是單個字段,也可以是多個字段,但總是滿足「每行將有不同PRIMARY KEY」。

如果聲明爲PRIMARY KEY 2列的組合,你將能夠有這樣的例子:

CREATE TABLE Enrolled 
(sid CHAR(20), 
cid CHAR(20), 
grade CHAR(2), 
PRIMARY KEY (sid,cid)) --PRIMARY KEY with combination of 2 columns 

sid | cid | grade 
1   1   XX 
1   2   XX 
2   1   XX 
2   2   XX 
2   3   XX 

在這個例子中,你可以看到,列sid或列cid分別具有重複的值,但不存在重複的(sid, cid)的組合。

PRIMARY KEY被用於確定表中的行,當我們要涉及兩個表我們可以定義一個在一個FOREIGN KEY表這一個與其他錶鏈接。

您的情況是ENROLLED表由複合PRIMARY KEY標識以表示多對多關係。這就是說:

  • 一個學生可以參加很多課程。
  • 一門課程可以招收許多學生。

enter image description here

注*:是定義PRIMARY KEYS爲數值,這樣integerbigint等最佳做法,因爲它是更好地提高索引的性能(所有PRIMARY KEYS定義固有的INDEX ,而使用「數字」值比使用「字符串」值更快)。

1

PRIMARY KEY既指UNIQUENOT NULL

如果你想要sidcid也是FOREIGN KEY你必須單獨指定。

具有主鍵的兩個字段通常用於多對多關係的物理表示的表。在你的數據庫設計圖中,你應該有STUDENTCOURSE作爲實體,ENROLLMENT作爲它們之間的多對多關係。

在物理數據庫圖中,將多對多關係建模爲表,通常對實體表使用複合PRIMARY KEYFOREIGN KEY約束。

+0

但我不明白爲什麼我有2個主鍵? – user3043278

+3

你不知道。對於1個主鍵是2列,而不是2個主鍵。 – Alexander

+0

我怎麼能反駁這個主鍵有2列? – user3043278

1

PRIMARY KEY(sid,cid)表示複合主鍵..這些字段的組合應該是唯一的。