我正在创建一个类似于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
或者我错过了其他一些设计吗?
答案 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,但如果正确规范化,则不应该使用它们,因为实体应该是主键(因为它们是候选键)。