2016-03-21 149 views
0

enter image description hereSQL主鍵約束

在一本書我讀他們指出,在教導表,基於上面圖片中的架構圖上,加下劃線的列名Primary keys (ID, course_id, sec_id, semester, and year)。我有點困惑,因爲我原本以爲你只能在一個表中有一個Primary Key。我不太瞭解哪些是主鍵,哪些是上圖中的外鍵約束。有人可以向我解釋如何通過這樣的圖表來識別這些鍵嗎?

此外,有可能使(course_id, sec_id, semester, and year)(foreigns keys)來自參考教導主鍵(course_id, sec_id, semester, and year)的部分表。那不正確?由於對於每個組合中的(course_id, sec_id, semester, and year),您可能會從教師桌上獲得多個ID,因爲您可以爲每個部分設置多個教師。因此,這意味着您的部分外鍵來自教導中的多行,並且不會形成教授的正確的主鍵組合。

+1

它們是其他表中的主鍵;在教學中,它們是對其他表中的主鍵的引用,並且應該具有外鍵約束---也就是說,您不應該能夠將course_id分配給course_id表中不存在的教程。您可以通過列名稱和從字段繪製到它所引用的表/字段的行來標識它們。 – JLB

+0

所以這意味着在部分表中PK是course_id,sec_id,學期和年份。換句話說,部分中的(course_id,sec_id,學期和年)的每個組合都必須是唯一正確的?既然你不能有PK的重複值? – LP496

+1

表只能有一個主鍵。主鍵= 1.主鍵是從表中獲取所需內容的關鍵:)所以在該表中,它將引用course_id表中的一行,等等等等。 – JLB

回答

2

您只能爲表設置1個主鍵,但是:主鍵由1列或更多列組成。

另一個問題是: 在類似上面的圖表中,您可以通過簡單地按照箭頭標識引用列。 例如: advisor.i_id參考指導.ID

希望這有助於!

Greetings

+1

在這樣的圖中,您可以通過下劃線標識主鍵的一部分。因此對於教學,主鍵由所有列組成。教室f.e.中,主鍵只有building和room_no,容量不是pk的一部分。 – ndo

+0

哦,arite。那麼在sec_id部分中,學期,年份和course_id是主鍵? – LP496

+1

在section中,sec_id,semester,year和course_id是主鍵(注意單數!),主鍵由這4列組成。同時,列course_id是表格課程的主鍵和表格部分的一個外鍵。一個由多個col組成的pk也可以包含外鍵。 – ndo