数据库常见理论常见面试题(总结)

一、前言

    这里呢,博主会介绍一些平时关于数据库的理论的问题,比如数据库的三级模式两级映射、触发器、范式、存储过程、视图等等概念知识,但是像索引、事务、锁等内容,之前的文章就讲解过了,这里就不作过多的介绍了,有需要的小伙伴去我的主页找哦。

二、三级模式两级映像

先看一张图

如图所示我们可以看到从最终用户到物理数据库分为三级模式:所谓的三级模式分别指的是:外模式、概念模式以及内模式。

而两级映像指的是:外模式-概念模式映像、概念模式-内模式映像。

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、使用场景

①:代替复杂查询,减少复杂性;

②:提供一致性接口,实现业务的规则;

③:控制对于表的访问,提高安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/265900.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Git教程】(七)变基与拣取 —— 变基操作的概念、适用场景及其实现方式,拣取操作的实现 ~

Git教程 变基与拣取 1️⃣ 工作原理:复制提交2️⃣ 避免“钻石链”3️⃣ 什么情况下会遇到冲突4️⃣ 移植分支5️⃣ 执行变基后原提交的情况6️⃣ 提交的原件与副本存在于同一版本库中所带来的问题7️⃣ 捡取🌾 总结 通常, 一段提交历史中往…

HUAWEI 华为交换机 配置基于VLAN的MAC地址学习限制接入用户数量 配置示例

组网需求 如 图 2-15 所示,用户网络 1 通过 LSW1 与 Switch 相连, Switch 的接口为 GE0/0/1 。用户网络2通过 LSW2 与 Switch 相连, Switch 的接口为 GE0/0/2 。 GE0/0/1 、 GE0/0/2 同属于 VLAN2。为控制接入用户数,对 VLAN2 进…

77. 组合(力扣LeetCode)

文章目录 77. 组合题目描述回溯算法组合问题的剪枝操作 77. 组合 题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [ [2,4], [3,4],…

【重要公告】BSV区块链协会宣布将启动多项动态安全增强措施

​​发表时间:2024年2月16日 2024年2月16日,瑞士楚格 - BSV区块链协议的管理机构BSV区块链协会(以下简称“BSV协会”)宣布对其运营模式实施全新的安全架构,其中包括引入网络访问规则和数字资产找回协议,以及…

Matlab: Introduction to Hybrid Beamforming

文章目录 来源混合波束赋形的基本概念System Setup关键函数 来源 在matlab的命令行输入 doc hybrid beamforming 混合波束赋形的基本概念 混合波束形成简介 本例介绍了混合波束形成的基本概念,并说明了如何模拟这种系统。 现代无线通信系统使用空间复用来提高散…

ARM64汇编02 - 寄存器与指令基本格式

最近的文章可能会有较多修改,请关注博客哦 异常级别 ARMv8处理器支持4种异常等级(Exception Level,EL)。 EL0 为非特权模式,用于运行应用程序,其他资源访问受限,权限不够。 EL1 为特权模式&…

C++:常量表达式

C11开始constexpr作为一种声明,为编译器提供了在编译期间确认结果的优化建议,满足部分编译期特性的需求 constexpr和const区别 int b10; const int ab; //运行成功 constexpr int cb; //编译器报错,b的值在编译期间不能确定 const int size1…

电视盒子什么牌子好?老烧分享电视盒子品牌排行榜

多年前开始我就用电视盒子了至今已经七年,对各个品牌的电视盒子我都有详细深入的了解,看到网友们在讨论电视盒子什么牌子好,不知道如何挑选电视盒子的朋友们可以关注发烧友圈公认的电视盒子品牌排行榜,看看入围的都有哪些品牌吧。…

数据库之MVCC

1、什么是MVCC MVCC(Multi-Version Concurrency Control)即多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。MVCC使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行…

如何让电脑待机而wifi不关的操作方法!!

1、一台电脑如果一天不关机,大约消耗0.3度电。 一般一台电脑的功耗约为250-400W(台式机)。 一台电脑每月的耗电量:如果是每小时300W每天10小时每月30天90KW,即90千瓦时的电。 这只是保守估计。 2、使用完毕后正常关闭…

小兴教你做平衡小车-stm32程序开发(串口打印)

文章目录 1 前言2 串口打印库函数版本3 串口打印寄存器版本3.1 配置时钟3.2 配置GPIO功能3.3 配置CR2寄存器3.4 配置CR1寄存器3.5 配置CR3寄存器 1 前言 我们在调试的过程中,都比较喜欢直观的数据,这时候我们可以使用芯片的串口功能,把数据打…

回归预测 | Matlab实现OOA-HKELM鱼鹰算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现OOA-HKELM鱼鹰算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现OOA-HKELM鱼鹰算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现OOA-HKELM鱼鹰算法优化混合核极限学习机多变量…

智慧生活,从餐厅开始:开发智能扫码点餐系统的技术详解

本篇文章,小编将深入为大家讲解开发智能扫码点餐系统的技术细节,从系统架构到关键功能实现,为读者提供全面的技术指南。 一、智能扫码点餐系统概述 可实现在线浏览菜单、点餐、支付等操作,大大简化了点餐流程,提升了…

Spring Cloud Gateway官方文档学习

文章目录 推荐写在前面一、熟悉Gateway基本概念与原理1、三大概念2、工作流程 二、基本使用路由断言的两种写法 三、路由断言工厂1、After路由断言工厂2、Before路由断言工厂3、Between路由断言工厂4、Cookie路由断言工厂5、Header路由断言工厂6、Host路由断言工厂7、Method路由…

大话设计模式——4.装饰模式(Decorator Pattern)

1.定义 1)可以在不改动原有对象代码的情况下扩展对象的功能,通过聚合的方式相较于继承更加灵活。 2)UML图 2.示例 汽车有很多装饰可选,如座椅、音响、轮胎等都可以进行自定义组装 1)抽象汽车对象 public interfac…

代码库管理工具Git介绍

阅读本文同时请参阅-----免费的Git图形界面工具sourceTree介绍 Git是一个分布式版本控制系统,它可以帮助开发者跟踪和管理代码历史。Git的命令行工具是使用Git的核心方式,虽然它可能看起来有些复杂,但是一旦掌握了基本命令,你…

回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测

回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测 目录 回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基…

Pytorch添加自定义算子之(5)-配置GPU形式的简单add自定义算子

参考:https://zhuanlan.zhihu.com/p/358778742 一、头文件 命名为:add2.h void launch_add2(float *c,const float *a,const float *b,int n);

【Unity】构建简单实用的年份选择器(简单原理示范)

在许多应用程序和游戏中,年份选择是一个常见的需求。无论是在日历应用程序中查看事件,还是在历史类游戏中选择时间段,年份选择器都是用户体验的重要组成部分,下面实现一个简易的年份选择器。 一、效果预览: 目录 一、…

为什么会出现 targetId 与 senderUserId 相同的情况?

描述 单聊会话(两位用户聊天)中出现了消息的 targetId 和 senderUserId 相同的情况。 分析 融云 IM 设计如此。 senderUserId 是消息的发送者的用户 ID。targetId 是当前会话的 ID,该 ID 指向与本端用户对话的用户 ID、群组 ID、聊天室 I…