我有两个数据库表“用户”和“交易”,它们之间存在多对多关系。我创建了一个 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/