在我的项目中,我有产品的位置,如下所示:
- Location 1
-- SubLocation 1
-- SubLocation 2
- Location 2
-- SubLocation 3
-- SubLocation 4
想象一个设施中有分区的分区。
我需要将其存储在数据库中,然后稍后再检索,例如:
SubLocation 1 at Location 1
。我的第一个猜测是要有两个具有一对多关系的表,但这不会扩展,后来我需要有这样的东西:
- Location 2
-- SubLocation 3
-- SubLocation 4
---- SubLocation 5
---- SubLocation 6
所以我的问题是在关系数据库中存储这种结构的最佳方法是什么?
最佳答案
您可以将parent_id引用FK定义为另一个具有id的记录(根目录具有空的parent_id)。
要定义层次结构并在一个查询中检索所有子树,可以定义一个附加字段路径(VARCHAR)。该字段的ID的完整路径应以'_'分隔
在您的情况下,SubLocation 5具有路径=“ 2_4_5”
要检索SubLocation 4的所有子级,可以使用
select *
from myTable
where path like '2_4%';
有级别深度限制(实际上是路径的大小),但是在大多数情况下它应该起作用。
关于mysql - 如何存储嵌套位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21987375/