1. 程式人生 > >多對多表的設計小案例

多對多表的設計小案例

多對多資料表設計

  場景模擬:

    員工與角色:一個員工可以扮演多個角色,一個角色可以被多個員工扮演

    三張表:  employee,role,(關係表)emp_role

        employee 中的eid,關聯到關係表中的r_eid,然後可以找到和r_eid同一行的一個或多個r_rtype 利用r_rtype 又可以到role表中找到rtype對應的rname,這樣從第一張表的員工id到中間表的繫結關聯,根據中間表的rtype欄位可以引用到第三章表(role)表中,從而獲取role表中的rname。如下圖:

  

 

DROP TABLE IF
EXISTS 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 INT
PRIMARY 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), CONSTRAINT
fk_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);