首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQLITE:包含20列和20个键值表的单个表

SQLITE:包含20列和20个键值表的单个表
EN

Stack Overflow用户
提问于 2015-03-07 10:29:42
回答 1查看 1K关注 0票数 0

我正在开发管理由组件组成的对象的系统。从性能角度看,将它们存储在SQLITE数据库中的最佳方法是什么?,如果有20种组件类型,每个组件的大小为1~10 is。通常,每个对象由4-6个不同的组件组成。

我可以看到两种选择:

  1. 将其实现为一个具有键列和20个blob列的表
  2. 使用带有键和单个blob列的20个表

我将对数据库进行的唯一查询是:按id获取组件数据、写入数据和删除数据。

PS: object类如下所示:

代码语言:javascript
运行
复制
class Entity
{
    Component *components[20];
}

通常,组件数组有4-6个非空指针。

EN

回答 1

Stack Overflow用户

发布于 2015-03-07 11:06:23

您可能需要一个实体属性值结构来存储BLOB。

代码语言:javascript
运行
复制
CREATE TABLE myObjectComponents (
   objectID          INTEGER,    -- Entity
   componentTypeID   INTEGER,    -- Attribute
   componentBLOB     BLOB,       -- Value
   PRIMARY KEY objectID, componentTypeID
)

然后,您还可以使用其他非blob值添加一个传统的"myObject“表(例如它的标识列、所有者、名称、创建和修改的时间戳等),并使用外键约束强制执行完整性。

EAV表非常灵活,有利于快速查找值列。

它们在相反的方向上非常差;“给定一个值(或值的组合),哪个实体拥有它?”但你似乎不太可能在搜索BLOB字段。

您可能需要阅读更多关于EAV的优点和优点的文章,网上有大量的参考资料。

这种结构在您的例子中的好处是,每行只有一个BLOB,而且(可能更重要的一点)它并不是人烟稀少;您将不会有容纳20个BLOB的行,但是只使用其中的4个。这将使在内存中传递相关行变得更容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28913902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档