如何在sql server中存储国家和州

时间:2015-02-13 18:43:25

标签: sql-server database normalization

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

我正在制作桌面设计,并且在位置栏中遇到了一些绊脚石。

主要网站如何设计用于存储位置的表格?

Profile表:

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

OR

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

Regions表:

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

或者我错过了其他一些设计吗?

2 个答案:

答案 0 :(得分:7)

那怎么样:

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      

答案 1 :(得分:2)

我不知道“大”网站如何处理他们的数据,但无论如何我认为这将是一个偏好和业务要求的问题,在第一种情况下,由于州取决于国家,表格没有正确规范化,而在另一种情况下,模型[几乎]正确标准化(国家可以移动到另一个表)。在执行查找等时,第一个选项可以更快,但是当它打破规范化的关系模型时,它可能在插入/更新数据时导致问题(以及额外的存储)。就个人而言,我会选择使用第二个选项(如果需要,可能会将其去标准化以进行分析处理 - 我认为这在很大程度上取决于您希望处理的数据量)

标准化模型看起来像:

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

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