数据库之路——数据库设计

一、五种范式

1.第一范式:原子性——表的每一列都是不可分割的原子数据项。就是每个字段的信息不能拆分啦(例如三年一班就要拆为三年级和一班)~

2.第二范式:数据表里的所有数据都要和该数据表的主键有完全依赖关系。所以不符合第二范式发生在表有2个或以上主键中。就是非主键字段必须可以由唯一的主键字段组合确定啦(笔者自己的理解哈)。

例如

不符合第二范式(院系不完全依赖主键(学号,课程),知道学号或课程其中一个就可以知道院系了)                                              

学号课程成绩院系
1c语言90计算机
2c语言80计算机
3c语言85计算机
4c语言70计算机

符合第二范式(成绩由主键(学号,课程)唯一确定)

学号课程成绩
1c语言90
2c语言80
3c语言85
4c语言70

3.第三范式——属性不能传递依赖于主属性(非主键字段不能相互依赖)就是每列都要与主键有直接关系啦

不符合第三范式:学生-学院表(学号,姓名,所在学院,学院地址)

符合第三范式:学生表(学号,姓名,所在学院编号)

                          学院表(学院编号,学院名,学院地址)

4.BCNF范式——不允许出现有主键的一部分被主键另一部分或者其他部分决定

不符合BCNF经典例子:仓库管理表(仓库ID, 存储物品ID, 管理员ID, 数量)

这个数据库表中存在如下决定关系: 
   (仓库ID, 存储物品ID) →(管理员ID, 数量) 
   (管理员ID, 存储物品ID) → (仓库ID, 数量) 

所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是仓库管理表的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系: 
   (仓库ID) → (管理员ID) 
   (管理员ID) → (仓库ID) 
也就是说,(仓库ID, 存储物品ID)这个主键中的仓库ID可以被管理员ID决定,同样(管理员ID, 存储物品ID)中管理员ID也可以被仓库ID决定,所以此表应该拆分。

5、第四范式——完全一一对应关系


二、E-R图转换成关系模式

1.实体间的三种联系——1:1、1:n、m:n

(1)1:1间的转换:把任一实体的主键添加到另一实体中

(2)1:n间的转换:把1方实体的主键添加到n方实体中年

(3)m:n间的转换:两个实体各自转换成关系模式后,用两个实体中的主键和联系的属性生成另一个关系模式

  eg:R1(学号,姓名,性别)

          R2(课程编号,课程名,课程时间,课程地点)

          R3(学号,课程编号,成绩)


三、数据库优化方法

1.设计符合三范式

2.适当添加索引(主键索引,唯一索引,普通索引,全文索引)

3.适当添加存储过程,触发器,事物等

4.读写分离(主从数据库)

5.SQL语句优化(尤其是查询语句)

6.分表、分区

(1)分表:

①垂直分割:

内容主表+附加表:内容主表存储各种数据的一些公共信息,比如数据的名称,添加时间等,可以使用多个附加表,附加表存储一些数据的独特的信息。

②水平分割:通过id取模实现

(2)分区:把表存储到磁盘不同区域

①好处:a.增强可用性

               b.维护方便

               c.均衡I/O

               d.改善查询性能

②实现:CREATE TABLE 表名(1,列2......) DISTRIBUTED BY(列名)

                    PARTITION BY RANGE(分区键)

                    (PARTITION 分区1START(分区键值1)INCLUSIVE

                    PARTITION 分区2START(分区键值2)INCLUSIVE

                    PARTITION 分区3START(分区键值3)INCLUSIVE

                    ......

                    END(分区键值n)EXCLUSIVE);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值