多对多表的设计小案例
Posted deepsleeping
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多对多表的设计小案例相关的知识,希望对你有一定的参考价值。
多对多数据表设计
场景模拟:
员工与角色:一个员工可以扮演多个角色,一个角色可以被多个员工扮演
三张表: 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);
以上是关于多对多表的设计小案例的主要内容,如果未能解决你的问题,请参考以下文章