2014-11-22 94 views
1

我拿到了Person表,每個Person都可以訪問幾個國家。每個Person訪問的國家存儲在表CountryVisit這是一個很好的數據庫設計實踐嗎?

PersonId, 
Name 

地區訪問

CountryVisitId (primary key) 
PersonId (foreign key to 'Person.PersonId') 
CountryName 
VisitDate 

對於CountryVisit表,我的主鍵是CountryVisitId這是一個identity欄。這種設計將導致Person只能有1 CountryVisit,但CountryVisitId可以是40。創建另一個代理鍵列作爲標識列是否是一種更好的做法,而CountryVisitId是每個PersonId都唯一的自然鍵?

+2

爲什麼不把'person','country'作爲獨立的表和映射表'CountryVisit'?這樣你可以確保國家在拼寫方面沒有變化。 – davek 2014-11-22 16:04:25

+0

是的,那是在我原來的設計中,我只是在這裏做了一個更簡單的設計來澄清我的問題 – user3340627 2014-11-22 16:05:44

+1

如果用戶多次訪問同一個國家,您想存儲什麼? IE:這是1-n還是n-n關係? – 2014-11-22 16:06:46

回答

8

這很不錯。我建議你爲國家建立一個單獨的表格,每個國家一行。然後CountryVisits表將具有:

CountryVisitId PrimaryKey, 
PersonId ForeignKey, 
CountryId ForeignKey, 
VisitDate 

這將確保該國的名字總是正確和一致無誤。如果您想要開始一個國家/地區列表,請查看Wikipedia頁面。另外請注意,您的國家定義可能與標準國家/地區列表不同(國家/地區實際上有多個國家/地區),因此您應該使用自己的自動遞增主鍵,而不是使用國家/地區代碼。

而且,您應該放寬要求並刪除PersonId, CountryId上的唯一或主鍵,除非您希望每個國家只實施一次訪問。

相關問題