存储具有重复元素的数组

时间:2017-12-17 17:18:04

标签: sql node.js postgresql

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

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

例如,广告资源可能是[1, 2, 3, 3, 3, 4],但最好不要将1,2,3,3,3,4存储为长重复列表。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分: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;
}