我有一个C ++键/值表,如下所示:

class kvBucket {
   ...
   map<string, kvBucket*> buckets;
   map<string, string> keyPairs;
   ...
}
class kvTree {
   ...
   kvBucket base;
   ...
}


我想将其从内存结构转换为在数据库(sqlite3)中实现的结构。由于存储桶嵌套,我不确定如何表示架构。这是示例数据:

bucket | key | value
------   ---   -----
   a      v      1
  a/b     w      2
  a/b     x      3
 a/b/c    y      4
   d      z      5


在C ++结构中,我具有成员函数,这些成员函数可以执行以下操作:检索另一个存储桶下的存储桶列表,或检索存储桶路径下的键/值对列表,等等。我需要对数据库进行相同的操作。有没有有效的方法来设计架构来做到这一点?

最佳答案

没有有效的方法来表示关系存储中的层次结构关系。键值存储(您可能已经听说过,近来它们风靡一时)在此方面表现更好,但通常不提供SQL层。如果您希望能够移动各个存储桶,则将所有存储桶放在某个路径下将需要多个查询(如果您不想移动存储桶,则可以使用已有的方案并在存储区名称上进行子字符串搜索,以查找类似"a/*"的内容。

也就是说,即使没有每个存储桶都存储自己的完整路径,您也可以执行此操作:您需要从bucketbucket的自对多关系映射。您需要两个表,一个用于存储桶,一个仅用于映射。在映射表中,您有两列parent_bucketchild_bucket。在bucket表中,您有三个bucket_idkeyvalue

07-24 09:46
查看更多