存储国家,州,城市SQL设计

时间:2015-04-05 00:35:02

标签: sql-server tsql normalization

这是用户位置应该存储在数据库中的方式吗?是否需要user_Country_state_city表?有没有人有更好的设计,然后下面列出了什么?

User表:

ID | User
0  | John

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

2 个答案:

答案 0 :(得分:1)

我认为有更好的方法。一个是LocationId中的Users。反过来,这会引用一个Locations表,其中包含三列,一列用于CityStateCountry - 或者更好的是,{{1} },CityIdStateId

另一个是在CountryId表中只有一个CityId。反过来,这会引用Users,而States则会引用Country。在通常的做法中,城市处于单一状态,各州处于单一国家。你不想轻易违反这个约束,这种结构可以防止这种情况发生。

答案 1 :(得分:0)

我设计sql表的规则是:如果关系是1比1(1个用户有1个位置),那么在1个表中进行。它为内部连接表稍后删除了不必要的开销。

所以这回到了你的业务规则。您是否需要1个用户拥有多个位置,或者1个用户拥有多个位置?如果是前者,那么使用第二种方法(在用户处设置值),否则使用第一种方法,这样它就可以做一对多的关系。