数据库总结(一):基本SQL

数据库总结(二):基本查询

数据库总结(三):分组,联结

数据库总结(四):表设计之关联关系

数据库总结(五):视图,约束,索引

表设计之关联关系

一对一

  • 什么是一对一:有A和B两张表,A表中的一条数据对应B表中的一条数据,同时B表的一条数据也对应A表的一条,称为一对一的关系。
  • 应用场景: 用户表和用户信息扩展表 ,商品表和商品详情表
  • 如何建立一对一的关系:在从表中添加外键指向主表的主键建立关系
  • 练习:创建用户表和用户详情表并保存以下信息
    user:id,username,password userinfo:user_id,nick,qq
  • 创建表
    create table user(id int primary key auto_increment,username varchar(10),password varchar(10));
    create table userinfo(user_id int,nick varchar(10),qq varchar(15));
    用户名 密码 昵称 qq
    libai admin 小白白 112233
    liubei 123456 刘皇叔 667788
    diaochan 112233 媳妇儿 998877
    -插入数据:
    insert into user (username,password) values(‘libai’,‘admin’),(‘liubei’,‘123456’),(‘diaochan’,‘112233’);
    insert into userinfo values(1,‘小白白’,‘112233’),(2,‘刘皇叔’,‘667788’),(3,‘媳妇儿’,‘998877’);
  1. 查询每个用户的用户名,昵称和qq
    select u.username,ui.nick,ui.qq
    from user u join userinfo ui
    on u.id=ui.user_id;
  2. 查询小白白的用户名和密码
    select u.username,u.password
    from user u join userinfo ui
    on u.id=ui.user_id where ui.nick=‘小白白’;
  3. 查询貂蝉的所有信息
    select *
    from user u join userinfo ui
    on u.id=ui.user_id where u.username=‘diaochan’;

一对多

  • 什么是一对多:有AB两张表:A表中的一条数据对应B表的多条数据,同时B表的一条数据对应A表的一条

  • 应用场景:商品表和分类表 员工表和部门表

  • 如何建立关系: 在两张表中多的表中添加外键指向另外一张表的主键

  • 练习: 创建数据库db5并使用,创建员工表和部门表并保存以下数据
    emp:id name dept_id dept:id name

  • 创建表:
    create database db5;
    use db5;
    create table emp(id int primary key auto_increment,name varchar(10),dept_id int);
    create table dept(id int primary key auto_increment,name varchar(10));

    神仙部的员工 悟空和八戒
    妖怪不的员工 蜘蛛精和白骨精

  • 插入数据:
    insert into dept values(null,‘神仙’),(null,‘妖怪’);
    insert into emp values(null,‘悟空’,1),(null,‘八戒’,1),(null,‘蜘蛛精’,2),(null,‘白骨精’,2);

  1. 查询每个部门对应的员工姓名
    select d.name,e.name
    from emp e join dept d
    on e.dept_id=d.id;
  2. 查询八戒的部门名称
    select d.name
    from emp e join dept d
    on e.dept_id=d.id where e.name=‘八戒’;
  3. 查询妖怪部有谁
    select e.name
    from emp e join dept d
    on e.dept_id=d.id where d.name=‘妖怪’;

多对多

  • 什么是多对多:AB两张表,A表中一条数据对应B表多条,同时B表中一条数据对应A表多条称为多对多
  • 应用场景: 老师表和学生表
  • 如何建立关系:创建一张关系表,在关系表中添加两个外键指向另外两张表的主键
  • 练习:创建老师和学生表保存以下信息
  • 创建表:teacher:id name student:id name t_s:tid,sid
    create table teacher(id int primary key auto_increment,name varchar(10));
    create table student(id int primary key auto_increment,name varchar(10));
    create table t_s(tid int,sid int);
  • 保存以下数据:
    苍老师:小明 小红 小绿 小黄
    王老师:小明 小红
    insert into student values(null,‘小明’),(null,‘小红’),(null,‘小绿’),(null,‘小黄’);
    insert into teacher values(null,‘苍老师’),(null,‘王老师’);
    insert into t_s values(1,1),(1,2),(1,3),(1,4),(2,1),(2,2);
  1. 查询每个老师姓名和对应的学生姓名
    select t.name,s.name
    from teacher t join t_s ts
    on t.id=ts.tid
    join student s
    on s.id=ts.sid;
  2. 查询苍老师的学生姓名
    select s.name
    from teacher t join t_s ts
    on t.id=ts.tid
    join student s
    on s.id=ts.sid where t.name=‘苍老师’;
  3. 查询小明的老师都有谁
    select t.name
    from teacher t join t_s ts
    on t.id=ts.tid
    join student s
    on s.id=ts.sid where s.name=‘小明’;

