【问题标题】:How to efficiently create a large SQLite database with variable numbers of fields in rows?如何有效地创建具有可变数量字段的大型 SQLite 数据库?
【发布时间】:2012-06-25 16:56:24
【问题描述】:

我启动了 SQLite 数据库浏览器并找到了 Blob、Int 和 Text 数据类型。还有一个框可以命名您自己的类型,但我希望这些不会在 SQLite 中得到广泛支持。

如果我的记录具有可变数量的字段(每个字段都是字段本身的组合,例如 int 和 text),我将如何将它们放入表中?我猜我需要为这些制作另一张桌子。没有更优雅的解决方案吗?尤其是在使用 SQLite 数据库管理器手动创建数据库方面。

【问题讨论】:

标签: sql sqlite database-management


【解决方案1】:

您可以将动态字段名称存储在两个表设置中。

创建两个表...标题和详细信息。标题将保存主 ID 以及记录的所有行共有的任何信息。详细信息将保存标题中的 ID、“列名”和列值。

Create table header (id int, desc character varying)

Create table details (id int, header_id int, column_name character varying, column_value character varying)

了解结构的想法?它被称为名称值对关系(实体/属性),并且可以为单个标题记录存储任意数量的“列”......然后您需要旋转(或一起构建)详细信息表以读取其中的信息(可以作为视图完成)

【讨论】:

  • 所以第二个表会产生需要自己的主键的开销?习惯了原生结构,我一直希望索引就足够了,因为它是免费的。
  • 你是对的,它不需要它自己的密钥.... id, column_name 也可以。我个人的偏好是通常将单个 int 列作为主要列,但它是可选的。
  • 嘿,对不起...意味着你是正确的 header_id,column_name 将适用于 ID。
【解决方案2】:

这将是典型的一对多关系。是的,为这些字段创建另一个表,并添加一个附加列,即它所依赖的记录的 ID。

如果这些字段不包含太多数据(它们是数字或标签),在 SQLite 中,有时最好将它们作为逗号(或其他符号)分隔的值存储在 TEXT 列中。

【讨论】:

    猜你喜欢
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2015-07-10
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多