软考:中级软件设计师:关系代数:中级软件设计师:关系代数,规范化理论函数依赖,它的价值和用途,键,范式,模式分解

news2024/10/5 17:19:43

软考:中级软件设计师:关系代数

提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性

关于互联网大厂的笔试面试,都是需要细心准备的
(1)自己的科研经历,科研内容,学习的相关领域知识,要熟悉熟透了
(2)自己的实习经历,做了什么内容,学习的领域知识,要熟悉熟透了
(3)除了科研,实习之外,平时自己关注的前沿知识,也不要落下,仔细了解,面试官很在乎你是否喜欢追进新科技,跟进创新概念和技术
(4)准备数据结构与算法,有笔试的大厂,第一关就是手撕代码做算法题
面试中,实际上,你准备数据结构与算法时以备不时之需,有足够的信心面对面试官可能问的算法题,很多情况下你的科研经历和实习经历足够跟面试官聊了,就不需要考你算法了。但很多大厂就会面试问你算法题,因此不论为了笔试面试,数据结构与算法必须熟悉熟透了
秋招提前批好多大厂不考笔试,直接面试,能否免笔试去面试,那就看你简历实力有多强了。
(5)考网警的大佬,务必把软考:中级软件设计师的内容学好学透,学广,学多


文章目录

  • 软考:中级软件设计师:关系代数
    • @[TOC](文章目录)
  • 软考:中级软件设计师:关系代数
  • 规范化理论——函数依赖
  • 规范化理论它的价值和用途
  • 规范化理论的键
  • 如何求候选键——考点哦
  • 规范化里面的范式——年年必考
    • 第一范式1NF:属性不可分的院子值
    • 第二范式2NF:消除非主属性,对候选键的部分依赖
    • 第三范式3NF:消除非主属性,对候选键的传递依赖
    • 第BC范式BCNF:消除主属性,对候选键的传递依赖
  • 范式例题
  • 规范化理论中的模式分解
  • 总结

软考:中级软件设计师:关系代数

在这里插入图片描述
在这里插入图片描述
并;重复的去掉,其余的东西都要捞过来

交:只要重复的
在这里插入图片描述
差呢就是干掉公共部分

这些都不是重点
重点还是后面的
在这里插入图片描述
笛卡尔积,没用的,啥玩意都要组装一遍
在这里插入图片描述
实际操作中,要避免出现笛卡尔积
因为这种爆炸,也没有意义

浪费空间

n*m
爆炸的

投影是选列【column】
选择是选行【row】
在这里插入图片描述
连接
等值连接
内连接,连接
这些都是数据库中的骚操作,我讲过很多,你看我数据库那些文章
在这里插入图片描述

等值连接,是保证同一个字段相等时,可以连接勾出来,把其他的字段挂在屁股,同一个字段保留一条。
在这里插入图片描述

自然连接
你可以仨字段,134列,或者sno,sname,age啥的三同时满足条件
好说
在这里插入图片描述

规范化理论——函数依赖

在这里插入图片描述
不用读上面这段
给定x,一定映射为一个唯一的y
这波就是x能确定y
f就是函数依赖
y依赖于函数f,有x确定y

y不能确定x,因为多个x可以都得到y

学号,函数f,直接确定一个姓名
这是一对一的映射。
只要确定了学号,它一定对应唯一的名字,这是一个函数依赖。懂?

反过来不行,姓名同名的话,不见得就是同一个学号。
在这里插入图片描述
学号A,课程号B,姓名C
知道了学号,和课程号,一定可以确定姓名
或者只需要学号,就知道姓名
这种就是部分依赖

组件中的一部分,就可以唯一确定姓名

传递函数依赖
在这里插入图片描述
A确定B
B确定C
则A确定了C
但是B不能回退

规范化理论它的价值和用途

考试中的重点知识点哦
在这里插入图片描述
计算机系,其实没必要存这么多,我们可以重新搞一个表
把系号,拿来做map表的话,我们少存很多信息,节约空间
这就是规范化理论的价值

