首页 > 其他 > 详细

数据表多对多

时间:2014-03-20 04:38:27      阅读:516      评论:0      收藏:0      [点我收藏+]

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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)
)

bubuko.com,布布扣

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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‘);

进行查询  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*查询某个人拥有某个角色*/
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;

  

  

数据表多对多,布布扣,bubuko.com

数据表多对多

原文:http://www.cnblogs.com/ylfeiu/p/3612252.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!