目录
数据库的三范式?
MySQL数据库引擎有?
InnoDB与MyISAM的区别
数据库的三范式?
-
第一范式:是数据库最基本的要求,列不可再分
-
第二范式:行可以唯一区分,主键约束
-
第三范式:是在第二范式的基础上建立起来的,即满足第三范式必须要先满足第二范式。第三范式(3NF)要求:表中的非主键列必须和主键直接相关而不能间接相关;也就是说:非主键列之间不能相关依赖。
-
第一范式(1NF):属性不可分割 第一范式是数据库表设计的最基本要求,即每个属性(字段)都是不可分割的原子项。这意味着每个字段都应该有一个唯一的名字,而且每个字段的数据类型应该是一个单一类型,如整数、字符串、日期等。
例如,如果我们有一个“员工”表,那么每个员工都有一个唯一的“员工编号”字段,这个字段是不可再分的。同时,表中可能还包括其他字段,如姓名、性别、出生日期等,这些字段也都是不可再分的。
第二范式(2NF):满足第一范式;且不存在部分依赖 第二范式是在满足第一范式的基础上,要求每个非主属性都完全依赖于主属性。这意味着非主属性必须完全依赖于主键,而不是仅仅依赖于主键的一部分。
例如,如果我们有一个“订单”表和一个“订单详情”表,其中“订单”表有一个主键“订单编号”,而“订单详情”表有一个外键“订单编号”和一个非主属性“商品数量”。在这个例子中,“商品数量”完全依赖于“订单编号”,因此符合第二范式的要求。
第三范式(3NF):满足第二范式;且不存在传递依赖 第三范式是在满足第二范式的基础上,要求非主属性之间不存在传递依赖。这意味着非主属性必须直接依赖于主属性,而不是间接依赖于主属性。
例如,如果我们有一个“部门”表和一个“员工”表,其中“部门”表有一个主键“部门编号”,“员工”表有一个外键“部门编号”和一个非主属性“工资”。在这个例子中,“工资”直接依赖于“部门编号”,因此符合第三范式的要求。但是,如果存在一个“工资等级”表,其中有一个外键“部门编号”和一个非主属性“工资标准”,那么这个“工资标准”就间接依赖于“部门编号”,不符合第三范式的要求。
三范式是数据库规范化的一种重要方法,它有助于减少数据冗余、提高数据的一致性和完整性。第一范式要求每个属性都是不可分割的原子项;第二范式要求每个非主属性都完全依赖于主属性;第三范式要求非主属性之间不存在传递依赖。在设计数据库时,应该尽量遵守三范式的要求,以避免出现数据冗余、数据不一致等问题。 ———————————————— 版权声明:本文为CSDN博主「人不走空」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:三范式详解-CSDN博客
MySQL数据库引擎有?
mysql常用引擎包括:MYISAM、Innodb、Memory、MERGE
-
MYISAM:支持全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用空间相对较小,对事务完整性没有要求,以select、insert为主的应用基本上可以使用这引擎
-
Innodb:支持行级锁,提供了具有提交、回滚和崩溃回复能力的事务安全,支持自动增长列,支持外键约束,并发能力强,占用空间是MYISAM的2.5倍,处理效率相对会差一些
-
Memory:支持全表锁,所有数据都存储在内存中,数据处理速度快,但是安全性不高。默认使用HASH索引,检索效率非常高,但不适用于精确查找,主要用于那些内容变化不频繁的代码表
-
MERGE:是一组MYISAM表的组合
InnoDB与MyISAM的区别
-
InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
-
InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
-
InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
-
InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
-
Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;