zoukankan      html  css  js  c++  java
  • 多对多表的设计小案例

    多对多数据表设计

      场景模拟:

        员工与角色:一个员工可以扮演多个角色,一个角色可以被多个员工扮演

        三张表:  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);

  • 相关阅读:
    C# log4net 的配置
    C# 泛型
    Word 2013 基本概念与常用操作
    DataGridViewComboBoxColumn 事件过程分析
    C#垃圾回收机制
    Ceph分布式存储之三-S3接口编程
    .NET特性(Attribute)的应用
    24.Odoo产品分析 (三) – 人力资源板块(5) – 出勤(1)
    23.Odoo产品分析 (三) – 人力资源板块(4) – 招聘流程(1)
    22.Odoo产品分析 (三) – 人力资源板块(3) – 休假管理(1)
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/9982473.html
Copyright © 2011-2022 走看看