Moa*_*oak 13 php mysql database optimization search
我有两张桌子
A:
plant_ID | name.
1        | tree
2        | shrubbery
20       | notashrubbery
B:
area_ID | name    | plants
1       | forrest | *needhelphere*
现在我希望该区域按特定顺序存储任意数量的植物,并且一些植物可能会出现多次:例如2,20,1,2,2,20,1
什么是存储这一系列植物的最有效方法?
记住我需要这样做,以便如果我执行搜索以找到具有植物2的区域,我不会得到例如1,20,232,12,20的区域(带有前导0的垫?)什么是查询为了那个原因?
如果它有帮助,我们假设我有一个不超过99999999个不同植物的数据库.是的,这个问题与植物没有任何关系......
奖金问题 是时候离开MySQL吗?是否有更好的数据库来管理这个?
Mat*_*chu 26
如果您要通过森林和植物进行搜索,听起来您将从全面的多对多关系中受益.抛弃您的plants列,并创建一个全新的areas_plants表(或任何您想要调用它的表)来关联这两个表.
如果区域1有植物1和2,区域2有植物2和3,那么你的areas_plants桌子看起来像这样:
area_id | plant_id | sort_idx
-----------------------------
      1 |        1 |     0
      1 |        2 |     1
      2 |        2 |     0
      2 |        3 |     1
然后,您可以从任意一侧查找关系,并使用简单的JOIN从任一表中获取相关数据.不需要在LIKE条件下弄清楚它是否在列表中,等等,等等.我去过遗留数据库.没有什么好玩的.使用SQL发挥其最大潜力.
这个怎么样:
表:植物
plant_ID | name
1        | tree
2        | shrubbery
20       | notashrubbery
表:区域
area_ID | name
1       | forest
table:area_plant_map
area_ID | plant_ID | sequence
1       | 1        | 0
1       | 2        | 1
1       | 20       | 2
这是标准的标准化方法(使用映射表).
要找到所有带灌木的区域(植物2),请执行以下操作:
SELECT *
FROM areas
INNER JOIN area_plant_map ON areas.area_ID = area_plant_map.area_ID
WHERE plant_ID = 2
| 归档时间: | 
 | 
| 查看次数: | 15517 次 | 
| 最近记录: |