多對多表的設計小案例
阿新 • • 發佈:2018-11-19
多對多資料表設計
場景模擬:
員工與角色:一個員工可以扮演多個角色,一個角色可以被多個員工扮演
三張表: employee,role,(關係表)emp_role
employee 中的eid,關聯到關係表中的r_eid,然後可以找到和r_eid同一行的一個或多個r_rtype 利用r_rtype 又可以到role表中找到rtype對應的rname,這樣從第一張表的員工id到中間表的繫結關聯,根據中間表的rtype欄位可以引用到第三章表(role)表中,從而獲取role表中的rname。如下圖:
DROP TABLE IFEXISTS emp_role; DROP TABLE IF EXISTS employee; DROP TABLE IF EXISTS role; CREATE TABLE employee( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), egender CHAR(10), ephone VARCHAR(30) ); CREATE TABLE role( rtype INTPRIMARY KEY AUTO_INCREMENT, rname VARCHAR(20) ); CREATE TABLE emp_role( r_eid INT, r_type INT, CONSTRAINT pk_r_eid_type PRIMARY KEY(r_eid,r_type), CONSTRAINT fk_employee_emp_role FOREIGN KEY(r_eid) REFERENCES employee(eid), CONSTRAINTfk_role_emp_role FOREIGN KEY(r_type) REFERENCES role(rtype) ); -- 增加員工資訊 INSERT INTO employee(eid,ename,egender,ephone) VALUES(1002125,'李永強','男','13849753654'); INSERT INTO employee(ename,egender,ephone) VALUES('馮美美','女','13754896369'); -- 增加角色資訊 INSERT INTO role(rtype,rname) VALUES(1,'高管'); INSERT INTO role(rname) VALUES('前臺'),('保潔'); -- 增加關係資訊 INSERT INTO emp_role(r_eid,r_type) VALUES(1002125,2),(1002125,3);