在我的项目中,我有产品的位置,如下所示:

- 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/

10-11 15:43