首页 数据库 mysql教程 笔试面试那件小事(数据库-范式)

笔试面试那件小事(数据库-范式)

Jun 07, 2016 pm 04:01 PM
数据 数据库 概念 相关 知识 笔试 范式 面试

1相关概念和知识 数据依赖:反映一个关系内部属性与属性之间的约束关系,是现实世界属性相互联系的抽象,属于数据内在的性质和语义的体现 规范化理论:是用来设计良好的关系模式的基

1>相关概念和知识

数据依赖:反映一个关系内部属性与属性之间的约束关系,是现实世界属性相互联系的抽象,属于数据内在的性质和语义的体现

规范化理论:是用来设计良好的关系模式的基础。它通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题

函数依赖:简单的说,对于关系模式的两个属性子集X和Y,若X的任一取值都能唯一确定Y的值,那么则称Y函数依赖于X,记为X->Y

非平凡函数依赖:对于关系模式的两个属性子集X和Y,如果X->Y,但是Y不是X的子集,那么就称X->Y为非平凡函数依赖

完全函数依赖:对于关系模式的两个属性子集X和Y,如果X->Y,并对于X的任何一个真子集X',都有X‘->Y,称为完全函数依赖

范式:指符合某一种级别的关系的集合。 

1NF:若关系模式的所有属性都是不可分的基本数据项,则该关系属于1NF 

2NF:1NF关系模式如果同时满足每一个非主属性完全依赖于码,则该关系模式为2NF 

3NF:若关系模式的每一个非主属性,既不部分依赖于码,也不传递依赖于码,则该关系模式为3NF 

BCNF:若一个关系模式的每个决定因素都包含码,则该关系模式为BCNF 

数据库设计:是指对于一个给定的应该环境,构造优化的数据逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效的存储和管理数据,满足各种用户的应用需求,包括信息管理需求和数据库操作需求。

数据库设计的6个基本步骤:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实现、数据库运行和维护

概念结构设计:是指需求分析得到的用户需求抽象为信息结构。代表E-R图构建

逻辑结构设计:将概念结构模型(E-R图),转化为某个DBMS系统支持的数据模式。代码E-R转为关系数据模式

物理结构设计:为一个给定的逻辑数据模型选取一个合适应用环境的物理结构过程。包括设计数据的存储结构与存钱方法

抽象:指对实际的人、物、事和概念进行人为处理,抽取所关心的共同特征,忽略非本质的细节。 

数据库设计必须遵循相结合的原则 

数据字典主要包括数据项、数据结构、数据流、数据存储和处理过程5个部分 

三种常见抽象方法:分类、聚集和概括 

局部E-R图之间的冲突主要表现在属性冲突、命名冲突和结构冲突三个方面 

数据库常用的存取方法:索引方法、聚簇方法和HASH方法 

确定数据存放位置和存储结构需要考虑的因素主要有:存取时间、空间利用率和维护代价 

&&&&&&&&&&&&数据库的范式&&&&&&&&&&&&&

1>第一范式(1NF)无重复的列

第一范式(1NF)中数据库表的每一列都是不可分割的基本数据项

同一列中不能有多值

即实体中的某一属性不能有多个值或者不能有重复的属性。不满足1NF的数据库不是关系数据库 

2>第二范式(2NF)属性完全依赖于主键(消除部分函数依赖)

满足第二范式必须先满足第1范式

第二范式要求数据库表中的每一个实例或者元组必须可以被唯一的区分 

3>第三范式(3NF)消除传递依赖 

例子:在设计数据库表结构之前,我们先确定一下要设计的内容包含哪些。学号、学生姓名、年龄、课程、课程学分、系别、学科成绩、系办公地址、系办电话等信息。为了更好的理解信息,将上述信息分为以下几个方面:

学生信息包括哪些

学生选了哪些课,成绩是什么

每个课程的学分是多少

学生属于哪个系,系的基本信息是什么

首先第一范式(1NF):数据库表中的字段都是单一属性,不可再分。这个单一属性由基本类型构成,包括整数、字符、逻辑型、日期型等。目前在任何的关系数据库中不允许将一列分成多列,因此做出的数据库都符合第一范式的数据库 

考虑第2范式,先把所有的信息放到一个表中(学号,学生姓名,年龄,性别,课程,课程学分,系别,学科成绩,系办地址,系办电话)并且存在下列的依赖关系。

1)(学号)->(姓名,年龄,性别,系别,系办地址,系办电话)

2)(课程名称)->(学分)

3)(学号,课程)->(学科成绩)

根据依赖关系我们生成三个表:

学生:student(学号,姓名,年龄,性别,系别,系办地址,系办电话)

课程:Course(课程名称,学分)

选课关系:selectCourse(学号,课程名称,成绩)

