关系模式的规范化设计概述-认识“好”的数据库模式、数据依赖

news2024/11/23 17:06:32

一、引言

前面学习了关系数据库的基本概念,关系模型的组成要素,关系数据库的标准查询语言SQL

三部分的内容,为了使得关系模式设计能够有一个标准,Codd提出了指导关系模式设计规范

理论 

二、为学生选课数据库添加院系表

1、添加院系表,包含院系名称和院系主任两个属性

院系表(院系名称,院系主任)

D(DN,DD)

(1)创建表

create table d(
  dN varchar(16) primary key,
  dD varchar(6)
);

(2)为表中添加数据

insert into d
  values('数计学院','张三');
insert into d
  values('材料学院','李四');
insert into d
  values('机械学院','王麻子');

(3)为表s中的sD属性添加外键参照表d中的dN属性

alter table s
add foreign key(sD) references  d(dN);

三、一个关系模式R的数据库模式和有着多个关系模式(S,C,SC,D)的数据库模式,哪一个更好?

R(SNO,CNO,SN,SEX,SB,SD,CN,PC,GRADE,DD)

1、创建表R

create table r(
sNo char(12),
sN varchar(6),
sex char(2),
sB date,
sD varchar(16),
dD varchar(6),
cNo char(3),
cN varchar(16),
pC char(3),
grade decimal(3,1),
primary key(sNo,cNo)
);

2、在表R中通过连接查询插入学生选课数据库中的相关信息

insert into r
select s.sNo,sN,sex,sB,sD,dD,sC.cNo,cN,pC,grade
from s,d,c,sC
where s.sNo=sC.sNo and s.sD=d.dN and c.cNo=sC.cNo

 

从表R中可发现存在着冗余存储的问题,学生学号、学生姓名、所在学院、学院主任均被存储了多3、对关系R进行更新操作

(1)向关系表R中插入一个学生信息

insert into r(sNo,sN,sex,sB,sD)
values('202218014034','李世民','男','1900-01-01','机械学院')

(2)向关系表R中插入一个课程信息

insert into r(cNo,cN,pC)
values('011','机械组装','001');

(3)向关系表R中插入一个院系信息

insert into r(sD,dD)
values ('体育','苏炳添')

 

(4)删除学号为“202218014032”的学生的选课信息(该生只选修了一门课程)

方式一:

update r
set cNo=null,cn=null,pC=null,grade=null
where sNo='202218014032'

 

语句报错,无法执行

方式二:使用DELETE语句删除整个元组

delete
from r
where sNo='202218014032'

这样做虽然满足了操作需求,但会将关于该学生的所有信息一并删除,丢失了学生的个人信息

(5)修改一个学生的所在系

update r
set sD='机械学院'
where sNo='202218014030'
select sD,dD
from r
where sD='机械学院'

 

出现数据不一致问题

4、可以看到,把四个关系模式合成为一个关系模式,不仅存在着数据冗余浪费存储空间,还会出现在原有数据库的多个关系数据模式上不会发生的更新异常数据不一致问题 ,由此可见,关系模式R并不是一个好的关系模式,把几个关系模式合成为一个关系模式后,属性间增加了一些可能产生问题的数据依赖

四、数据依赖

1、定义

(1)关系模式的表达式:

