我需要一个搜索功能来搜索数据库中的项目,但我甚至不确定如何正确地将它们保存在数据库中。
我想按地点,地区和议会进行搜索,其余部分更直接。
但每个项目可以有多个区和理事会,如何将它们保存在数据库中?添加另一个将项目ID与地区相关联的表格以及另一个与理事会相关的表格?
像
这样的东西|id|item_id|district|
----------------------
|1 | 1 |dis_1 |
|2 | 1 |dis_2 |
|3 | 1 |dis_3 |
|4 | 1 |dis_4 |
然后是一个类似的理事会表?
然后搜索将区/理事会与item_id匹配。
我在想什么?
答案 0 :(得分:0)
通常,当您拥有多对多关系时,可以使用关系表解决该问题。因此,在上面的示例中,如果您有一个Item表和一个District表,那么您将创建一个只有两列的ItemDistrict表:ItemId和DistrictId。此表不需要自己的id键,因为ItemId和DistrictId的组合是主键。
如果理事会独立于地区且一个项目可以有多个理事会,那么您将拥有第二个表ItemCouncil,其中包含ItemId和CouncilId。
但是如果区域与理事会相关并且项目与区/理事会组合的子集相关,则需要一个与所有三个表相关的表:具有3列的ItemDistrictCouncil:ItemId,DistrictId和CouncilId。
如果该项目实际上只与该区域相关,并且该区域与理事会有关,那么通过推断该项目与对应于该区域的任何理事会相关,您只需要ItemDistrict表。在这种情况下,您将通过理事会对该区的外键加入理事会。