如何在 sql 服务器中存储国家和州

How to store country and state in sql server

我正在创建一个类似于 youtube 的视频网站,但它的目标是独立游戏社区。

我正在研究 table 设计,但 运行 在位置列中遇到了一些障碍。

各大网站如何设计table存储位置?

Profile table:

ID | username | country | state
0  | jack     | US      | New York
1  | ted      | Canada  | Alberta

ID | username | countryID
0  | jack     | 1
1  | ted      | 2

Regions table:

ID | country | state
0  | United States | Texas
1  | United states | New york
2  | Canada        | Alberta

还是我漏掉了其他设计?

我不知道 "big" 网站如何处理他们的数据,但无论如何我认为这将是一个偏好和业务需求的问题,在第一种情况下 table 没有正确规范化因为状态取决于国家,而在另一种情况下,模型 [几乎] 已正确标准化(国家可以移至另一个 table)。第一个选项在进行查找等操作时可能会更快,但由于它破坏了规范化的关系模型,因此在 inserting/updating 数据(以及额外存储)时可能会导致问题。就我个人而言,我会选择使用第二个选项(如果需要,可能会对其进行去规范化以进行分析处理——我认为这在很大程度上取决于您希望处理的数据量)

标准化模型看起来像:

profile (**username**, state)
states (**state**, country)
countries (**country**)

上面的例子没有使用代理键,只是说明了模型;该模型的数据库实现通常会使用代理键,例如 UserID、StateID 和 CountryID,但如果正确规范化,则不需要它们,因为实体应该是主键(因为它们是候选键)。

那么 :

profile Table
ID | username | stateID
0  | jack     | 1
1  | ted      | 2

states table
ID | countryID | state
0  | 0 | Texas
1  | 0 | New york
2  | 1 | Alberta

countries table
ID | country
0  | United States
1  | Canada