SQL 数据库关系 : correct implementation of Junction Model in manyToMany relationship?

标签 sql postgresql database-design sequelize.js

我有两个数据库表“用户”和“交易”,它们之间存在多对多关系。我创建了一个 Junction 模型,它将有两个外键列(UserId、TransactionId)并将跟踪关联。 Transaction 表有两列,我在其中跟踪发件人和收件人是谁(senderAccount、recipientAccount)。
问题 1:由于每个交易属于两个用户,即发送方和接收方,我是否还需要在联结模型中同时指定 senderId 和 receiverId 而不仅仅是 userId?
注意:我的困惑来自联结模型中的两个外键列(UserId 和 TransactionId)。我知道只有一个事务,您可以在联结模型中通过其 id 引用该事务,但是每个事务也由两个用户(发送者和接收者)拥有,我们不应该引用联结模型中的两个用户吗?
问题 2:如果我在这里的类比是正确的,您将如何在联结模型中同时引用 senderId 和 receiverId?
问题 3:如果我在这里的类比不正确,请帮助我理解您将如何在连接模型中引用两个用户。
用户表

id | username | 
—--+----------+
 1 | ijiej33  |    
交易表
id | transactionId | senderAccount | recipientAccount | Amount |
—--+---------------+---------------+------------------+--------+
 1 | ijiej33       |      A        |         B        |   100  |  
userTransaction 表(连接模型)
userId | TransactionId |
-------+---------------+
       |               |

最佳答案

正如我在 your question from yesterday 中作为评论所解释的那样,事务和用户之间没有多对多关系。从交易到用户,您有两种多对一的关系。因此,您不需要连接表。
这样建模:

create table users (
  user_id serial primary key,
  user_name text not null unique
);

create table transaction ( 
  transaction_id serial primary key,
  sender_account int not null references users(user_id),
  recipient_account int not null references users(user_id),
  amount numeric
);

关于SQL 数据库关系 : correct implementation of Junction Model in manyToMany relationship?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65883976/

相关文章:

mysql - 关于消息系统DB表结构的建议

mysql:选择所有被通知的人

sql - 搜索sql函数

mysql - 如何将这两个查询从 Mysql 转换为 Postgresql? :

windows - Windows 7下PostgreSQL pg_ctl注册报错

mysql - 从第一个表开始引用另一个表的最有效方法是什么?

sql - 使用 Bigquery 的库和 api 进行查询是否有限制?

sql - 如何用查询结果声明变量?

mysql - 字段列表中的未知表

Grails 无法连接到数据源,但 psql 可以吗?