如何存储“Thing”和“Country”之间的关系?
1)这样就有权使用三个表 - “Thing”,“Country”和关系表“Thing_Country”存储用户选择的所有国家/地区?我认为这是正确的方法,但如果用户经常选择“所有国家/地区”,那么每次数据库都会填写大约100多条记录,这样可以吗?
在这种情况下,如果用户选择“所有欧洲国家”,我必须:首先选择所有欧洲国家;第二选择所有“事物”国家;第三个比较两个列表,对吧?
3)另一个问题是结构非常相似,但更复杂。
如果我们有其他关系而非“Country
”怎么办?例如,“Category
”并且有超过100个(比如10 000个)类别。如果用户选择“所有类别”,我还应该存储所有1000个FK吗?或者还有其他方法吗?
答案 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)
难道你不能以某种方式拥有所有国家或欧洲的特殊价值观吗?这样,您的程序可以减少数据库条目的数量,如果有人选择了所有国家/地区,您甚至可以拨打特殊电话。因此,如果您选择所有欧洲国家,该计划知道将该值分配给欧洲。我认为这也适用于类别。但我不确定。