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

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

最佳答案

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

也就是说,您甚至可以在不让每个存储桶都存储自己的完整路径的情况下做到这一点:您需要从 bucket 开始的 self 到 self 的多对多关系映射。至 bucket .您需要两张表,一张用于存储桶,一张仅用于映射。在映射表中有两列,parent_bucketchild_bucket .在bucket表你有三个,bucket_id , key , 和 value .

关于c++ - 将 C++ 键/值结构转换为数据库 (sqlite3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9014491/

相关文章:

c++ - 避免 GUI 在多线程操作时卡住

c++ - 模板函数作为模板参数

sql - 使用sql从表中获取不可用值的列表

java - 为 Derby DB 使用 PreparedStatement 时出现 SQLException

mysql - phpmyadmin 下划线赋予错误数据库权限

sql - 插入后 SQL 代码中的西里尔符号不正确

c# - 如何使用 Winforms C# 或 C++ .Net 修改 jpg 文件中的方向 exif 标记而不更改文件中的任何其他内容

mysql - BETWEEN 无法正常工作

sql - 如何在 Postgres 9.6+ 中生成长度为 N 的随机、唯一、字母数字 ID?

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?