2015-04-05 113 views
0

用戶位置應該如何存儲在數據庫中?是否需要user_Country_state_city表?有沒有人有更好的設計,那麼下面列出的是什麼?存儲國家,州,市SQL設計

User表:

user_Country_state_city

ID | CountryID | StateID | CityID 
0 | 0   | 0  | 0 

Country

ID | Country Name 
0 | United States 

State

ID | Country ID | State 
0 | 0   | Michigan 

City

ID | State ID | City 
0 | 0  | Detroit 

OR

User表:

ID | User | CountryID | StateID | CityID 
0 | John | 0   | 0  | 0 

Country

ID | Country Name 
0 | United States 

State

ID | Country ID | State 
0 | 0   | Michigan 

City

ID | State ID | City 
0 | 0  | Detroit 

回答

1

我認爲有更好的方法。一種是在Users中有LocationId。這又將引用具有三列的Locations表,其中一列用於City,StateCountry-或者更好的是CityId,StateIdCountryId

另一種方法是在Users表中只有一個CityId。這反過來會參考States,而這又將參考Country。在通常的做法中,城市處於單一的狀態,各州在一個國家。你不想輕易違反這個約束,並且這種結構可以防止這種情況的發生。

+0

因此,例2我只用cityID創建,城市表就會提及國家和州。你是這個意思嗎? – 2015-04-05 00:52:51

+2

@LeslieJones - 在第二個例子中,您仍然有三個來自'User':'CountryId','StateId'和'CityId'的引用。我相信戈登建議在'User'中只有'CityId'。想想它是什麼意思。用戶是否可以選擇僅隸屬於一個國家或必須指定州和城市?如果是這樣,你爲什麼要允許用戶排到意大利,曼尼託巴,莫斯科?如果你只允許一個城市,並用它來定位國家,那麼你就排除了這個問題。 – HABO 2015-04-05 02:12:55

+0

這是一個很好的觀點,我明白你的意思。 – 2015-04-07 23:08:08

0

我設計sql表的規則是:如果關係是1到1(1個用戶有1個位置),那麼把它放在1個表內。稍後爲內部連接表刪除不必要的開銷。

所以這回到您的業務規則。你需要1個用戶有多個位置,還是1個用戶有多個位置?如果前者,然後使用第二種方法(在用戶設置值),否則使用第一種方法,因此它可以做一對多的關係。

+0

1用戶1位置,所以它會是1對1的關係。我不想把這個國家,州和城市放在同一張桌子裏的原因是它不會正常化。我在想1個用戶表,1個國家表1個州表和1個城市表。 – 2015-04-07 23:11:17

+0

爲什麼把這個國家,這個國家和這個城市不規範? – Fendy 2015-04-08 01:52:57