存储国家、州、城市 SQL 设计
Storing Country, State, City SQL Design
这是将用户位置存储在数据库中的方式吗? user_Country_state_city
table 有必要吗?有没有人有比下面列出的更好的设计?
User
table:
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
或
User
table:
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
我认为有更好的方法。一种是在 Users
中有一个 LocationId
。反过来,这将引用具有三列的 Locations
table,一列用于 City
、State
和 Country
—— 或者,更好的是, CityId
、StateId
和 CountryId
。
另一种是在 Users
table 中只有一个 CityId
。这反过来又会引用 States
,而后者又会引用 Country
。在通常的实践中,城市属于一个州,州属于一个国家。您不想让违反此约束变得容易,而此结构可防止这种情况发生。
我的设计规则 sql table 是:如果关系是 1 对 1(1 个用户有 1 个位置),则将其置于 1 table 内。它消除了稍后用于内部连接 table.
的不必要的开销
所以这又回到了您的业务规则。您需要 1 个用户有多个位置,还是 1 个用户有多个位置?如果是前者,则使用第二种方法(在用户处设置值),否则使用第一种方法,这样它就可以建立一对多关系。
这是将用户位置存储在数据库中的方式吗? user_Country_state_city
table 有必要吗?有没有人有比下面列出的更好的设计?
User
table:
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
或
User
table:
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
我认为有更好的方法。一种是在 Users
中有一个 LocationId
。反过来,这将引用具有三列的 Locations
table,一列用于 City
、State
和 Country
—— 或者,更好的是, CityId
、StateId
和 CountryId
。
另一种是在 Users
table 中只有一个 CityId
。这反过来又会引用 States
,而后者又会引用 Country
。在通常的实践中,城市属于一个州,州属于一个国家。您不想让违反此约束变得容易,而此结构可防止这种情况发生。
我的设计规则 sql table 是:如果关系是 1 对 1(1 个用户有 1 个位置),则将其置于 1 table 内。它消除了稍后用于内部连接 table.
的不必要的开销所以这又回到了您的业务规则。您需要 1 个用户有多个位置,还是 1 个用户有多个位置?如果是前者,则使用第二种方法(在用户处设置值),否则使用第一种方法,这样它就可以建立一对多关系。