關聯實體

關聯實體關係模型實體關係模型理論中的術語。關係型數據庫要求用一個基本關係(即一個基本表)實現多對多英語Many-to-many (data model)的數據關係。這種基本關係稱為關聯表(associative table);還有許多名字:bridge table, cross-reference table, crosswalk, intermediary table, intersection table, join table, junction table, link table, linking table, many-to-many resolver, map table, mapping table, pairing table, transition table

映射表的概念
映射表的概念

關聯表通常包含指向其他多個表的多個外鍵。從關聯表到單張數據表是多對一關係。

例子

下例是給用戶授權。有多個用戶、多種權限,每個用戶可以有0或多個權限,每種權限可以授予0或多個用戶:

CREATE TABLE Users (
    UserLogin varchar(50) PRIMARY KEY,
    UserPassword varchar(50) NOT NULL,
    UserName varchar(50) NOT NULL
);

CREATE TABLE Permissions (
    PermissionKey varchar(50) PRIMARY KEY,
    PermissionDescription varchar(500) NOT NULL
);

-- This is the junction table.
CREATE TABLE UserPermissions (
    UserLogin varchar(50) REFERENCES Users (UserLogin),
    PermissionKey varchar(50) REFERENCES Permissions (PermissionKey),
    PRIMARY KEY (UserLogin, PermissionKey)
);
 
用戶-權限例子。

SELECT語句通常使用joining把主表變為寬表:

SELECT * FROM Users
JOIN UserPermissions USING (UserLogin);

這將列出所有用戶的所有權限。

Inserting到關聯表涉及多步:首先向主表插入數據,再修改/插入關聯表。

-- Creating a new User
INSERT INTO Users (UserLogin, UserPassword, UserName)
VALUES ('SomeUser', 'SecretPassword', 'UserName');

-- Creating a new Permission
INSERT INTO Permissions (PermissionKey, PermissionDescription)
VALUES ('TheKey', 'A key used for several permissions');

-- Finally, updating the junction
INSERT INTO UserPermissions (UserLogin, PermissionKey)
VALUES ('SomeUser', 'TheKey');

參見

參考文獻

  • Hoffer, Jeffrey A.; Prescott, Mary B.; McFadden, Fred R. Modern Database Management 7th. Prentice Hall. 2004. ISBN 978-0131453203. 
  • Codd, E. F. A Relational Model of Data for Large Shared Data Banks. Communications of the ACM (ACM). 1970, 13 (6): 377–387. doi:10.1145/362384.362685.