2015-04-05 97 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