对照第二范式的要求,上述表已经满足第二范式。如果一个数据库不满足第2范式,则会产生:

数据冗余,更新异常,删除异常等;例如同一课程由n个学生选修,那么学分就重复了n-1次,同一个学生选修了m个课程,那么他的名字就重复多次

若调整了某一门课程的学分,则所有的学分都得更新,否则会出现一门课程多种学分的情况。假设一批学生已经选修完了课程,要将这些记录从数据库中删除,那么会连同课程的信息被一道删除。 

接下来再考虑将数据库改成满足第3范式的数据库表:

看上面的学生表Student(学号,姓名,年龄,性别,系别,系办公地址,系办电话),单一码为学号。并且系办地址和系办电话依赖于系别。存在传递函数依赖。

将学生表拆成两个表:

学生(学号,姓名,年龄,性别,系别)

系别(系别,系办地址,系办电话)

上述关系满足三范式。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
AI初创集体跳槽OpenAI,Ilya出走后安全团队重整旗鼓! AI初创集体跳槽OpenAI,Ilya出走后安全团队重整旗鼓! Jun 08, 2024 pm 01:00 PM

上周,在内部的离职潮和外部的口诛笔伐之下,OpenAI可谓是内忧外患:-侵权寡姐引发全球热议-员工签署「霸王条款」被接连曝出-网友细数奥特曼「七宗罪」辟谣:根据Vox获取的泄露信息和文件,OpenAI的高级领导层,包括Altman在内,非常了解这些股权回收条款,并且签署了它们。除此之外,还有一个严峻而紧迫的问题摆在OpenAI面前——AI安全。最近,五名与安全相关的员工离职,其中包括两名最著名的员工,“超级对齐”团队的解散让OpenAI的安全问题再次被置于聚光灯下。《财富》杂志报道称,OpenA

iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 Jul 18, 2024 am 05:48 AM

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

如何在PHP中处理数据库连接错误 如何在PHP中处理数据库连接错误 Jun 05, 2024 pm 02:16 PM

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

在PHP中使用MySQLi建立数据库连接的详尽教程 在PHP中使用MySQLi建立数据库连接的详尽教程 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

70B模型秒出1000token,代码重写超越GPT-4o,来自OpenAI投资的代码神器Cursor团队 70B模型秒出1000token,代码重写超越GPT-4o,来自OpenAI投资的代码神器Cursor团队 Jun 13, 2024 pm 03:47 PM

70B模型,秒出1000token,换算成字符接近4000!研究人员将Llama3进行了微调并引入加速算法,和原生版本相比,速度足足快出了快了13倍!不仅是快,在代码重写任务上的表现甚至超越了GPT-4o。这项成果,来自爆火的AI编程神器Cursor背后团队anysphere,OpenAI也参与过投资。要知道在以快着称的推理加速框架Groq上,70BLlama3的推理速度也不过每秒300多token。 Cursor这样的速度,可以说是实现了近乎即时的完整代码文件编辑。有人直呼好家伙,如果把Curs

golang框架面试题集锦 golang框架面试题集锦 Jun 02, 2024 pm 09:37 PM

Go框架是一组扩展Go内置库的组件,提供预制功能(例如Web开发和数据库操作)。流行的Go框架包括Gin(Web开发)、GORM(数据库操作)和RESTful(API管理)。中间件是HTTP请求处理链中的拦截器模式,用于在不修改处理程序的情况下添加身份验证或请求日志记录等功能。Session管理通过存储用户数据来保持会话状态,可以使用gorilla/sessions管理session。

中国移动:人类正迈入第四次工业革命 正式公布'三个计划” 中国移动:人类正迈入第四次工业革命 正式公布'三个计划” Jun 27, 2024 am 10:29 AM

6月26日消息,在2024年世界移动通信大会上海(MWC上海)开幕式上,中国移动董事长杨杰发表演讲。他表示,当前,人类社会正迈入以信息为主导、信息和能量深度融合的第四次工业革命,即“数智化革命”,新质生产力加速形成。杨杰认为,从蒸汽机驱动的“机械化革命”,到电力、内燃机等驱动的“电气化革命”,再到计算机和互联网等驱动的“信息化革命”,每一轮工业革命都是以“信息和能量”为主线,带来生产力发

如何在 Golang 中将 JSON 数据保存到数据库中? 如何在 Golang 中将 JSON 数据保存到数据库中? Jun 06, 2024 am 11:24 AM

可以通过使用gjson库或json.Unmarshal函数将JSON数据保存到MySQL数据库中。gjson库提供了方便的方法来解析JSON字段,而json.Unmarshal函数需要一个目标类型指针来解组JSON数据。这两种方法都需要准备SQL语句和执行插入操作来将数据持久化到数据库中。

See all articles