逆规范化?加数据冗余

规范化理论的键

在这里插入图片描述
唯一标识元组,单属性,多属性组合?超建??????????
啥玩意

不懂

超建可能存在冗余

候选键不冗余

比如,学号,姓名,性别
学号确定性别
学号+性别组合键确定性别

则学号+性别可以是超建
但是它不是候选键
因为它不是唯一确定
姓名,或者学号是候选键

主键,只有一个,它就是一个最终的核心代表
数据库中主键就是唯一的代表,虽然身份证号,学号都能唯一确定人,但是只能设定一个
外键,是别的关系的主键,外表,需要关联,我们需要找到同一个人,挂接的相关的属性
比如部门号
员工很多都可以属于外键中的同一个部门。
在这里插入图片描述
你先学数据库,再学这个玩意,其实轻松一点哦。

如何求候选键——考点哦

在这里插入图片描述
很难哦
你怎么识别它是唯一标识一个人的字段

图示法!最方便

看题

在这里插入图片描述
有了依赖有向图
入度A1没有一个箭头指向它,尝试遍历这个图
必须每个点遍历一遍

BFS可以遍历整个图,则,A1就是候选键。

在这里插入图片描述
不是联通图??????????????
这怎么玩!!!!!!

有办法,当无法联通时,或者单独一个点没法遍历整个图时
需要找集合,就是那些入度我0的所有点,有了这些点,才能遍历完所有的点
这些点的集合,就是候选键
在这里插入图片描述

在这里插入图片描述
这种呢?????
B入度为0????找中间节点,既有入度,也有出度
A同时决定BC组合键
可以
B也可以
所以A或者B都行
这么骚吗
这就是软考的题目哦

规范化里面的范式——年年必考

必考知识点
在这里插入图片描述
3NF爆炸了已经很好了

123依次变高。【之前考试我都不会】

第一范式1NF:属性不可分的院子值

属性已经不能再拆分了

高职还能再拆在这里插入图片描述

第二范式2NF:消除非主属性,对候选键的部分依赖

消除非主属性,对候选键的部分依赖。
【注意区分哦】这是消除非主属性,对候选键的部分依赖
在这里插入图片描述
学号,课程号,联合才能决定成绩
但是课程号,能决定学分,一门课就是一个学分
非主属性学分,没有完全依赖主键
懂了吧,不符合2NF

我们要把课程和学分固定再搞一个表
这样才能符合2范式

问题:
带来数据冗余,学分对应课程,压根不需要放这么多空间。
更新异常,更新学分时,需要全部更新
插入异常,新课程号来了,学分6分,现在你想录入学分
如果没人选课,则你6分的新课程,你没法插入啊
尴尬
删除异常
你删除学生,但是学分也被删除了,尴尬

解决方案,把学分单独列出一个表来。

第三范式3NF:消除非主属性,对候选键的传递依赖

消除非主属性,对候选键的传递依赖
【注意区分哦】这还是消除非主属性,对候选键的传递依赖
在这里插入图片描述
一个字段做主键,一定满足2范式,它不会有部分依赖。

问题:
数据冗余,计算机系,爆炸,楼号爆炸
更细姓名,爆炸
新加入学生也没法录入

解决方案
把dno后面仨字段重新独立出来,部门重新单独列一个表。

第BC范式BCNF:消除主属性,对候选键的传递依赖

消除主属性,对候选键的传递依赖
【注意区分哦】这还是消除主属性,对候选键的传递依赖
在这里插入图片描述
这个其实别管了
我们了解一波
满足3NF即可

主属性——属于候选键
非主属性——不是候选键。

它出发能遍历所有点
在这里插入图片描述
SJ,ST都是候选键
相当于S,T,J都是主属性

它满足3NF
所有函数依赖
左边时候选键——这样才是BCNF
但是现在SJ–>T,ST–>J,T–>J
T不是候选键,所以它不是BCNF

