我正在考虑在我的应用程序中使用 PostgreSQL 的Ltree 模块来帮助处理线程注释。我一直在关注它用于线程评论。我认为它会在您需要更新节点及其子节点的情况下有所帮助,例如当您想要隐藏评论及其回复时。
我认为 ltree(或类似的东西)如果与传统的邻接列表(“comment_id”/“parent_comment_id”)结合使用会很有用。
在开始使用 ltree 之前,我想知道一些事情:
- 您是否使用过 ltree?这就是所谓的“生产就绪”吗?
- 如果是这样,你用它解决了什么问题?它做得好吗?
- 你认为它适合线程评论系统吗?
- 如果你使用它,你在路径的“文本”部分使用了什么?您是否设置了类似于他们使用“Top.Astronomy.Cosmology”的 DMOZ 示例或基于主键“1.403.29.5”之类的东西?
- 有一个更好的方法吗?使用嵌套列表方法我有点紧张——我读过的所有内容都表明,UPDATES 或 INSERTS 并不是很热(你不需要重新排序吗?)。我也不是 CS 专业的,这种数据结构是我将来可能会忘记的东西。有人使用嵌套列表来发表评论或类似的东西吗?
如果有任何帮助,这是我正在考虑的架构:
CREATE TABLE comments (
comment_id SERIAL PRIMARY KEY,
parent_comment_id int REFERENCES comments(comment_id) ON UPDATE CASCADE ON DELETE CASCADE,
thread_id int NOT NULL REFERENCES threads(thread_id) ON UPDATE CASCADE ON DELETE CASCADE,
path ltree NOT NULL,
comment_body text NOT NULL,
hide boolean not null default false
);
ltree 使用的“路径”列看起来像:
<thread_id>.<parent_comment_id_#1>.<parent_comment_id_#2>.<my_comment_id>
在路径中使用主键有什么问题吗?我应该在路径中包含节点自己的主键吗?如果我这样做了,在其上放置一个唯一索引作为约束是否有意义?