这是用户位置应该存储在数据库中的方式吗?是否需要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
答案 0 :(得分:1)
我认为有更好的方法。一个是LocationId
中的Users
。反过来,这会引用一个Locations
表,其中包含三列,一列用于City
,State
和Country
- 或者更好的是,{{1} },CityId
和StateId
。
另一个是在CountryId
表中只有一个CityId
。反过来,这会引用Users
,而States
则会引用Country
。在通常的做法中,城市处于单一状态,各州处于单一国家。你不想轻易违反这个约束,这种结构可以防止这种情况发生。
答案 1 :(得分:0)
我设计sql表的规则是:如果关系是1比1(1个用户有1个位置),那么在1个表中进行。它为内部连接表稍后删除了不必要的开销。
所以这回到了你的业务规则。您是否需要1个用户拥有多个位置,或者1个用户拥有多个位置?如果是前者,那么使用第二种方法(在用户处设置值),否则使用第一种方法,这样它就可以做一对多的关系。