这个就了解了,不管

范式例题

在这里插入图片描述
现在表4中有部门
表3需要加部门

表4有月销售额
所以,需要把职工它销售了什么商品号,日期是啥,销量多少,就能算销售额了
A

规范化理论中的模式分解

在这里插入图片描述
A–>B
B–C
拆分
AB
BC
保持了上面的依赖
这种就是保持函数的依赖分解
OK
相当于拆表格
R3:AC
A–>C,A不能直接确定C,这种是不行的
在这里插入图片描述
压缩时也会用到

数据压缩,然后还原
在这里插入图片描述
数据库学完了你才能玩这个东西
很多连接操作,我都会的
只要能连接2个表,算是无损

在这里插入图片描述
很好拆分
主键自己带自己的属性
连接外键搞定好了就好办了
美滋滋。
在这里插入图片描述

分解出来的东西做交集
然后分别做差集

结果与交集是有依赖的,那就是无损

大致明白

表的某个键,一定与2个表都有挂接的


总结

提示:重要经验:

1)
2)
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

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

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

相关文章

一篇文章带你彻底了解Java常用的设计模式

文章目录 前言1. 工厂模式使用示例代码优势 2. 单例模式说明使用示例代码优势 3. 原型模式使用示例代码优势 4. 适配器模式使用示例代码优势 5. 观察者模式使用示例代码优势 6. 策略模式使用示例代码优势 7. 装饰者模式使用示例代码优势 8. 模板方法模式使用示例代码优势 总结 …

python-数据可视化-下载数据-CSV文件格式

数据以两种常见格式存储:CSV和JSON CSV文件格式 comma-separated values import csv filename sitka_weather_07-2018_simple.csv with open(filename) as f:reader csv.reader(f)header_row next(reader)print(header_row) # [USW00025333, SITKA AIRPORT, A…

YOLO目标检测——皮肤检测数据集下载分享

数据集点击下载:YOLO皮肤检测数据集Face-Dataset.rar

springboot源码方法

利用LinkedHashSet移除List重复的数据protected final <T> List<T> removeDuplicates(List<T> list) {return new ArrayList<>(new LinkedHashSet<>(list));} SpringFactoriesLoader#loadFactoryNames 加载配置文件

常见的移动端布局

流式布局&#xff08;百分比布局&#xff09; 使用百分比、相对单位&#xff08;如 em、rem&#xff09;等来设置元素的宽度&#xff0c;使页面元素根据视口大小的变化进行调整。这种方法可以实现基本的自适应效果&#xff0c;但可能在不同设备上显示不一致。 <!DOCTYPE ht…

ctfshow-web14

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 首先看到这个&#xff0c;swith&#xff0c;那么直接输入4&#xff0c;则会打印$url的值 然后访问一下 查看一下&#xff0c;发现完整的请求是http://c7ff9ed6-dccd-4d01-907a-f1c61c016c15.challenge.ctf.sho…

python网络爬虫指南二:多线程网络爬虫、动态内容爬取(待续)

文章目录 一、多线程网络爬虫1.1 线程的基础内容、GIL1.2 创建线程的两种方式1.3 threading.Thread类1.4 线程常用方法和锁机制1.5 生产者-消费者模式1.5.1 生产者-消费者模式简介1.5.2 Condition 类协调线程 1.6 线程中的安全队列1.6 多线程爬取王者荣耀壁纸1.6.1 网页分析1.6…

2023-8-26 模拟散列表

题目链接&#xff1a;模拟散列表 拉链法 #include <iostream> #include <cstring>using namespace std;const int N 100010;int h[N], e[N], ne[N], idx;void insert(int x) {int k (x % N N) % N;e[idx] x;ne[idx] h[k];h[k] idx;idx ; }bool query(int …

智慧县城,乍暖还寒风起时

