增城商城网站建设,wordpress发送自定义邮件,如何将网站变成免费,住建部建设工程施工合同范本一、前言 这里呢#xff0c;博主会介绍一些平时关于数据库的理论的问题#xff0c;比如数据库的三级模式两级映射、触发器、范式、存储过程、视图等等概念知识#xff0c;但是像索引、事务、锁等内容#xff0c;之前的文章就讲解过了#xff0c;这里就不作过多的介绍了博主会介绍一些平时关于数据库的理论的问题比如数据库的三级模式两级映射、触发器、范式、存储过程、视图等等概念知识但是像索引、事务、锁等内容之前的文章就讲解过了这里就不作过多的介绍了有需要的小伙伴去我的主页找哦。
二、三级模式两级映像
先看一张图 如图所示我们可以看到从最终用户到物理数据库分为三级模式所谓的三级模式分别指的是外模式、概念模式以及内模式。
而两级映像指的是外模式-概念模式映像、概念模式-内模式映像。
1、三级模式
①外模式面向应用程序描述用户的数据视图View。用户不同的需求得到不同的视图。
比如有一张user表字段如图所示一张基础表
假设我现在只想得到username、password、nickname、sex这些字段那我就可以通过在基础表上执行一些SQL语句得到一个只包含这些字段的一个视图View。这样一来这是面向用户的不同需求的用户得到的视图也是不一样的。
外模式的主要特点用来描述组成用户视图各个记录的组成、相互联系、数据的完整性和安全性、数据项的特征等。
②概念模式模式、逻辑模式面向数据库设计人员描述数据的整体逻辑结构。
比如在如上图中关于user表的设计如表的一些性质字段id、username等信息的设置(设计表的过程)其实就是在设置逻辑结构。
概念模式是数据库中全体数据的逻辑结构和特征的描叙是所有用户数据的公共数据视图
③内模式物理模式、储存模式面向物理上的数据库数据在磁盘中如何存储描述数据库采用什么样的数据结构和怎样获得数据的。
2、两级映像
定义了模式之间如何去转换。
①外模式-概念模式映像就是外模式向概念模式的转化体现了逻辑独立性。所谓逻辑独立性是指我们修改了概念模式的基础表但外模式却不受影响。 如图所示我们修改基本表1和基本表2中的内容当不会影响到视图外模式的查询‘编号’、‘商品分类’、‘销量’.....这些字段依然是使用于我们数据的查询到的。
②概念模式-内模式映像就是概念模式向内模式的转化过程体现了物理的独立性。所谓物理的独立性指修改了内模式不影响外层的概念模式和外模式。
例如在Excel文件中将xls文件另存为xlsx文件虽然更换了文件格式但是打开文件后显示的表格的内容是不会改变的。
三、三大范式
为什么需要数据规范化
如果没有数据规范化我们的数据库表在设计时可能会出现信息重复、更新异常、删除异常删除了一个表另一个表有的信息没有删除、插入异常无法正常显示信息等问题如果要避免这些问题就需要提到我们的三大范式。
1、范式概念
为了建立冗余较小、结构合理的数据库设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库必须满足一定的范式。
2、第一范式1NF
数据库表中的所有字段都是不可分割的原子。
如何理解呢
其实很简单比如我们的user表中有个address字段那我们可以试想一下我们在填写地址的时候就直接在address下写“四川省成都市武侯区新华路121号”吗其实我们是将address分为province省份、city(城市)、detail_address(详细地址)这三个部分因为有时候系统会经常访问province、city这些字段而且这样的才分更加满足字段的原子性。
3、第二范式2NF
第二范式的实现是基于第一范式的指的是数据库表中的每一列都与主键完全相关而不能只与主键的部分相关。
如何理解呢 如图所示假设我们的主键是货物类型、货物ID此时“货物名称”是是与主键的名称完全相关的但“注意事项”只是与主键中的“货物类型”部分相关。所以这个表对的设计是不合我们的第二范式的。要想修改的符合第二范式就只需要将“注意事项”这列去除剩余的数据列形成的表就是符合我们第二范式的了。如下图所示
4、第三范式3NF)
第三范式的成立是需要满足第一、第二范式的是指第三范式需要确保数据表中的每一列数据都和主键直接相关而不能间接相关。
如何理解呢
如上图所示我们的student表中学号是主键姓名、性别、家庭人口是指的是学生的个人信息是直接依赖于主键的而班主任性别、班主任年龄是直接依赖的是班主任姓名所以是不符合第三范式的。做成如下的表就可满足第三范式
5、数据库表设计必须遵循三范式吗
其实我们说了三大范式的一些基本内容也知道使用三大范式的好处但是实际的项目开发中并不是必须严格遵守三大范式因为范式虽然规范但是性能就不会那么高。
比如阿里规范开发手册里面就强调关联的表不能超过三张表而我们遵循三大范式必然会把一张表拆成很多张。
在真实项目开发中需要常用做法
①所以考虑到商业化的需求和目标时对成本以及用户体验来说数据库的性能就更加重要
②在规范性能问题的时候需要适当考虑一下规范性
③有时需要给某些表增加一些冗余的字段为了将多表查询改为单表查询。
四、存储过程
1、概念
存储过程PROCEDURE指的是事先编译好存储在数据库中的一段SQL语句集合。我们自需要创建一次但在以后的该程序中可以调用多次。
2、优点
①存储过程可以重复使用调用这些存储过程可以减少开发人员的工作量
②减少网络流量存储过程是位于数据库上我们调用的时候只需要传递存储过程的名称和参数即可降低了网络传输的流量。
③安全性提高参数化的过程可以防止SQL注入问题。
3、缺点
①移植性差存储过程写在数据库中维护起来比较困难。
②开发和维护要求高存储过程的编写直接依赖于开发人员如果业务逻辑改动较多需要频繁直接操作数据库大量业务降维到数据库很多异常不能在代码中捕获出现问题较难排查需要数据库管理人员的帮助。
五、触发器
1、概念
触发器TRIGGER是由事件来触发某个操作。这些事件包括insert语句、update语句、delete语句DML操作。当数据库执行这些事件时就会激活触发器执行相应的操作。当然也可以把触发器可以看作是一种特殊类型的存储过程它与存储过程的区别在于存储过程中使用时需要调用而触发器是在预先定义好的事件DML操作发生时才会被MySQL自动调用。
2、优点
触发器可以用来对表实施复杂的完整性约束保持数据的一致性当触发器所保护的数据发生改变时触发器会自动被激活响应同时执行一定的操作对其它相关表的操作从而保证对数据的不完整性约束或不正确的修改。
3、缺点
①数据维护困难应用程序的业务逻辑处理与数据操作耦合度高不利于扩展与维护。
②可能产生死锁若触发器中使用了锁机制可能造成死锁影响数据库的稳定性。
六、视图
1、概念
视图是一种虚拟的表具有和物理表相同的功能。可以对视图进行增改查操作试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易相比多表查询。
2、使用场景
①代替复杂查询减少复杂性
②提供一致性接口实现业务的规则
③控制对于表的访问提高安全性。