【问题标题】:storing array of strings in postgres using sequelize?使用sequelize在postgres中存储字符串数组?
【发布时间】:2021-02-21 01:21:06
【问题描述】:

我目前有一个帖子表和一个用户表。

我的帖子模型:

id: {
  type: Sequelize.INTEGER,
 },
 title: {
  type: Sequelize.STRING,
},
images: {
  type: Sequelize.STRING,
  },

我的用户模型:

id: {
  type: Sequelize.INTEGER,
},
name: {
  type: Sequelize.STRING,
},

每个用户可以有多个帖子,每个帖子只能有一个用户。

协会:

Users.hasMany(Posts, {
 foreignKey: "id",
});

 Posts.belongsTo(Users, {
 foreignKey: "id",
 });

在我的帖子表中,images 是一个字符串,用户可以在一个帖子中发布许多图像(因此是图像文件名数组)。

在我的 post 方法中,我使用 JSON.stringify 将图像文件名作为字符串存储在数据库中,因为没有 JSON.stringify 我收到错误消息,指出图像不能是对象或数组。经过数小时的研究,我发现在数组上使用 JSON.stringify 并不是最佳实践。

如果这是正确的,那么我应该如何使用 sequelize 在 Postgres 中存储我的图像文件名数组?

【问题讨论】:

    标签: node.js arrays postgresql sequelize.js


    【解决方案1】:

    在我的帖子表中,images 是一个字符串,用户可以在一个帖子中发布许多图像(因此是图像文件名数组)。

    如果我对这件事说教,请原谅我,但你应该改过自新,回到规范化关系数据建模的黄金之路。

    将关系存储为“外键”数组似乎很直观,但我向你保证,从长远来看,你会受到影响:

    • 你不能通过约束来强制关系,这会导致不一致

    • 任何通过该关系连接表的尝试都将导致不必要的复杂 SQL 语句,这些语句无法很好地执行和扩展

    • 添加新关系意味着修改(即重写)可能很大的表行

    使用“联结表”对此类关系进行建模:此类表由两个外键组成,每个外键都指向一个相关的表。条目表示两个引用的行是相关的。

    如果一张图片只能属于一个帖子,解决方法就更简单了:给images表添加外键约束。

    【讨论】:

    • 应该是这样的 Images.belongsTo(Posts, { foreignKey: "postId", }); Posts.hasMany(Images, { foreignKey: "postId", });
    • 抱歉,我对 Javascript 或您正在使用的 ORM 没有任何概念。
    • 我正在使用 Sequelize ORM
    • 是的,您应该按照自己的方式标记它,但由于我不知道这个工具,所以我无法告诉您如何使用它创建外键约束。
    猜你喜欢
    • 2017-07-23
    • 2019-07-02
    • 2017-01-28
    • 2012-05-12
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    相关资源
    最近更新 更多