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

news2024/9/22 11:24:20

一、前言

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

二、三级模式两级映像

先看一张图

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

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

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.coloradmin.cn/o/1481049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Beego 1.12.3的简单website实现

参考 用Beego开发web应用 https://www.cnblogs.com/zhangweizhong/p/10919672.htmlBeego官网 Homepage - beego: simple & powerful Go app frameworkbuild-web-application-with-golang https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/pr…

猫头虎的技术林: 加速你的Python项目 - 如何配置国内pip下载源

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

vue3基础教程(1)——nodejs环境搭建

博主个人小程序已经上线:【中二少年工具箱】 小程序二维如下: 正文开始 专栏简介1. 环境菜单2.为什么下载node3. nodejs简介4. nodejs安装5. 编辑器选择 专栏简介 本系列文章由浅入深,从基础知识到实战开发,非常适合入门同学。…

【论文阅读】《PRODIGY: Enabling In-context Learning Over Graphs》

文章目录 0、基本介绍1、研究动机2、创新点3、挑战4、准备4.1、图上分类任务4.2、少样本提示4.3、提示图表示4.3.1、Data graph G D \mathcal{G}^D GD4.3.2、task graph G T \mathcal{G}^T GT 5、方法论5.1、提示图上的信息传播架构5.1.1、Data graph Message Passing5.1.2、…

开源版视频Diffusion Transformer来了吗?

今天分享的这篇文章来自于上海人工智能实验室,论文的Title为:Latte: Latent Diffusion Transformer for Video Generation。该方法探索如何有效的对视频中的时间、空间信息进行建模,将视频信息有效的处理成连续的tokens。另外在如何提高视频生…

leedcode刷题--day7(字符串)

23 文章讲解 力扣地址 C class Solution { public:void reverseString(vector<char>& s) {int left 0;int right s.size() - 1; // right 应该初始化为 s.size() - 1while (left < right) {swap(s[left], s[right]); // 直接交换 s[left] 和 s[right] 的值lef…

【rust】11、所有权

文章目录 一、背景二、Stack 和 Heap2.1 Stack2.2 Heap2.3 性能区别2.4 所有权和堆栈 三、所有权原则3.1 变量作用域3.2 String 类型示例 四、变量绑定背后的数据交互4.1 所有权转移4.1.1 基本类型: 拷贝, 不转移所有权4.1.2 分配在 Heap 的类型: 转移所有权 4.2 Clone(深拷贝)…

【论文阅读-基于VilLBERT方法的导航】Vison-Language Navigation 视觉语言导航(2)

文章目录 1. 【2023ICCV】Learning Vision-and-Language Navigation from YouTube Videos摘要和结论引言Building VLN Dataset from YouTube Videos模型框架实验 2. 【2021ICCV】Airbert: In-domain Pretraining for Vision-and-Language Navigation摘要和结论引言BnB DatasetA…

JavaWeb之 Web概述

目录 前言1.1 Web和 JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器 1.3 JavaWeb 学习内容 前言 博主将用 CSDN 记录 Java 后端开发学习之路上的经验&#xff0c;并将自己整理的编程经验和知识分享出来&a…

3.1作业

作业要求&#xff1a; 通过w(红色臂角度增大)s&#xff08;红色臂角度减小&#xff09;d&#xff08;蓝色臂角度增大&#xff09;a&#xff08;蓝色臂角度减小&#xff09;按键控制机械臂 程序代码&#xff1a; #include<myhead.h> #define SER_IP "192.168.126.…

《C++ Primer Plus》《10、对象和类》

文章目录 前言&#xff1a;1 过程性编程和面向对象编程2 抽象和类2.1 类型是什么2.2 C中的类2.3 实现类成员函数2.4 使用类 3 类的构造函数和析构函数3.1 声明和定义构造函数3.2 使用构造函数3.3 默认构造函数3.4 析构函数 4 this指针5 对象数组6 类的作用域6.1 作用域为类的常…

云计算 2月20号 (认识操作系统)

1、认识操作系统 计算机系统的组成 知识点1&#xff1a;没有软件系统的计算机称之为"裸机" 知识点2&#xff1a;裸机提供基本的可计算性资源 知识点3&#xff1a;操作系统是最靠近硬件的软件层&#xff0c;负责管理和控制计算机硬件。 计算机硬件组成五大部件 运算器…

1美元持有ZKFair PFP-CyberArmy,潜在收益分析

3月2日&#xff0c;ZKFair PFP-CyberArmy 将在 Element 上正式开始Public Sale。

C++基于多设计模式下的同步异步日志系统day2

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容实现了日志代码设计的实…

防御保护课程笔记

内容安全 防病毒 过滤技术 密码学

移动互联网时代的APP上架流程和要点

摘要 本文将介绍移动应用程序上架的基本流程和要点&#xff0c;包括应用商店注册、APP材料准备、打包上传App、APP审核以及发布APP的详细步骤。此外&#xff0c;还会提到利用appuploder工具简化iOS应用上架步骤的方法&#xff0c; 引言 在移动互联网时代&#xff0c;开发一…

【笔记】深度学习入门:基于Python的理论与实现(六)

深度学习 深度学习是加深了层的深度神经网络 加深网络 本节我们将这些已经学过的技术汇总起来&#xff0c;创建一个深度网络&#xff0c;挑战 MNIST 数据集的手写数字识别 向更深的网络出发 基于33的小型滤波器的卷积层。激活函数是ReLU。全连接层的后面使用Dropout层。基…

Laravel框架: Call to a member function connect() on null 异常报错处理

Laravel框架&#xff1a; Call to a member function connect() on null 异常报错处理 Date: 2024.03.01 21:03:11 author: lijianzhan 原文链接: https://learnku.com/laravel/t/63721 问题&#xff1a; local.ERROR: Call to a member function connect() on null {"…

win安装卸载python3.13

一、安装 访问python官网&#xff1a;https://www.python.org/ 点击“Downloads” 点击“Windows” 找到自己要下载的版本和位数&#xff0c;比如我这个是3.13版本、64位的安装包 下载好了之后&#xff0c;双击安装包 勾选“Add python.exe to PATH”&#xff1a;把python环…

线程安全的集合容器

线程安全的集合容器 List集合中的线程安全的集合容器&#xff1a; 在旧版本中Vector是线程安全的集合容器&#xff0c;在JDK 1.5以后CopyOnWriteArrayList也是线程安全的集合容器&#xff0c;CopyOnWriteArrayList的数据结构是Object类型的数组。 CopyOnWriteArrayList是如何…