我正在开发一个项目,每个用户都有一个库存,这实际上只是一个与项目中的实际内容相对应的ID数组。
要存储库存,我想使用Postgres,只是将数据序列化/反序列化为字符串格式。但是,在这个数组中,很可能它们会有许多单个ID。这些ID都是整数,所以我计划用逗号连接它们并在检索过程中将它们分开。
例如,广告资源可能是[1, 2, 3, 3, 3, 4]
,但最好不要将1,2,3,3,3,4
存储为长重复列表。
是否有一种有效的方法来存储重复的项目?
答案 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;
}