存储国家、州、城市 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,一列用于 CityStateCountry —— 或者,更好的是, CityIdStateIdCountryId

另一种是在 Users table 中只有一个 CityId。这反过来又会引用 States,而后者又会引用 Country。在通常的实践中,城市属于一个州,州属于一个国家。您不想让违反此约束变得容易,而此结构可防止这种情况发生。

我的设计规则 sql table 是:如果关系是 1 对 1(1 个用户有 1 个位置),则将其置于 1 table 内。它消除了稍后用于内部连接 ​​table.

的不必要的开销

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