数据库设计-----理论

2023-09-18 11:51:47

1.2 数据库基本概念

1、关系:两个表的公共字段

2、行:也称记录,也称实体

3、列:也称字段,也称属性

就表结构而言,表分为行和列;
就表数据而言,分为记录和字段;
就面向对象而言,一个记录就是一个实体,一个字段就是一个属性。

4、数据冗余:相同的数据存储在不同的地方

脚下留心:
1、冗余只能减少,不能杜绝。
2、减少冗余的方法是分表
3、为减少数据查找的麻烦,允许数据有一定的冗余

5、数据完整性:正确性+准确性=数据完整性

正确性:数据类型正确
准确性:数据范围要准确

思考:学生的年龄是整型,输入1000岁,正确性和准确性如何?

答:正确的,但不准确

思考:年龄是整形的,收入了字符串,正确性和准确性如何?

答:不正确

1.3 实体和实体之间的关系

1、一对一

2、一对多 (多对一)

3、多对多
在这里插入图片描述

1.3.1 一对多 1:N

1、主表中的一条记录对应从表中的多条记录。

2、一对多和多对一是一样的

在这里插入图片描述


如何实现一对多?

答:主键和非主键建关系

问题:说出几个一对多的关系?

答:班级表和学生表、 班主表和学生表

1.3.2 一对一(1:1)

1、主表中的一条记录对应从表中的一条记录

在这里插入图片描述

如何实现一对一?

主键和主键建关系就能实现一对一。

思考:一对一两个表完全可以用一个表实现,为什么还要分成两个表?

答:在字段数量很多情况下,数据量也就很大,每次查询都需要检索大量数据,这样效率低下。我们可以将所有字段分成两个部分,“常用字段”和“不常用字段”,这样对大部分查询者来说效率提高了。【表的垂直分割】
1.3.3 多对多(N:M)

主表中的一条记录对应从表中的多条记录,从表中的一条记录对应主表中的多条记录

班级和讲师的关系

在这里插入图片描述

如何实现多对多?

答:建立第三张表来保存关系。

问题:说出几个多对多的关系?

1、科目表和学生表的关系 2、商品表和订单表 3、游戏目录表和玩家表

1.4 数据库设计的步骤

在这里插入图片描述

1.4.1 数据库设计具体步骤

1、 收集信息:与该系统有关人员进行交流、坐谈,充分理解数据库需要完成的任务

2、 标识对象(实体-Entity)标识数据库要管理的关键对象或实体

3、 标识每个实体的属性(Attribute)

4、 标识对象之间的关系(Relationship)

5、 将模型转换成数据库

6、 规范化

1.4.2 绘制E-R图

E-R(Entity-Relationship)实体关系图

E-R图的语法
在这里插入图片描述

绘制E-R图
在这里插入图片描述

1.4.3 将E-R图转成表

1、 实体转成表,属性转成字段

2、 如果没有合适的字段做主键,给表添加一个自动增长列做主键。

1.4.4 例题

1、项目需求

BBS论坛的基本功能:
用户注册和登录,后台数据库需要存放用户的注册信息和在线状态信息;
用户发贴,后台数据库需要存放贴子相关信息,如贴子内容、标题等;
用户可以对发帖进行回复;
论坛版块管理:后台数据库需要存放各个版块信息,如版主、版块名称、贴子数等;

2、标识对象

参与的对象有:用户、发的帖子、跟帖、板块

3、标识对象的属性
在这里插入图片描述
4、建立关系,绘制E-R图
在这里插入图片描述
5、将E-R图转出表结构

1.5 数据规范化

Codd博士定义了6个范式来规范化数据库,范式由小到大来约束,范式越高冗余越小,但表的个数也越多。实验证明,三范式是性价比最高的。

1.5.1 第一范式:确保每列原子性

第一范式确保每个字段不可再分
在这里插入图片描述
思考:如下表设计是否合理?
在这里插入图片描述
不合理。不满足第一范式,上课时间可以再分
在这里插入图片描述
思考:地址包含省、市、县、地区是否需要拆分?

答:如果仅仅起地址的作用,不需要统计,可以不拆分;如果有按地区统计的功能需要拆分。

在实际项目中,建议拆分。

1.5.2 第二范式:非键字段必须依赖于键字段

一个表只能描述一件事
在这里插入图片描述
思考:如下表设计是否合理?
在这里插入图片描述

1.5.3 第三范式:消除传递依赖

在所有的非键字段中,不能有传递依赖
在这里插入图片描述
下列设计是否满足第三范式?
在这里插入图片描述
不满足,因为语文和数学确定了,总分就确定了。

多学一招:上面的设计不满足第三范式,但是高考分数表就是这样设计的,为什么?

答:高考分数峰值访问量非常大,这时候就是性能更重要。当性能和规范化冲突的时候,我们首选性能。这就是“反三范式”。
1.5.4 数据库设计的例题

1、需求

公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等
公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等
公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率与工程师不同)

