首页 > 编程知识 正文

sql常用命令面试,mysql中什么是第三范式

时间:2023-05-06 19:00:59 阅读:163037 作者:2871

数据库规范化

关系数据库包括第一范式(1NF )、第二范式(2NF )、第三范式(3NF )、总线代码范式(BCNF )、第四范式(4NF )、第五范式(5NF )

第一范式(1NF ) )。

是对属性的原子性要求,要求属性具有原子性,不可再分解

像这个user表不符合第一范式。 因为region列没有原子性,可以分割为省、市、具体地址

正确的做法

第二范式(2NF ) )。

2NF是记录的唯一性,要求记录不存在唯一标识,即实体的唯一性,即部分依赖;

该表明显显示了学生信息、课程信息这两件事;

因为非主键字段必须依赖主键,这里单位依赖于上课号码,名字依赖于学校号码,所以不符合二归一化。

这样做可能会有问题。 数据冗馀为:每个记录包含相同的信息。

异常删除:删除所有学生成绩后,删除了所有课程信息;

插入异常:学生没有选课,无法记录在数据库中

更新异常:调整课程学分,调整所有行。

正确做法:学生: Student (学号,姓名);

课程: Course (课程编号、单位);

选择关系: StudentCourse (学校号码、课程号码、成绩)。

第三范式(3NF ) )。

3NF是对于字段的冗馀度,要求任何字段不能从其他字段派生,要求字段没有冗馀度,即不存在传输依赖

因为: (学号()姓名) ) (所在学校) )学校电话)。

可能有问题:数据冗余:有重复值;

更新异常:存在重复的冗馀信息,修改时需要同时修改多条记录。 否则,会发生数据不一致。

正确做法:学生:(学号、姓名、年龄、所属学院);

学院:(学院,电话)。 面试官:回答得真好。 那么,平时设计的时候遵守三种范式吗? 如果不遵守的话什么时候突破范式?

没有规则就不会成为周围的人。 一般来说,我会遵守三大范式。

如果没有冗长的数据库设计,就可以遵守所有三种模式。 但是,没有冗余的数据库并不一定是最好的数据库,为了提高运用效率,有时必须降低规范化标准,妥善保存冗余数据。

具体来说,在概念数据模型设计中,遵守第三范式,降低范式标准的工作在物理数据模型设计中进行考虑。 降低范式是增加字段,允许冗余,达到在空间上改变时间的目的。 面试官:好的,那我最后说一句,遵守和不遵守范式转换设计,也就是说反范式转换设计的优缺点是什么?

为什么数据库有范式

规范化设计的优点是可以尽量减少数据冗余,数据表更新快体积小

规范化更新操作比反向规范化更快

规范化表通常小于逆规范化

缺点是必须将多个表与查询相关联,从而导致性能降低

索引优化更难

Mysql语法

金基底层的实现原理

mysql使用Nested-Loop Join实现join算法。 有三种类型:

简单嵌套链接

上面的left join依次从驱动表table A中检索每个值,从上到下依次到非驱动表table B,返回匹配的值,最后合并所有返回值,以找到table A left join table B的结果和你的认知一样吗? 使用这种方法,如果table A为10行,table B为10行,则总共需要执行10 x 10=100次查询。

Index Nested-Loop Join

上面的left join依次从驱动表table A中检索各个值,然后前往非驱动表table B的索引进行索引查询。 对于次索引,它还与表查询有关。

Block Nested-Loop Join

如果选项卡列中没有索引,则在搜索时会首先将表的选项卡a中的数据读取到join buffer中,以便可以从join buffer中批量遍历选项卡b进行搜索。

(这样做的好处是减少tableB表的读取。 join buffer在内存中,所以读取很快,但表在磁盘上。 这就是缓存buffer的意思)

Block Nested-Loops Join算法首先将每次读取到Outer Loop表(外部表)中的10条记录(确切地说是需要联接10行的列)放入Join Buffer中,然后返回Inner Loop表结果,Inner Loop表的扫描减少到了1/10。 对于没有索引的表,Block Nested-Loops Join算法可以大大提高联接的速度。

inner join取交叉outer join是取全集

内部连接select * from A INNER JOIN B ON条件

返回两个集合相交的部分

左连接select * from A left outer join B on条件

左表显示所有元素,右表显示与条件匹配和不匹配的部分[空]

右连接select * from A right outer join B on条件

右表显示全部,左表显示与提交的部分一致且不符合其他条件的部分[显示为空]

数据库delete与TRUNCATE的区别delete :删除表的内容,表的结构存在,索引定义仍然存在,可以通过回滚进行恢复

drop :删除表的内容和结构,释放空间,在没有备份表之前小心使用;

truncate :删除表的内容,表的结构存在,索引的定义仍然存在。 相当于在drop表之后建立了相同定义的表(包括相关约束和索引),在不备份表之前必须谨慎使用。 速度快

梳理来源面试频次——五问三大范式——掘金juejin.im

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。