2011-12-15 252 views
0

當創建數據庫時,如果一個表只包含來自其他表的2個主鍵,會發生什麼情況,我假設它們都是外鍵。表中是否必須有主鍵?主鍵和外鍵?

回答

0

表不一定需要關聯主鍵。據我完全有效的如下

Table_Album

pkey | name 
1 | name1 
2 | name2 

Table_Song

pkey | name 
1 | song1 
2 | song2 
3 | song3 

然後,您可以有哪些規定

Table_Album_Song_Map

01表
id | Album | Song # Here id is just row number and not primary key 
1 | name1 | song1 
2 | name1 | song2 
3 | name2 | song3 

希望幫助

1

否;表格不必有主鍵。

他們經常(通常?)不要當他們這樣鏈接/映射表。

+0

這是一個奇怪的質量downvote。 – 2011-12-15 04:45:11

2

只有兩個外鍵,沒有別的鏈接表(沒有加入代理鍵做一個簡單意義的主鍵)通常會被限制爲是唯一的(否則你不會能夠區分重複 - 這也是對正常形式的違反),所以你通常會繼續前進,並將這兩個鍵合併爲一個組合構成主鍵(PK必須按定義是唯一的,並且它們形成一個自然的這種鏈接表的PK的選擇)。主鍵中這些列的順序通常由最頻繁的搜索順序確定 - 即,personid,可能首先在personid上的合成主鍵上擁有personid,被確認。

+0

+1是的,你是對的主鍵是一個或多個列上的*約束*。這不是一個專欄,因爲其他答案都是假設的。 – 2011-12-15 04:45:46

0

當你有一個關聯實體或表時,最好創建一個由雙親的鍵組成的複合主鍵。在這個例子中,Album-Song-Map上的專輯和歌曲的組合會有一個唯一性約束。如果您不將這些設置爲主鍵,並且使組合具有唯一性,那麼您可以在「Album-Song-Map」中添加重複項。 Album-Song-Map的組合鍵是父母雙方的關鍵,但他們分別是外鍵,分別返回到他們的父母,專輯和歌曲。根據我的經驗,關聯實體通常不僅用於映射,還包含一些業務屬性。例如,說這首歌在一張專輯中的持續時間(播放時間)與另一張不同。該屬性必須進入Album-Song-Map。我使用很多音樂來跳舞,而且在不同的專輯中,歌曲的持續時間通常不同。