R(U,D,Dom,F

R:关系名

U:组成该关系的属性集合

D:属性组U中属性所来自的域

Dom:属性向域的影像的集合

F:属性间数据的依赖关系集合

(2)数据依赖是关系模式的要素,是一个关系的属性与属性之间的一种约束关系,反应的是现实世界事物特征间的一种依赖关系,是数据内在的特性,是语义的体现。

(3)由于关系模式中的域和属性向域的映射两个要素对设计关系模式的作用不大,在讨论关系模式的规范化设计时,一般把关系模式简化为R(U,F),在单独提出F时,关系模式还可以简化为R(U)

2、分类

属性间常见的数据依赖有以下三种:

(1)函数依赖

(2)多值依赖

(3)连接依赖

五、关系模式规范化的理论基础-ARMSTRONG公理及相关概念、实现不同规范化目标的模式分解算法等

六、关系数据库模式的学习思路

(1)什么是“好”的关系数据库模式

(2)如何评价“好”的关系数据库模式

(3)如何设计“好”的关系数据库模式

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

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

相关文章

[巨详细]安装HBuilder-X教程

文章目录 下载HBuilder-X点击网址 ,打开官网先点击所有产品,再点击HBuilder-X。进入HBuilder-X官网页面点击more,选择适合的版本下载。等待下载打开压缩包,点击HBuilderX.exe选择喜欢的风格关闭该弹窗,选择创建就创建成…

郑州设计资质延续流程:人员社保的审核标准是什么?

郑州设计资质延续流程中,人员社保的审核标准如下: 一、社保缴纳期限 审核标准:人员(技术负责人、注册人员等)的社保考核期限恢复为3个月。需要提供相关人员至少连续3个月的社保缴纳记录。 二、社保缴纳主体 审核标准…

【Pandas驯化-06】一文搞懂Dataframe中的索引stack、unstack问题

【Pandas驯化-06】一文搞懂Dataframe中的索引stack、unstack问题 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 相关内容文档获取 微信公…

macbook屏幕录制技巧,这2个方法请你收好

在当今数字化时代,屏幕录制成为了一项不可或缺的技能,无论是教学演示、游戏直播,还是软件操作教程,屏幕录制都能帮助我们更直观地传达信息。MacBook作为苹果公司的标志性产品,其屏幕录制功能也备受用户关注。本文将详细…

GeoJson 地图地理信息数据获取

效果图: 获取渠道: 通过阿里数据可视化平台获取通过Vector Maps获取通过geojson来获取 1、通过阿里数据可视化平台获取 2、通过Vector Maps获取 3、通过geojson获取

618数码好物有哪些?热门榜单强势出炉

大家好!随着6.18购物狂欢节的来临,我可以明白在面对非常吸引人的商品时,“选择困难症”就上来了。因此,为了帮助大家在这场购物盛事中有方向,我特意结合个人使用体验和市场研究,为大家筛选了几件既具有超高…

【启明智显产品介绍】Model4 工业级HMI芯片详解系列专题(一):芯片性能

Model4 工业级HMI芯片详解系列专题(一)【芯片性能】 Model4系列工业级MPU是国产自主面向工业应用的RISC-V架构的应用级芯片,内置玄铁64bit RISC-V CPU C906,主频高达600MHz,算力约1380DMIPS。 Model4系列工业级MPU具…

课程设计——基于FPGA的交通红绿灯控制系统(源代码)

摘要: 本课程设计旨在设计一个基于FPGA(现场可编程门阵列)的交通红绿灯控制系统。该系统模拟了实际道路交叉口的红绿灯工作场景,通过硬件描述语言(如Verilog或VHDL)编写源代码实现。系统包含三个主要部分&a…

DAY6-力扣刷题

1.下一个排列 31. 下一个排列 - 力扣(LeetCode) 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组…

2024年移动端技术探索

2024年移动端技术探索 引子 2023年号称AI元年,AI带来了一些不是很清晰的机会,没有看到有多好的落地,对于互联网,不止技术层面没有突破,业务层面的需求也断崖式下滑,没有创新就没有需求,老业务…

Folly,一个强大的C++库

目录 1.引言 2.Folly库的特点 3.Folly库的应用场景 4.示例代码 5.总结 1.引言 Folly 是Facebook开发的一个开源、无许可(Apache 2.0)的现代C库,旨在提升性能和简化编写复杂任务的工作流程。它包含了一系列用于系统级编程的工具&#xff…

联华集团:IT团队如何实现从成本中心提升至价值中心|OceanBase 《DB大咖说》(十)

OceanBase《DB大咖说》第 10 期,我们邀请到了联华集团的CTO楼杰,来分享他如何思考 IT 业务价值,以及联华华商数据库的升级实践。 楼杰从大学毕业后就进入了联华工作,并一直扎根在近 20 年的,从一名底层的技术员成长为…

Swift Combine — Future和Promise的使用

平时在开发的过程中,免不了进行异步编程,比如进行网络请求,以前异步编程的时候主要采用两种方法: 通过代理方法,设置代理,实现代理方法。通过闭包block块处理。 采用第一种方法代码分家,不利于…

eNSP学习——配置DHCP中继

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF网络 3、配置DHCP服务器 4、配置DHCP中继 5、配置PC获取地址方式为DHCP 主要命令 //配置指定DHCP服务器的方法 //方法一:在面向PC的接口下直接配置DHCP服…

CentOS 7.9上创建的JBOD阵列恢复(二)

系列文章目录 CentOS 7.9上创建JBOD(一) CentOS 7.9检测硬盘坏区、实物定位(三) 文章目录 系列文章目录前言一、用命令查看是否认到盘二、直接组JBOD三、挂载到新目录四、查看原数据总结 前言 在CentOS 7.9上创建了一个软阵列JB…

游戏运营与发行:从入门到实践

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

数据中心分类和类别综合指南

数据中心可根据其规模、功能、所有权、层级和部署方法进行分类。以下是一些典型的数据中心类别和分类。 数据中心的分类和分级 根据尺寸 1. 小型数据中心:通常是为了满足对IT基础设施需求较少的组织或小型企业的需求而创建的。与大型数据中心相比,小型…

Redis缓存设计之常见问题及解决方案

背景:缓存的常见问题及对应的解决方案进行了整理,给大家分享一下。 1.缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储 层查不到数据则不写入缓存层。 缓…

【深度学习】GPT-3,Language Models are Few-Shot Learners(一)

论文: https://arxiv.org/abs/2005.14165 摘要 最近的研究表明,通过在大规模文本语料库上进行预训练,然后在特定任务上进行微调,可以在许多NLP任务和基准上取得显著的进展。虽然这种方法在结构上通常是任务无关的,但…

国内外LabVIEW开发的区别

​分析国内外在LabVIEW开发中的差异需要从多个方面进行比较,包括界面设计、架构设计、注释与文档、调试方法、维护策略以及升级与迭代管理等。 界面设计: 国外的LabVIEW界面设计通常更加注重用户体验和视觉美观,使用现代化的控件和布局&…