Mysql

兩個外鍵引用一個主鍵

  • April 5, 2018

我想創建一個記錄兩個使用者之間交易的數據庫。使用者可以將積分(將其視為金錢)轉移給另一個使用者。user表看起來像:

| userID        |    name       |      email       |   balance  |
| ------------- |---------------|------------------|------------|
| 101           | alpha         | alpha@mail.com   |   1000     |
| 102           | bravo         | bravo@mail.com   |    500     |
| 103           | charlie       | charlie@mail.com |   2000     |

transaction表應如下所示:

| transactionID |  from_user    |   to_user        | transfer_amount  |
| ------------- |---------------|------------------|------------------|
|   1           | 101           |       103        |   100            |
|   2           | 102           |       101        |   150            |
|   3           | 102           |       103        |   200            |

我試圖用Vertableo繪製一個模式,它似乎沒有一對零或多個關係選項。但是使用者可能根本不會發送或接收積分,因此關係應該是一對零或多。但是,Vertableo 上的此架構會引發錯誤reference name must be unique

在此處輸入圖像描述

有人可以提示繪製模式或提供 SQL 程式碼嗎?

範例 SQL 程式碼(使用 MySQL Workbench 創建):

CREATE TABLE `test`.`user` (
 `iduser` INT NOT NULL,
 `username` VARCHAR(45) NULL,
 PRIMARY KEY (`iduser`));


CREATE TABLE `test`.`transfer` (
 `transactionID` INT NOT NULL,
 `from_user` INT NULL,
 `to_user` INT NULL,
 `transfer_amount` FLOAT NULL,
 PRIMARY KEY (`transactionID`),
 INDEX `from_user_key_idx` (`from_user` ASC),
 INDEX `to_user_key_idx` (`to_user` ASC),
 CONSTRAINT `from_user_key`
   FOREIGN KEY (`from_user`)
   REFERENCES `test`.`user` (`iduser`)
   ON DELETE NO ACTION
   ON UPDATE NO ACTION,
 CONSTRAINT `to_user_key`
   FOREIGN KEY (`to_user`)
   REFERENCES `test`.`user` (`iduser`)
   ON DELETE NO ACTION
   ON UPDATE NO ACTION);

這行得通。但是,如果您想查詢“轉移”表並想用 ID 替換使用者名,它會變得有點複雜。下面是一個範例查詢:

select a.username as from_user, b.username as to_user, transfer_amount
from transfer
inner join user a
on transfer.from_user = a.iduser
inner join user b
on transfer.to_user = b.iduser;

引用自:https://dba.stackexchange.com/questions/203114