我有一个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/*"
的内容。
也就是说,即使没有每个存储桶都存储自己的完整路径,您也可以执行此操作:您需要从bucket
到bucket
的自对多关系映射。您需要两个表,一个用于存储桶,一个仅用于映射。在映射表中,您有两列parent_bucket
和child_bucket
。在bucket
表中,您有三个bucket_id
,key
和value
。