我目前正在尝试设计一个数据库,我不太确定接近我的一个对象的动态大小的数组字段的最佳方法.我的第一个想法是在我的对象中使用一列来存储一个整数数组.然而,我读的越多,我认为这不是最好的选择.具体的例子,我有一个玩家对象,存储0到多个项目,由一个整数表示.代表这个的最佳方式是什么?
如果该值集合为
atomic,则将它们存储在一起.这意味着,如果您始终关心整个组,如果您从不搜索嵌套值并且从不按嵌套值排序,那么它们应该作为单个字段值一起存储.
原文链接:https://www.f2er.com/sqlite/197645.html如果没有,它们应该存储在一个单独的表中,每个值带一行,每个值分配另一个表中“拥有”它们作为一个组的记录的父ID(foreign key).
例如,来自科学仪器的一组读数只能一起用作分析集合,应该一起存储在一个字段中.相反,可能经常需要针对单个号码查询的客户的电话号码列表可能被分解为相关子表中每行的单个电话号码.
有关详细信息,请搜索术语“database normalization”.
某些数据库支持将数组作为data type.例如,Postgres允许您将列定义为一维数组,甚至是二维数组.
如果您的数据库不支持将数组作为一种列定义,那么您可能有三种选择:
> XML / JSON如果数据库支持该类型的数据库,则将数据集合转换为XML或JSON文档.例如,Postgres基本支持使用XPath存储,检索和非索引式搜索XML. Postgres提供了对JSON作为数据类型的业界领先支持,包括对嵌套值的索引支持及其jsonb数据类型,其中传入的JSON以内部定义的二进制格式进行解析和存储.此功能解决了人们考虑使用所谓的“Nosql”系统,寻找存储和搜索semi-structured data的主要原因之一.
> TextCreate要存储为文本的数据的字符串表示形式.
> BLOB创建二进制值以存储为binary large object (BLOB).