如何将URL片段存储在数据库中?

时间:2011-02-23 22:00:15

标签: mysql database url hierarchy

URL(片段)如何存储在关系数据库中?

在以下网址片段中:

 ~/house/room/table

它列出了表格中的所有信息,也许还有关于该表格的一些信息。

这个片段:

~/house

输出:Street 13Room, Garage, Garden

~/house/room

输出:My roomChair, Table, Window

数据库架构是什么样的?如果我将house重命名为flat该怎么办?

可能的解决方案

我在想我可以为URL创建一个哈希值,并将其与parentID和信息一起存储。如果我重命名某个高级段,那么我需要更新包含给定段的所有行。

然后我认为会存储每个细分以及信息及其级别:

SELECT FROM items WHERE key=house AND level=1 AND key=room AND level=2

如果URL可以任意深入,我该如何解决这个问题呢?

1 个答案:

答案 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函数以获取更多语法详细信息。