存储具有重复元素的数组

问题描述 投票:0回答:2

我正在开发一个项目,每个用户都有一个库存,这实际上只是一个与项目中的实际内容相对应的ID数组。

为了存储库存,我想使用Postgres,只是将数据序列化/反序列化为字符串格式。但是,在这个数组中,很可能它们会有许多单个ID。这些ID都是整数,所以我打算用逗号连接它们并在检索过程中将它们分开。

例如,库存可能是[1, 2, 3, 3, 3, 4],但最好不要像1,2,3,3,3,4那样存储长重复列表。

有没有一种有效的方法来存储重复的项目?

sql node.js postgresql
2个回答
1
投票

“项目中的实际内容”应该是数据库中的另一个表。正确的关系方法是建立一个联结表:

create table userItems as (
    userItemId serial primary key,
    userId int references users(userId),
    itemId int references items(itemId)
);

然后,您可以添加其他信息 - 例如数量,价格,添加时的日期等。

在某些情况下,阵列更合适。但是,对于拥有用户和项目的普通情况,联结表将是第一种方法,最有可能解决您的问题。


0
投票

感谢Nishant,我意识到我可以将数组存储为JSON格式。有了这个,我可以像这样进行压缩(使用原始输入):

{
    "1": 1,
    "2": 1,
    "3": 3,
    "4": 1
}

这将允许我只存储JSON中每个元素的计数。

编辑:这是代码。

function(array) {
    output = {};
    array.forEach((x) => {
        output[x] = (output[x] || 0) + 1
    });
    return output;
}
© www.soinside.com 2019 - 2024. All rights reserved.