如何在数据库中存储“thing” - “country”关系?

时间:2015-07-06 19:07:41

标签: database database-design

如何存储“Thing”和“Country”之间的关系?

  • 一个“东西”可以有一个或多个“国家”
  • 用户可以为每个“Thing”标记“选择所有国家/地区”
  • 用户可以为每个“Thing”
  • 标记“Select all Europe”(或任何其他区域)

1)这样就有权使用三个表 - “Thing”,“Country”和关系表“Thing_Country”存储用户选择的所有国家/地区?我认为这是正确的方法,但如果用户经常选择“所有国家/地区”,那么每次数据库都会填写大约100多条记录,这样可以吗?

在这种情况下,如果用户选择“所有欧洲国家”,我必须:首先选择所有欧洲国家;第二选择所有“事物”国家;第三个比较两个列表,对吧?

3)另一个问题是结构非常相似,但更复杂。

如果我们有其他关系而非“Country”怎么办?例如,“Category”并且有超过100个(比如10 000个)类别。如果用户选择“所有类别”,我还应该存储所有1000个FK吗?或者还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

如果您拥有国家或类别等信息的集合,则可以设计一个引用自身的特殊数据库表。

Country
-------
Country ID
Parent Country ID
Country Name
...

此表的数据看起来像这样

Country ID     Parent Country ID     Country Name
----------     -----------------     ------------
     0               null            World
     1                 0             Europe
     2                 0             Africa
    ...
     9                 1             Spain
    10                 2             Libya

所以,当你查看西班牙时,你可以看到母国是欧洲。当你查看欧洲时,母国是世界。由于世界的父国是空的,你已经尽可能地走了。

您可以阅读表格并按国家/地区名称,父国家/地区ID进行排序,以获取国家/地区的树状列表

   World
   -       Africa
   -       -        Libya
   -       Europe
   -       -        Spain

答案 1 :(得分:0)

难道你不能以某种方式拥有所有国家或欧洲的特殊价值观吗?这样,您的程序可以减少数据库条目的数量,如果有人选择了所有国家/地区,您甚至可以拨打特殊电话。因此,如果您选择所有欧洲国家,该计划知道将该值分配给欧洲。我认为这也适用于类别。但我不确定。