Mysql 最佳数据库&;树的模式?
什么数据库(和模式,如果适用)最适合存储和检索可以放置在任意定义树的任何节点上的数据(位置、时间戳)?例如:您拥有的书籍的位置:Mysql 最佳数据库&;树的模式?,mysql,mongodb,database-design,database,Mysql,Mongodb,Database Design,Database,什么数据库(和模式,如果适用)最适合存储和检索可以放置在任意定义树的任何节点上的数据(位置、时间戳)?例如:您拥有的书籍的位置: Book | | Home Work | |
Book
| |
Home Work
| | | | |
Bedroom Bathroom Den Office Conf room
| | | | |
Closet Underbed EntCtr Closet Desk
| |
Top Shelf Bottom Shelf
XXXX
对于每个项目记录,项目的位置可能看起来不同,但可能是相同的根节点和主节点,但除此之外,项目的实际位置可能有不同的分支和叶。每增加一个项目,树本身就可以成长(你最终可以为“卧室壁橱中的顶层架子”节点增加特殊性,将较新的项目放在2-3个子位置之一)
我认为SQL db可能不太理想,因为树可以任意扩展,并且根据用户的不同可能完全不同,但不确定像Mongo这样的NoSQL db如何处理任何更新/扩展(例如,如果示例书从现有节点移动到新节点一级或两级)。如果使用SQL db,树级别的深度/广度可能会受到限制,但列标签可能会有所不同,另一方面,如果项目移动到新位置,Mongo可以简单地为其创建新文档
非常感谢数据库专家的任何见解 当您说“SQL DB”时,我认为您引用的是一个关系数据库。为此,您似乎需要一个层次数据库。您可以在关系数据库中获得这样的结构。它被称为嵌套集模型。请参阅:位置,尤其是由不同组织管理的位置,不一定是分层的。例如,俄罗斯在欧洲和亚洲。德克萨斯州位于德克萨斯州和阿肯色州。美国邮政编码42223。地缘政治位置是图形化/网络化的 也就是说,通过使用邻接列表,您可以轻松地对SQL数据库中的分层数据建模:
create table locations (
location_id int primary key,
name text not null,
parent_id int null references locations(location_id)
);
然后,您可以使用递归公共表表达式(CTE)查询这样的表,除了MySQL之外,在每个主要数据库中都可以使用这些表达式,但听起来切换数据库似乎是您的一个选择
下面是一个例子:
如果DB支持RCTE,则不需要嵌套的集合、物化的路径或闭包表 您完全可以在关系数据库中表示一棵树,但是有许多不同的方法,每种方法都有不同的权衡。如果没有关于您打算进行哪些查询和转换的详细信息,就不可能回答哪一个是最好的。