URL(片段)如何存储在关系数据库中?
在以下网址片段中:
~/house/room/table
它列出了表格中的所有信息,也许还有关于该表格的一些信息。
这个片段:
~/house
输出:Street 13
和Room, Garage, Garden
~/house/room
输出:My room
和Chair, Table, Window
数据库架构是什么样的?如果我将house
重命名为flat
该怎么办?
我在想我可以为URL创建一个哈希值,并将其与parentID
和信息一起存储。如果我重命名某个高级段,那么我需要更新包含给定段的所有行。
然后我认为会存储每个细分以及信息及其级别:
SELECT FROM items WHERE key=house AND level=1 AND key=room AND level=2
如果URL可以任意深入,我该如何解决这个问题呢?
答案 0 :(得分:2)
检查 Joe Celko的树和层次结构在SQL中为Smarties描述的邻接列表模型和嵌套集模型
你应该找到很多关于这个主题的信息。一篇文章是here
的更新强>
如果您正在寻找'正在检索单一路径'这样的任务,嵌套集模型非常好。你拥有的是'找到节点的直接下属'。 邻接列表模型更好。
| id | p_id | name |
| 1 | null | root |
| 2 | 1 | nd1.1 |
| 3 | 2 | nd1.2 |
| 4 | 1 | nd2.1 |
SQL获取一个包含片段名称的行,它是直接子项。
SELECT
p.name,
GROUP_CONCAT(
c.name
SEPARATOR '/'
) AS subList
FROM _table p
INNER JOIN _table c
ON p.id = c.p_id
WHERE p.name = 'root'
P.S。更喜欢WHERE p.id = 1
。 Id是唯一的,因为名称可能不明确。
请参阅MySQL GROUP CONCAT函数以获取更多语法详细信息。