Mysql

1 個應用程序中有 2 個使用者 ID

  • July 16, 2017

我有這張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的所有內容

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