提起中国的区域数字化&#xff0c;我们大概率会关注两个维度。一个是北上广深为代表的超大城市&#xff0c;这里的智慧城市落地是风向标、排头兵&#xff1b;另一个是乡村的数字化、智能化&#xff0c;作为区域智能升级的最小单位&#xff0c;乡村的典型性更强&#xff0c;也符…

nlp大模型课程笔记

自然语言处理基础和应用 &#x1f446;说明之前的大模型其实有很多都是基于迁移学习的方法。 attention机制的总结&#xff0c;解决了信息瓶颈的问题。 处理词组时BPE的过程 &#x1f446;pos表示的是token所在的位置 &#x1f446;技巧是layer normalization。

数据结构(Java实现)-二叉树(上)

树型结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#xff0c;称为根结点&…

从爬楼梯到斐波那契数列:解密数学之美

题目描述 我们来看看力扣的一道经典问题70. 爬楼梯 递归 假设n级台阶有climbStairs(n)种方法爬到楼梯顶。如果有n级台阶&#xff0c;如果第一次往上爬1级台阶&#xff0c;就会剩下n-1级台阶&#xff0c;这n-1级台阶就有climbStairs(n-1)种方法爬到楼梯顶&#xff1b;如果第一…

C++通过JNI调用JAVA方法返回ArrayList对象

运行效果: JAVA实现: 获取系统已安装应用列表并返回List<String>对象 //使用系统API获取安装包列表public List<String> getAppList(MainActivity act) {List<String> packages = new ArrayList<String>();try {//取包信息列表List<PackageInf…

Python学习 -- 类的多态

在面向对象编程中&#xff0c;多态性是一项强大的特性&#xff0c;它允许不同的对象对同一方法产生不同的行为。Python作为一门面向对象的编程语言&#xff0c;也支持多态性。本篇博客将深入探讨Python中的类多态性&#xff0c;通过详细的代码案例来展示其灵活性和可扩展性。 …

Leetcode 2235.两整数相加

一、两整数相加 给你两个整数 num1 和 num2&#xff0c;返回这两个整数的和。 示例 1&#xff1a; 输入&#xff1a;num1 12, num2 5 输出&#xff1a;17 解释&#xff1a;num1 是 12&#xff0c;num2 是 5 &#xff0c;它们的和是 12 5 17 &#xff0c;因此返回 17 。示例…

2023.8 -java - 继承

继承就是子类继承父类的特征和行为&#xff0c;使得子类对象&#xff08;实例&#xff09;具有父类的实例域和方法&#xff0c;或子类从父类继承方法&#xff0c;使得子类具有父类相同的行为。 继承的特性 子类拥有父类非 private 的属性、方法。 子类可以拥有自己的属性和方法…

API Gateway介绍

使用微服务架构开发应用后&#xff0c;每个微服务都将拥有自己的API&#xff0c;设计应用外部API的任务因客户端的多样性而变得更具有挑战性。不同客户端通常需要不同的数据。通常基于PC浏览器的用户界面显示的信息要远多于移动设备的用户界面。此外&#xff0c;不同的客户端通…

基于Java+SpringBoot+Vue前后端分离公交线路查询系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Android学习之路(9) Bundle

Bundle的概念理解 Bundle经常出现在以下场合&#xff1a; Activity状态数据的保存与恢复涉及到的两个回调&#xff1a;void onSaveInstanceState (Bundle outState)、void onCreate (Bundle savedInstanceState)Fragment的setArguments方法&#xff1a;void setArguments (Bu…

【网络安全】理解报文加密、数字签名能解决的实际问题

文章目录 前言1. 防止报文泄露 —— 加密体系的出现1.1 理解非对称加密体系的实施难点1.2 加密体系的实际应用 2. 防止报文被篡改 —— 数字签名的出现2.1 数字签名的原理2.2 数字签名的实施难点2.2 数字签名的实际应用 —— 引入摘要算法 3. 实体鉴别 —— CA证书 后记 前言 …