哪个数据库(和模式,如果适用)最适合存储和检索可以放置在任意定义的树的任何节点上的数据(位置,时间戳)?例如:您拥有的书籍的位置:
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可以简单地为项目创建新文档。
非常感谢数据库专家的任何见解!
答案 0 :(得分:2)
地点,尤其是由不同组织管理的地点,不一定是分层的。例如,俄罗斯位于欧洲和亚洲。特克萨卡纳位于德克萨斯州和阿肯色州。美国邮政编码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,则不需要嵌套集,物化路径或关闭表。
答案 1 :(得分:1)
当你说" SQL DB"我认为您引用的是 关系数据库 。为此,您似乎需要 分层数据库 。您可以在关系数据库中获得这样的结构。它被称为嵌套集模型。请参阅:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/