gpt4 book ai didi

mysql - 树的最佳数据库和模式?

转载 作者:可可西里 更新时间:2023-11-01 10:03:37 25 4
gpt4 key购买 nike

哪种数据库(和模式,如果适用)最适合存储和检索可以放置在任意定义树的任何节点上的数据(位置、时间戳)?例如:您拥有的一本书的位置:

                                     Book
| |
Home Work
| | | | |
Bedroom Bathroom Den Office Conf room
| | | | |
Closet Underbed EntCtr Closet Desk
| |
Top Shelf Bottom Shelf
XXXX

对于每个项目记录,项目的位置可能看起来不同,但可能是相同的根节点和主节点,但除此之外,项目实际所在的位置可能有不同的分支和叶子。随着每个添加的项目,树本身可以想象地增长(您可以最终向“卧室壁橱中的顶层架子”节点添加特异性,将较新的项目放置在 2-3 个子位置之一)。

我认为 SQL 数据库可能并不理想,因为树​​可以任意扩展并且可能完全不同,具体取决于用户,但不确定像 Mongo 这样的 NoSQL 数据库如何处理任何更新/扩展(比如示例书从现有节点移动到一个新的节点或更深一层)。如果使用 SQL 数据库,树级别的深度/广度可能会受到限制,但列标签可能会有所不同,另一方面,如果项目移动到新位置,Mongo 可以简单地为项目创建一个新文档。

非常感谢数据库专家的任何见解!

最佳答案

位置,尤其是那些由不同组织管理的位置,不一定是分层的。例如,俄罗斯在欧洲和亚洲。特克萨卡纳位于得克萨斯州和阿肯色州。美国邮政编码 42223 是 in Kentucky and Tennessee .地缘政治位置是图形化/网络化的。

也就是说,您可以使用邻接表轻松地在 SQL 数据库中对分层数据建模:

create table locations (
location_id int primary key,
name text not null,
parent_id int null references locations(location_id)
);

然后您可以使用递归公用表表达式 (CTE) 查询这样的表,它在每个主要数据库中都可用,MySQL 除外,但听起来切换数据库是您的一个选项。

这是一个例子:http://blog.databasepatterns.com/2014/02/trees-paths-recursive-cte-postgresql.html

如果您的数据库支持 RCTE,则您不需要嵌套集、物化路径或闭包表。

关于mysql - 树的最佳数据库和模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30815429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com