2、工资表
在这里插入图片描述
3、将工资表转成数据库表
在这里插入图片描述
4、这个表存在的问题

A:新人入职需要虚拟一个项目

B:职务更改,小时工资率可能会忘记更改,造成数据不完整

C:有人离职,删除记录后,工程也没有了

5、规范化表

第一步:这个表满足第一范式

第二步:这个表不是描述了一件事情

在这里插入图片描述
第三步:是否满足第三范式
在这里插入图片描述
更改如下:
在这里插入图片描述

更多推荐

MySQL常见面试题(二)

😀前言在数据库管理和操作中,我们常常需要深入理解其各种数据类型、特性和索引类型来优化我们的数据库设计和查询效率。其中,字符串类型和它们如何在MySQL中实现和使用成为了一个必不可少的知识点。同时,我们也需要理解新的特性,如虚拟生成列,它为我们提供了更多的灵活性和优化方案。.除此之外,为了保证数据库操作的准确和高效,我

DEDE织梦标签名称:{/dede:arclist} 详解

DEDE织梦标签名称:{/dede:arclist}详解arclist简介使用实例日期的各种格式底层字段底层模板字段:DEDE织梦标签名称:{/dede:arclist}详解arclist简介标记简介:织梦常用标记,也称为自由列表标记,其中imglist、imginfolist、specart、coolart、auto

从一到无穷大 #15 Gorilla,论黄金26H与时序数据库缓存系统的可行性

本作品采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可。本作品(李兆龙博文,由李兆龙创作),由李兆龙确认,转载请注明版权。引言缓存系统的高效存在前提,在满足前提的情况下可以接受缺陷便没有理由不引入缓存系统,但是具体影响因素需要仔细权衡,时序数据库只有常态极端场景下缓存有显著效果。时序数据库缓存系统

现场直击|亚数TrustAsia精彩亮相IOTE深圳物联网展,CSA联盟展台等你来!

2023年9月20日,IOTE2023第二十届深圳国际物联网展在深圳国际会展中心(宝安)顺利开幕。作为物联网领域年度最重要的行业盛会之一,本次展会汇聚全球来自工业、物流、基建、智慧城市、智慧零售等领域的600+企业、10万+行业人士,共同探索物联网发展的新方向。作为亚太地区首家具有全球可信CA资质的MatterNon-

微信小程序关键词排名优化:提升你的小程序可见性

随着智能手机的普及,许多企业和开发者都投入了大量的时间和资源来创建各种各样的应用,以满足用户的需求。而微信小程序则是一种快速兴起的应用类型,它们提供了轻量级的应用体验,无需下载即可使用。然而,要想让你的小程序脱颖而出,关键词排名优化是必不可少的。本文将深入探讨如何通过关键词排名优化来提升你的微信小程序的可见性和用户体验

Webshell 流量特征分析

前言:webshell是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站

如何平滑升级 Nginx

Nginx详情:Nginx是一个流行的Web服务器和反向代理服务器。当需要升级Nginx时,可能会涉及到停止和启动服务,这将导致一段时间内网站不可用。为了避免这种情况,可以采用平滑升级的方法。以下是平滑升级Nginx的步骤:1.查看现有Nginx编译参数在终端输入以下命令查看当前Nginx的编译参数:/usr/loca

国内什么牌子的ipad手写笔好用?开学性价比触控笔

如今,苹果的Pencil系列无疑是iPad使用者的最佳选择。但这电容笔的售价实在是太高了,对于普通用户是买不起的。因此,在使用过程中,如何选用一款性能优良、价格低廉的电容笔是非常关键的。作为一个“苹果粉”,同时也是一个资深的数字发烧友,本人对电容笔也有一定的认识,下面就是我为大家准备的几款价格相对亲民的电容笔!一、电容

数据结构与算法——14.栈

目录1.概述2.栈的接口设计3.用链表来实现栈4.用数组来实现栈5.用两个栈来实现一个队列6.用一个队列来实现一个栈7.总结1.概述计算机科学中,stack是一种线性的数据结构,只能在其一端添加数据和移除数据。习惯来说,这一端称之为栈顶,另一端不能操作数据的称之为栈底,就如同生活中的一摞书。说明:栈是线性的,只能在一端

八、数据类型转换

数据类型转换1.数据类型转换1.1.隐式类型转换1.2.显式类型转换1.3.训练11.4.训练2——————————————————————————————————————————————————1.数据类型转换类型转换是将一个值从一种类型更改为另一种类型的过程。例如:可以将String类型的数据"457"转换为数值型

Java 21正式发布了,来来来,一睹它的芳容!

Oracle高兴地宣布JDK21已经正式上线了。这是按照每六个月一次的发布计划,准时推出的第12个版本。这种定期的发布模式为开发者提供了稳定和可预见的创新,使得他们可以轻松地接纳和采用这些新特性。Java由于其出色的性能、稳定性和安全性使其持续成为全球最受欢迎的编程语言。#01JDK21已经正式发布Oracle现已为开

热文推荐