多对多表的设计小案例

多对多数据表设计

  场景模拟:

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

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

原文地址:https://www.cnblogs.com/deepSleeping/p/9982473.html

时间: 2024-08-30 13:01:02

多对多表的设计小案例的相关文章

Hibernate映射多对多双向关联关系(小案例)

多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 private Integer pid; //名称 private String pname; //定义集合类型的Emp属性 private Set<Emp> emps=new HashSet<Emp>(); public Integer getPid() { return pid; }

数据库 一对多,多对多 表设计

做一个项目,必然是少不了数据库设计的!在学习阶段,基本都是单表.然而在实际开发过程中,一对多,多对多的表处处都是!简单整理一下,一对多,多对多表如何设计整理一下思路:     数据库实体间有三种对应关系:一对一,一对多,多对多. 一对一关系示例: 一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号. 一对多关系示例: 一个学生只属于一个班,但是一个班级有多名学生. 多对多关系示例: 一个学生可以选择多门课,一门课也有多名学生. 1.一对多关系处理:        通过学生和班级问题了解

几个数据库的小案例(一):将文本文件中的信息导入数据库的表中

从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  ) //FrmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

使用pd设计表的 多对多的中间表的设计方式, 有图有真相

设计多对多表时解决重复问题 目前流行两种设计方式: 方式一 是在中间表中建一个单独的id主键, 与业务表关联的键设置为unique唯一; 干事二: 联合主键的方式, 该方式中间表不会有与业务表无关的主键,即把与业务表关联的键 进行联合 作为主键 下面是使用pd来设计表的两种详细方式 方式一: 中间表采用一个单独的id主键与业务表无关 双击表模型选择keys添加你想要设置的唯一主键名 双击红色方框前面的箭头计入该键内部选择Mysql勾上 Unique key 然后选择columns添加要设置唯一的

10.15 iptables filter表小案例;10.16—10.18 iptables nat

扩展: 1. iptables应用在一个网段: http://www.aminglinux.com/bbs/thread-177-1-1.html 2. sant,dnat,masquerade: http://www.aminglinux.com/bbs/thread-7255-1-1.html 3. iptables限制syn速率: http://www.aminglinux.com/bbs/thread-985-1-1.html 10.15 iptables filter表小案例 ipta

十(4)iptables语法、iptables filter表小案例、iptables nat表应用

                                    iptables语法 filter表: INPUT链:作用于进入本机的包 OUTPUT链:作用于送出本机的包 FORWARD链:作用于和本机无关的包 nat表: PREROUTING链:作用是包在刚刚到达防火墙时改变包的目标地址 OUTPUT链:改变本地产生的包的目标地址 POSTROUTING链:作用是在包将离开防火墙时改变包源地址 1.查看iptables规则 iptables -nvL  (此时默认查看filter表,

三十二、iptables filter表小案例、iptables nat表应用

一.iptables filter表小案例 需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.188.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口. 这个需求写一个脚本,内容如下: # vi /usr/local/sbin/iptables.sh #! /bin/bash ipt="/usr/sbin/iptables"      //ipt:定义了一个变量,应写绝对路径. $ipt -F $ipt -P

小程序支付-再次签名-商城表的设计-热销产品展示

后台的login功能实现 from rest_framework.views import APIView from rest_framework.response import Response from django.core.cache import cache from app01 import models import hashlib,time from app01.wx import wx_Login class Login(APIView): def post(self,requ

android闹钟小案例之知识点总结

上一篇文章对近期做的小闹钟做了功能阐述,现在来总结下整个开发过程中所用到的一些知识点: 1.TimePicker的监听 TimePicker控件是整个应用的核心,其它的操作都得基于对该控件的正确操控.对该控件的操作重要就是为其设置监听器,在监听事件中获取用户设置的时间. private Calendar calendar=Calendar.getInstance();//创建calendar对象 private class OnTimeChangedListenerImpl implements