jdbc之数据库的设计

数据库的设计

  • 1· 多表之间的关系及实现方式

    • 一对一
    • 一对多
      在多的一方设置外键,指向另一方的主键
    • 多对多
      借助第三张表,中间至少包含两个字段,这两个字段为两张表多的主键,作为第三张表的外键
  • 2·范式
    数据库的六种范式:第一范式、第二范式、第三范式、BCNF 范式、第四范式、第五范式

    • 第一范式
      每一列都是不可以分割的原子数据项
    • 第二范式
      在第一范式的基础上,消除非主属性对主码的部门函数依赖
      1·函数依赖:A—>B,如果通过A属性的值可以找到B中唯一的值对应,则是B依赖于A
      2·完全函数依赖:A–>B,A是一个属性组,B中的值需要A属性组中所有值确定。
      例如:(学号,课程号)->分数
      3·部分函数依赖:A–>B,A是一个属性组,B中的值需要A属性组中部分值确定。,
      例如:(学号,性别,年龄,班级)–>姓名
      4·传递函数依赖:A–>B,B–>C,如果A属性(组)能够确定B的值,B属性(组)能够确定C的值,那么C传递函数依赖于A。
      5·码:一张表中,被其他所有属性完全依赖的属性(组)成为码;
      主属性:码属性组中的所有属性
      非主属性:除去码属性的所有属性
    • 第三范式
      在第二范式的基础上,消除传递依赖
  • 3· 多表查询的分类

    • 内连接:查询什么字段,从那张表,条件
      1·隐式内连接:使用where条件进行查询。
      例如:查询员工表的姓名,部门表的名称
      select emp.ename,dept.dname from emp,dept where emp.dept_id = dept.id;
      2·显示内连接:select 字段列表 from 表名称[ inner] join 表名称2 on 条件
      例如:查询员工表的姓名,部门表的名称
      select emp.ename,dept.dname from emp inner join dept on emp.dept_id = dept.id;
    • 外连接
      1·左外连接:
      select 字段列表 from 表1 left [outer] join 表2 on 条件
      可以查询的是左边表的所有数据以及交集的部分
      2·右外连接:
      select 字段列表 from 表1 right [outer] join 表2 on 条件
      可以查询的是右边表的所有数据以及交集的部分
    • 子查询
      概念:查询中的嵌套查询;
      例如:查询员工表中工资最高的员工信息
      select * from emp where emp.salary = (selet max(salary) from emp);
      子查询的不同情况:
      1·查询结果是单行单列:子查询可以作为条件,使用条件运算符去判断的。
      2·查询的结果是多行单列的:where 后面同个字段多种类型的,可以使用in来判断
      3· 查询的结果是多行多列的:子查询可以成为一张新的表参与查询。

事务

如果一个包含多个步骤的业务条件,被事务管理,那么这些操作要么同时成功要么同时失败。

  • 事务的三个操作:
    1·开启事务:start transaction;
    2·回滚:rollback;
    3·提交:commit;
  • 事务的提交方式:
    1· 自动提交:
    (mysql数据库事务默认为自动提交)(一条DML增删改语句就会自动提交一次)
    2·手动提交:
    需要先开启事务,然后再提交
    修改事务默认的提交方式的方法:
    (1)查看事务的默认方式:select @@autocommit;
    (2)修改:set @@autocommit = 0;(1–代表自动提交;0–代表手动提交)
  • 事务的四大特征:
    1·原子性:不可分割的最小操作单位,要么同时成功,要么同时失败
    2·持久性:当事务提交或者回滚后,数据库会持续化的保存数据
    3·隔离性:多个事务之间,相互独立
    4·一致性: 事务操作前后,数据总量不变

– 今天到这里,明天继续!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值