sql多对多自引用关联(sequelize.js)

dpiehjr4  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(579)

只是想知道下面的事情是否合适。
我有一个 User 表,其中用户可以是买方或卖方。我有一个 Sale 用于记录用户销售/购买的项目的表。
我现在正打算 User 如下所示的起始架构:

id
user_name
display_name
... (other attrs)

Sale 会有这样一个起始模式:

id
product_id
price
... (other relevant attrs)

我想问的是联想。在我看来有两种方法。我们可以分别为买方和卖方建立2个多对多规则,或者 sale 属于 User 买方和卖方各一次。最终状态是一样的,但我不确定哪种方式更好/推荐,为什么。
选项1(使用sequelize.js格式):

User.belongsToMany(User, {
    through: Sale,
    as: 'buyer',
    foreignKey: 'buyer_id',
}

User.belongsToMany(User, {
    through: Sale,
    as: 'seller',
    foreignKey: 'seller_id',
}

方案2:

Sale.belongsTo(User, {
    foreignKey: 'seller_id',
}

Sale.belongsTo(User, {
    foreignKey: 'buyer_id',
}

最后,这两个选项都会生成外键列 buyer_id 以及 seller_id 添加到 Sale 模型。但是你会推荐哪种方法呢?为什么?

p4tfgftt

p4tfgftt1#

Sale 是实现买卖双方之间多对多关系的关联表。

id
product_id
price
seller_id
buyer_id
... (other attrs)

请注意 Sale 表通常用于olap,因此它稍微被反规范化了。在oltp中,通常有文档或事件表,其中在头中包含卖方和买方id。即

orders
----
id
date
seller_id
buyer_id
...

order_items
----
order_id
item_index
product_id
price
qty
....

相关问题