sqlite - 在关系数据库中存储数组的最佳方式是什么?

标签 sqlite database-design relational-database

我目前正在尝试设计一个数据库,但我不太确定处理我的一个对象的动态大小数组字段的最佳方法。我的第一个想法是在我的对象中使用一个列来存储一个整数数组。然而,我读得越多,就越觉得这不是最好的选择。具体示例明智,我有一个播放器对象,它存储 0 到多个项目,用整数表示。表示这一点的最佳方式是什么?

最佳答案

如果该值集合是 atomic , 将它们存储在一起。意思是,如果您始终关心整个组,如果您从不搜索嵌套值并且从不按嵌套值排序,那么它们应该作为单个字段值一起存储。

如果不是,它们应该存储在一个单独的表中,每个值都带一行,每个值都分配了另一个表上记录的父 ID ( foreign key ),“拥有”它们作为一个组。

例如,来自科学仪器的一组读数应该一起存储在一个字段中,这些读数仅作为分析集合一起使用。相比之下,可能经常需要查询单个号码的客户电话号码列表可能应该在相关子表中的每行中分解为单个电话号码。

有关详细信息,请搜索术语“database normalization”。

一些数据库,支持数组作为data type .例如,Postgres允许您将列定义为一维数组,甚至是二维数组。

如果您的数据库不支持数组作为列定义的一种类型,那么您可能有以下三种选择:

  • XML/JSON
    将您的数据收集转换为 XMLJSON记录您的数据库是否支持该类型。例如,Postgres使用 XPath 对 XML 的存储、检索和非索引搜索提供基本支持。和 Postgres为 JSON 作为一种数据类型提供业界领先的支持,包括对嵌套值的索引支持及其 jsonb 数据类型,其中传入的 JSON 被解析并以内部定义的二进制格式存储。此功能解决了人们考虑使用所谓的“NoSQL”系统的主要原因之一,希望存储和搜索 semi-structured data .
  • 文本
    创建数据的字符串表示以存储为文本。
  • BLOB
    创建一个二进制值以存储为 binary large object (BLOB) .

关于sqlite - 在关系数据库中存储数组的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36678545/

相关文章:

java - 数据库表架构建议

javascript - JavaScript 中的 SQL.js

sql - 选择 SQLite3 中的每第 n 行

SQLite 表不存在

php - 图结构数据库和 Php

database - 一个用户书签系统数据库设计

sql - 简单的表格设计问题

mysql - 查找在特定上下文中一起出现的所有元素

android - getWritableDatabase() 抛出空指针异常

mysql - 如何建立数据库与数据库之间的关系?