• 数据表多对多


    今天学习了数据表多对多,由于有图理解起来也轻松了很多,

    使用联合主键进行多对多表的关系的管理(中间表)

    create database auth character set UTF8;
    /*用户表*/
    create table users(
      id varchar(32) primary key,
      name varchar(30),
      pwd varchar(32)
    );
    /*创建角色表*/
    create table roles(
      id varchar(32) primary key,
      name varchar(30),
      des  varchar(100)
    );
    
    /*通过一个中间表映射多对多的关系,多对多就是多个一对多
    	联合主键的特点是:两个列不能同时重复
    */
    create table roleuser(
       uid varchar(32),
       rid varchar(32),
       constraint ru_pk primary key(uid,rid),
       constraint ru_fk1 foreign key(uid) references users(id),
       constraint ru_fk2 foreign key(rid) references roles(id)
    );
    
    /*创建菜单表*/
    create table menus(
      id varchar(32) primary key,
      name varchar(50),
      url  varchar(100)
    );
    /*关联角色到菜单*/
    create table rolemenu(
      mid varchar(32),
      rid varchar(32),
      constraint rm_pk primary key(mid,rid),
      constraint rm_fk1 foreign key(mid) references menus(id),
      constraint rm_fk2 foreign key(rid) references roles(id)
    )
    

    E-R图 (Entry-Relationship 实体关系图)

    写入表中几行数据进行基本分析

    insert into users values('U001','Jack','1234');
    insert into users values('U002','张三','4321');
    insert into users values('U003','Tom','1111');
    
    insert into roles values('R001','管理员','');
    insert into roles values('R002','教师','');
    
    insert into roleuser values('U001','R001');
    insert into roleuser values('U002','R002');
    
    insert into menus values('M001','系统管理','/sys.jsp');
    insert into menus values('M002','用户管理','/user.jsp');
    insert into menus values('M003','角色管理','/role.jsp');
    
    insert into rolemenu values('M001','R001');
    insert into rolemenu values('M002','R001');
    insert into rolemenu values('M003','R001');
    insert into rolemenu values('M003','R002');
    

    进行查询  

    /*查询某个人拥有某个角色*/
    select u.name,r.name
    from users u inner join roleuser ru on u.id=ru.uid
                 inner join roles r on ru.rid=r.id;
                 
    /*某角色拥有某菜单*/
    select r.name,m.name
    from roles r inner join rolemenu rm on r.id=rm.rid
                 inner join menus m on rm.mid=m.id;
    
                 
    /*查询某人拥有某个菜单*/
    select m.*
    from users u inner join roleuser ru on u.id=ru.uid
                 inner join roles r on ru.rid=r.id
                 inner join rolemenu rm on r.id=rm.rid
                 inner join menus m on rm.mid=m.id;
    

      

      

  • 相关阅读:
    FreeBSD 里面用 ADSL 来上网的设置
    功能齐全的DataGrid
    jsp中动态生成图像
    配置Struts应用解读Struts应用的两大配置文件
    spring 事务配置
    文件上传原理简单实现
    html中position两属性relative和absolute区别
    html 窗口参数详解
    hibernate联合主键的使用
    自动投票的一个脚本
  • 原文地址:https://www.cnblogs.com/ylfeiu/p/3612252.html
Copyright © 2020-2023  润新知