2008-10-18 57 views
4

我正在爲事件管理站點設計一個數據庫 - 有一個場地表和一個事件表。每個活動都在一個場地(存儲場地的ID),每個場地都在一個城市。如果城市是場地表中的一個場(這可能會導致城市因拼寫錯誤而導致城市重複),或者應該有一張城市表(每個城市有一個id和一個名稱),一個連接城市與場地(cityid,venueid)的一對多表格?數據庫設計問題 - 字段或新表格+一對多

我知道這是一個非常基本的問題,但我不確定額外的連接和額外的兩個表是否值得。

預先感謝

[編輯] @tvanfosson:因爲每個地點與單個城市相關聯的從多到多對一一對多更改。

回答

0

這可能是值得考慮的地址表,與城市列。

解決方案真的取決於其他功能是什麼,以及數據庫將來是否會用於其他功能。

這也是一個主觀的選擇,在我看來有一個單獨的城市表可能有點過於規範化。

1

我假設這組城市是固定的,相對較小,並且不太可能更新(拼寫可以隨時添加新的城市)。在這種情況下,可以從XML文件提供的下拉列表中選擇城市,並將選定值存儲在數據庫中的列中。由於輸入錯誤的機會,我會避免使用用戶提供的輸入。

如果你有一個更分層的結構,城市位於各州的州,那麼基於表格的方法可能更合適,因爲你可以在多個地點有相同名稱的城市。在這種情況下,我認爲使用數據庫查詢比使用XML更容易管理級聯下拉菜單。

注意:可能沒有「正確」的答案,因爲它高度依賴於你的情況。

0

將多個對多個關係連接起來,將城市和場地連接到一個多對多的關係中(比如venue_city),您可以在其中存儲每個城市的所有場地,然後鏈接表格事件和表格venue_city將venue_city id存儲到表事件中。

3

使用一個單獨的表 - 這樣,你有城市的主列表來填充下拉菜單和/或自動提示字段,您通過存儲的ID字符串而不是冗餘節省空間。如果你有一百萬個場館,而且只有一千個城市,無論是在存儲方面還是在查詢速度方面,這都是非常節省的 - 因爲你不必在磁盤上讀取儘可能多的內容,這就是殺死性能的原因。

您應該指定的不僅僅是一個城市,還包括州(以便您知道場地所在的斯普林菲爾德)。

0

你應該有一個城市表 - 即使你現在不需要它,你可能想要添加郵政編碼,或者讓城市處於狀態。

0

如果我正確理解你的情況,一個城市表是必須的,包括州。您可以根據需要添加新的城市/州(在添加之前檢查表中是否存在)。它會更有效率,避免重複,但拼寫錯誤的城市名稱。

0

請勿在會場存放城市名稱。取而代之的是分配一個城市ID並將其存儲在場地中。在您進行加入以查找特定城市的活動之前,請從城市名稱中解析city-id並將其用作加入標準。爲了方便和提高性能,這可以在存儲過程中實現。