表设计案例: 权限管理

  • 三张主表: 用户表,角色表,权限表
  • 关系表: 用户角色关系表 角色权限关系表
  • 创建表:
    create table user(id int primary key auto_increment, name varchar(10));
    create table role(id int primary key auto_increment, name varchar(10));
    create table module(id int primary key auto_increment, name varchar(10));
    create table u_r(uid int,rid int);
    create table r_m(rid int,mid int);
  • 保存以下数据: 用户(苍老师,小明,克晶老师) 角色(男游客,男管理员,女会员,女管理员)权限(男浏览,男发帖,男删帖,女浏览,女发帖,女删帖)
    insert into user values(null,‘苍老师’),(null,‘小明’),(null,‘克晶老师’);
    insert into role values(null,‘男游客’),(null,‘男管理员’),(null,‘女会员’),(null,‘女管理员’);
    insert into module values(null,‘男浏览’),(null,‘男发帖’),(null,‘男删帖’),(null,‘女浏览’),(null,‘女发帖’),(null,‘女删帖’);
  • 用户和角色关系:苍老师(男管理员,女管理员)小明(女会员)克晶老师(女管理员,男游客)
    insert into u_r values(1,2),(1,4),(2,3),(3,1),(3,4);
  • 角色和权限关系:男游客(男浏览)男管理员(男浏览,男发帖,男删帖)女会员(女浏览,女发帖),女管理员(女浏览,女发帖,女删帖)
    insert into r_m values(1,1),(2,1),(2,2),(2,3),(3,4),(3,5),(4,4),(4,5),(4,6);
  1. 查询每个用户名称和拥有的权限名称
    select u.name,m.name
    from user u join u_r ur
    on u.id=ur.uid
    join r_m rm
    on rm.rid=ur.rid
    join module m
    on rm.mid=m.id;
  2. 查询苍老师的权限有哪些
    select u.name,m.name
    from user u join u_r ur
    on u.id=ur.uid
    join r_m rm
    on rm.rid=ur.rid
    join module m
    on rm.mid=m.id where u.name=‘苍老师’;

数据库总结(四):表设计之关联关系相关推荐

  1. oracle数据库总结(四)--表空间扩容

    1.查询当前用户的所属表空间 select * from user_users; 2:查看所有表空间的总共大小 select tablespace_name, file_id, file_name, ...

  2. 数据库用户签到表设计

    1.签到表(累计签到,写定时任务每晚23:30查询最后一次签到时间是否等于今天,不等于增清空连续签到时间) user_sign 签到表 字段 数据类型 长度 注释 id int 11 主键 user_ ...

  3. 数据库表设计、 数据库分层、myslq水平拆分、oracle表分区

    数据库表设计 数据库表结构设计方法及原则(li)数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的 ...

  4. 不定字段数目的数据库表设计和数据结构

    不定字段数目的数据库表设计和数据结构 可能采用四种技术: 动态增加数据库表字段 预留足够的空白字段,运行时作动态影射 用xml格式保存在单字段里 改列为行,用另外一个表存放定制字段 现在我们来分析一下 ...

  5. 万字归纳总结 | 数据库表设计与SQL编写技巧

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 前言 随着移动云平台系统业务不断增长,必然需要对各系统进行 ...

  6. oracle数据库纵表设计,oracle 数据库设计-数据库表设计

    在数据库设计中,我的工作中经常会分析怎样商业逻辑中的表格如何设计.再设计表的关系之前 需要先了解关系型数据库特点 1关系型数据库,是指采用了关系模型来组织数据的数据库: 2.关系型数据库的最大特点就是 ...

  7. SQL数据库不用SQL语句能显示全表的内容_MySQL DBA必读:万字归总表设计与SQL编写技巧...

    作者介绍 刘书浩,"移动云"DBA,负责"移动云"业务系统的数据库运维.标准化等工作:擅长MySQL技术领域,熟悉MySQL复制结构.Cluster架构及运维优 ...

  8. mysql 字段数量不确定_不定字段数目的数据库表设计和数据结构 | 学步园

    两难的境界:不定字段数目的数据库表设计和数据结构 昨天项目组会议上讨论的关于不定字段数目的数据库表问题并没有结果,今天继续分析之后发现问题可能还更大.当时讨论的结果是可能采用四种技术: 动态增加数据库 ...

  9. gps定位信息mysql_GPS定位数据库表设计

    1     表设计 1.1   设计思想 减少冗余数据的存储 数据写入时进行预运算 通过降低记录量提高系统的响应能力 降低磁盘的读操作 1.2   模型结构 GPS轨迹日志数据表保存原始的定位信息数据 ...

最新文章

  1. 排错经历:openstack搭建dashboard进入输入帐号密码登录后报错
  2. 分苹果问题的C++和Python实现
  3. yii2和laravel比较
  4. python list 查找find_List 泛型 集合中 Find 的用法
  5. 网络研讨会:Java 9的第一印象–构建可伸缩企业应用程序的新方法
  6. leetcode 【 Add Two Numbers 】 python 实现
  7. 4符号代码_ELF文件格式解析器 原理 + 代码
  8. 新手JDK下载与安装教程
  9. Ubuntu18.04安装TIM、微信
  10. 格兰杰因果检验_R实现
  11. matlab图像去毛刺_MATLAB数字图像处理
  12. 本周大新闻|PS VR2已确认20款大作,Magic Leap 1低价清库存
  13. JVM内存模型(一篇足以)
  14. 一键登录网易163邮箱
  15. python程序红绿灯识别_使用python创建红绿灯
  16. 用纯CSS3实现QQ LOGO
  17. STM8L151 DAC
  18. 汽车自适应巡航控制策略【CarSim/Simulink 仿真】
  19. 华擎主板简直在开玩笑
  20. FFmpeg 开发(12):Android FFmpeg 实现带滤镜的微信小视频录制功能

热门文章

  1. Mac安装office 2019
  2. Unix Sed Tutorial 2 : Delete File Lines Using Address and Patterns
  3. 计算机网络.第二节课.笔记.奈氏准则、香农公式、差分曼彻斯特编码、曼彻斯特码、单工通信、半双工通信、双工通信、码元
  4. python3利用Fiddler4抓包分析模拟saml单点登录
  5. 效率至上服务为先,在线客服系统让客服工作更轻松
  6. 表头变成英文的处理方式
  7. Oracle RAC 之 Clusterware
  8. 史上最贱恶搞软件 Cancer 来袭:不要钱,只为搞崩你的电脑,现在还弄不掉(附视频)...
  9. origin incomplete 起源属性
  10. 2015河南ACM省赛 - 小记