Mysql
兩個外鍵引用一個主鍵
我想創建一個記錄兩個使用者之間交易的數據庫。使用者可以將積分(將其視為金錢)轉移給另一個使用者。
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;