Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 最佳数据库&;树的模式?_Mysql_Mongodb_Database Design_Database - Fatal编程技术网

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,则不需要嵌套的集合、物化的路径或闭包表

您完全可以在关系数据库中表示一棵树,但是有许多不同的方法,每种方法都有不同的权衡。如果没有关于您打算进行哪些查询和转换的详细信息,就不可能回答哪一个是最好的。