我目前正在设计一个数据库,不确定如何最好地处理对象中动态大小的数组字段。我的第一反应是在对象中使用一列来存储整数数组。然而,我读得越多,就越觉得这不是最佳选项。举个具体例子,我有一个玩家对象,存储着0到多个物品,这些物品由一个整数表示。那么,最好的表示方法是什么呢?
我目前正在设计一个数据库,不确定如何最好地处理对象中动态大小的数组字段。我的第一反应是在对象中使用一列来存储整数数组。然而,我读得越多,就越觉得这不是最佳选项。举个具体例子,我有一个玩家对象,存储着0到多个物品,这些物品由一个整数表示。那么,最好的表示方法是什么呢?
如果这一组值是原子化的,就将它们存储在一起。也就是说,如果你总是关心整个组合,从未搜索嵌套值,并且从不按嵌套值排序,则应将它们作为单个字段值存储在一起。
如果不是,则应将它们存储在一个单独的表中,每个值成为一行,每个行都分配一个父ID(外键),指向另一个表上“拥有”它们的记录。
例如,科学仪器产生的读数集合只被当做一组进行分析,应该存储在一个字段中。相反,客户电话号码列表可能需要经常查询某个单独的号码,因此应该将其拆分为单个电话号码,并存储在相关的子表中。
要了解更多信息,请搜索术语“数据库规范化”。
一些数据库支持数组作为数据类型。例如,Postgres允许您将列定义为一维数组,甚至是二维数组。
如果数据库不支持数组作为列定义类型,则您可能有三个替代方案: