Mysql
1 個應用程序中有 2 個使用者 ID
我有這張
user
桌子和application
桌子。現在在 1 個應用程序中有兩個使用者可以訪問該應用程序。一個是申請人,另一個是審批人。我將如何設計它們之間的關係,以便在我進行交易時兩個 id 都會出現在應用程序中
CREATE TABLE user( UserId INTEGER(9) NOT NULL, Name VARCHAR(32) NOT NULL, Usertype VARCHAR(32) NOT NULL); CREATE TABLE application( AppNo VARCHAR(32) NOT NULL, UserId INTEGER(9) NOT NULL, other INTEGER NOT NULL);
按以下方式對數據建模:
CREATE TABLE user ( UserID INTEGER(9) NOT NULL PRIMARY KEY, Name VARCHAR(32) NOT NULL, Usertype VARCHAR(32) NOT NULL ); CREATE TABLE application ( AppNo VARCHAR(32) NOT NULL PRIMARY KEY, ApplicantID INTEGER(9) NOT NULL REFERENCES user(UserId), ApprovingOfficerID INTEGER(9) NOT NULL REFERENCES user(UserId), other INTEGER NOT NULL );
注意外鍵約束。他們確保兩者和在表中都是有效的。
REFERENCES
ApplicantID``ApprovingOfficerID``UserID``user
設置一些樣本數據:
INSERT INTO user (UserId, Name, UserType) VALUES ( 1, 'John Doe', 'user'), (100, 'Bob Spongy', 'supervisor') ; INSERT INTO application (AppNo, ApplicantID, ApprovingOfficerID, other) VALUES ('APPX1234', 1, 100, 9999) ;
並在兩個不同的別名 ( , ) 下兩次查詢連接到使用者表。
app``apr
SELECT a.AppNo, a.ApplicantID, app.Name AS ApplicantName, a.ApprovingOfficerID, apr.Name AS ApprovingOfficerName, other FROM application a JOIN user app ON app.UserID = a.ApplicantID JOIN user apr ON apr.UserID = a.ApprovingOfficerID
你會得到
申請號 | 申請人ID | 申請人姓名 | 審批人ID | 審批人姓名 | 其他 :------- | ----------: | :------------ | -----------------: | :------------------- | ----: APPX1234 | 1 | 約翰·多伊 | 100 | 鮑勃海綿 | 9999
執行查詢時,您可以
JOIN
根據需要創建任意數量的表(或子查詢)。如果您需要JOIN
多次使用同一張表,則需要ALIAS
對每個外觀使用一個,以便能夠區分它們。你可以在*這裡*查看dbfiddle的所有內容