将C ++键/值结构转换为数据库(sqlite3)

时间:2012-01-26 06:04:44

标签: c++ sql database sqlite schema

我有一个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 ++结构中,我有成员函数,可以执行诸如在另一个存储桶下检索存储桶列表,或者在存储桶路径下检索键/值对列表等等。我需要执行相同的操作。数据库。是否有一种有效的方法来设计模式来执行此操作?

1 个答案:

答案 0 :(得分:1)

没有高效的方式来表示关系存储中的层次关系。键值存储(你可能听说过它们,它们现在风靡一时)比它更好但通常不提供SQL层。如果你想要移动存储桶,那么在特定路径下获取所有存储桶将需要多个查询(如果你不想移动存储桶,你可以使用你已经到达的方案并对存储桶名称执行子字符串搜索,例如"a/*")。

也就是说,即使没有每个存储桶存储其自己的完整路径,您也可以这样做:您需要从bucketbucket的自我多对多关系映射。您需要两个表,一个用于存储桶,另一个用于映射。在映射表中,您有两列parent_bucketchild_bucket。在bucket表中,您有三个,bucket_idkeyvalue