我有一个如下所示的 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
开始的 self 到 self 的多对多关系映射。至 bucket
.您需要两张表,一张用于存储桶,一张仅用于映射。在映射表中有两列,parent_bucket
和 child_bucket
.在bucket
表你有三个,bucket_id
, key
, 和 value
.
关于c++ - 将 C++ 键/值结构转换为数据库 (sqlite3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9014491/