-
83.数据库如何解决数据冗余问题?84.关系范式
2020-05-05 17:09:34数据库范式能帮忙解决数据冗余问题 1.第一范式(1NF) 关系里的属性不能够拆分。 第一个不符合第一范式,第二个表才符合。 2.第二范式(2NF) 在1NF的基础上,且每一个非主属性完全函数依赖于任何一个候选码 就是...数据库范式能帮忙解决数据冗余问题
1.第一范式(1NF)
关系里的属性不能够拆分。
第一个不符合第一范式,第二个表才符合。
2.第二范式(2NF)
在1NF的基础上,且每一个非主属性完全函数依赖于任何一个候选码
就是说主属性决定不了非主属性,但是非主属性依赖于候选码
候选码:学号+姓名+课名
那么主属性:学号 姓名 课名
非主属性:系名,系主任、分数
首先这个表是第一范式,但是很明显非主属性不完全依赖候选码。比如系名就跟学号和姓名和课名没多大关系。
所以我们拆成
先看第一个表,学号跟课名是候选码。
主属性:学号、课名。非主属性:分数。
分数取决于学号+课名。
但是课名决定不了分数,还得加分数。
第二个表格
候选码:学号
主属性:学号
非主属性:姓名,系名,系主任。
学号可以决定学号,但是学号决定了系名和系主任。
所以也是第二范式。
分数
3.第三范式(3NF)
3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。也就是说, 如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。
传递依赖
在上面拆成的第二个表中是符合2NF,但是系主任取决于系名,系名取决于学号。这种就是传递依赖。所以这个表不符合3NF。
把它拆成以上两个表,就不会存在传递依赖了。总结一下:
1NF是为了解决属性可再拆分的数据冗余。
2NF是为了解决部分非主属性不依赖所有候选码。
部分非主属性只取决于部分候选码,那么就要拆表。拆成所有非主属性取决于所有候选码
3NF是为了解决 非主属性虽然取决于所有候选码,但是部分非主属性之间有依赖关系 比如说 地名跟邮政编码一般都是会有依赖关系的,就会形成传递依赖。 -
如何解决“数据错误,循环冗余检查”
2019-12-14 12:42:32在使用Win32DiskImager.exe为香橙派或者树莓派烧写镜像的时候,会出现“数据错误,循环冗余检查” 昨天晚上折腾了到半夜,一直以为是自己的编译的出来的镜像有问题或者是sd有问题呢,最终发现都不是。在这里我想对...在使用Win32DiskImager.exe为香橙派或者树莓派烧写镜像的时候,会出现“数据错误,循环冗余检查”
昨天晚上折腾了到半夜,一直以为是自己的编译的出来的镜像有问题或者是sd有问题呢,最终发现都不是。在这里我想对小伙伴们说,可以考虑是usb供电问题和读卡器本身的问题。
我解决的方法是:更换了一个tf的读卡器, 然后烧写镜像的时候,将读卡器插入到了电脑后面的USB接口,成功的烧写成功了。
记录一下,以防以后遇见这类问题忘记。小伙伴们也可以参考一下。
-
菱形继承问题和虚继承是如何解决二义性与数据冗余的
2017-07-21 21:30:25菱形继承问题和虚继承是如何解决二义性与数据冗余的继承是c++的三大特性之一,其中菱形继承问题是一个值得我们学习和掌握的知识点。 1.什么是菱形继承呢? 菱形继承定义为:两个子类继承同一个父类,而又有子类...菱形继承问题和虚继承是如何解决二义性与数据冗余的
继承是c++的三大特性之一,其中菱形继承问题是一个值得我们学习和掌握的知识点。
1.什么是菱形继承呢?
菱形继承定义为:两个子类继承同一个父类,而又有子类同时继承这两个父类。
可能这样纯粹的文字大家不能直观的理解它,下面画一幅直观图便可一目了然:
菱形继承的代码描述如下:#include<iostream> using namespace std; class A { public: int _a; }; class B : public A { public: int _b; }; class C : public A { public: int _c; }; class D :public B, public C { public: int _d; }; void Test() { D d; d.B::_a = 1; d.C::_a = 2; } int main() { Test(); return 0; }
可以看到,在对_a赋值时,必须使用域访问限定符,否则无法识别是对BB对象还是对CC对象中的 _a赋值,虽然这样解决了二义性问题,但是又产生了数据冗余的问题.
2.如果要解决二义性和数据冗余的问题,则又需要引入虚继承的概念。
虚继承是在class B : public A与class C :public A的public前加上关键字virtual.
3.那么虚继承是如何解决二义性的呢?
要讨论这个问题,首先要来看看,对于菱形继承和虚继承来说, sizeof(b)的值是多大呢,菱形继承很容易看出答案是20个字节,很多人会想,那虚继承就是16字节了,但经过测试,发现应该是24字节,怎么会多出8个字节呢,这就涉及到内存的分配.
将Test()做修改:void Test() { D d; d.B::_a = 0; d.C::_a = 1; d._b=2; d._c=3; d._d=4; }
菱形继承中对象d求sizeof(d)=20
可以看到内存分配正好符合菱形继承对象模型中变量的顺序
给class B : public A与class C :public A的public前加上关键字virtual后,变成菱形虚继承,现在来看虚继承的情况.
此时对象d的sizeof(d)=24那么地址0X00BBF8CC和0X00BBF9D4中存储的是什么呢?
在去查看内存可以看到0X00BBF8CC和0X00BBF9D4分别存储了一个指针,该指针指向的内存偏移四个字节处存储的分别是十进制值20和12,通过观察0X00BBF8CC和0X00BBF9D4与0X00BBF8E0相差的字节数,刚好是20和12,因此,该值代表了偏移量。 -
剖析C++是如何解决菱形继承的二义性和数据冗余的
2017-08-04 00:13:051.首先我们来解释一下二义性和数据冗余是如何产生的。 我们知道在C++中继承分单继承和多继承,单继承就是一个子类只有一个直接父类,而多继承是一个子类有两个或 两个以上直接父类。 如上图所示多继承...1.首先我们来解释一下二义性和数据冗余是如何产生的。
我们知道在C++中继承分单继承和多继承,单继承就是一个子类只有一个直接父类,而多继承是一个子类有两个或 两个以上直接父类。
如上图所示多继承,构成菱形继承。B类和C类都继承了A类,为A的子类。D类同时继承了B类和C类。所以D类 中有从B支路继承下来的A类,也有从C类中继承下来的A类,因此产生了二义性和数据冗余。
2.C++是如何解决这个问题的
C++语法中是这样解决的:在定义继承关系时,在菱形继承中被多次继承的那个父类前加virtual关键字,形成虚 继承。
下面举实例说明:
class A { public: int _a; }; class B:virtual public A { public: int _b; }; class C :virtual public A { public: int _c; }; class D :public B,public C { public: int _d; };
3.接下来具体分析底层是如何实现的首先来看不加virtual关键字时的对象模型(内存中的分布)。
运行代码如下:
打开内存窗口观察,结果如下:#include <iostream> using namespace std; class A { public: int _a; }; class B:public A { public: int _b; }; class C :public A { public: int _c; }; class D :public B,public C { public: int _d; }; int main() { D d; d.B::_a = 1; d.C::_a = 2; d._b = 3; d._c = 4; d._d = 5; }
接下来看加virtual关键字时的对象模型运行代码如下:
同样打开内存窗口来观察,结果如下:#include <iostream> using namespace std; class A { public: int _a; }; class B:virtual public A { public: int _b; }; class C :virtual public A { public: int _c; }; class D :public B,public C { public: int _d; }; int main() { D d; d.B::_a = 1; d.C::_a = 2; d._b = 3; d._c = 4; d._d = 5; }
观察该对象模型,发现D对象中确实只有一个_a了,说明解决了二义性和数据冗余。
但是B对象和C对象都继承了A对象,这个关系是如何体现的呢?
观察发现B和C中分别存了一个地址,应该是指向某处的一个指针。若通过这两个指针都能找到A对象,就能表示A,B,C的继承关系了。
下来看一下这两个指针指向何处:
发现该指针指向的空间向下一个位置存了一个16进制的数!
B内的指针指向的下一个位置存的是十进制的20,C内的指针指向的下一个位置存的是十进制的12。
而B地址(&B)+20字节=A的地址(&A);&C+12=&A;
所以通过这两个指针可以间接的找的A,表达了B继承A,C继承A的关系;
称这个指针为虚基表指针,指向的表称虚基表。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
本菜鸟也在学习中,表述如有错误或不准确的地方,请您见谅,欢迎各位大神批评指正。
-
lr检查磁盘时出错_win7系统提示数据错误循环冗余检查如何解决【教程】
2021-01-22 17:38:13我们在日常的工作当中,经常会拷贝一些数据,不过最近有位win7系统用户在拷贝的过程当中,系统却提示数据错误循环冗余检查,用户不知道怎么解决这个问题,为此非常苦恼,那么win7系统提示数据错误循环冗余检查怎么办... -
SqlServer数据冗余的问题和解决
2016-12-14 22:12:00所以一般情况不允许在表中出现数据冗余。 2怎么解决? 把原来表中的数据拆分成多个表来存储。 当把表中的信息拆分成多个表来存储的时候会有一个问题:如何将这两张表中的数据关联起来? 答:使用主键和外键来... -
win7更新错误0x800b0109_win7系统提示数据错误循环冗余检查如何解决【教程】
2020-12-11 09:47:19我们在日常的工作当中,经常会拷贝一些数据,不过最近有位win7系统用户在拷贝的过程当中,系统却提示数据错误循环冗余检查,用户不知道怎么解决这个问题,为此非常苦恼,那么win7系统提示数据错误循环冗余检查怎么办... -
如何解决数据中心电源路径问题
2020-10-23 17:21:33电源对数据中心的重要性就好比心脏对人类的重要程度,虽然数据中心设计时可以选择不同的级别和冗余水平,但从来没有人希望数据中心掉电。不管是只有单一UPS的小型数据中心,还是具有完全冗余能力的大型数据中心,... -
如何删除数据库中的冗余数据…
2014-12-23 00:20:36作为数据库的开发者,我们经常面临着要找出及删除数据库中冗余数据的任务,如果数据库中有大量的冗余数据(占总数的百分比太多),数据的精确性和可靠性将受到影响,同时也影响着数据库的性能,那么如何解决这个问题... -
如何删除数据库中的冗余数据
2011-06-12 18:46:00作为数据库的开发者,我们经常面临着要找出及删除数据库中冗余数据的任务,如果数据库中有大量的冗余数据(占总数的百分比太多),数据的精确性和可靠性将受到影响,同时也影响着数据库的性能,那么如何解决这个问题... -
如何删除数据库中的冗余数据(翻译)
2008-04-09 15:17:00作为数据库的开发者,我们经常面临着要找出及删除数据库中冗余数据的任务,如果数据库中有大量的冗余数据(占总数的百分比太多),数据的精确性和可靠性将受到影响,同时也影响着数据库的性能,那么如何解决这个问题... -
如何解决微服务的数据聚合Join问题?
2020-09-09 22:03:19正规化的好处是数据冗余少,不足之处是数据聚合Join会比较麻烦。实际Join的时候,需要将几张相关表,通过主键和外键关系才能Join起来。我们知道,Join是一种开销比较大的SQL运算,当数据量少的时候,这种开销通常OK... -
SpringMVC + Thymeleaf 如何实现让页面公共部分的数据都加载,减少冗余,不是局部刷新
2018-03-20 08:37:52这里求 SpringMVC 如何将共有的数据加载到前台,减少冗余 补充: 这里再提两个问题 1、如何是网站前台呢?也使用 iframe 吗,不可能吧? 2、比如网站名称,网站关键字,网站描述,网站备案号,网站等待信息... -
静态成员在继承中只有一份资源,多继承菱形继承(数据冗余二议)解决,继承与组合,继承总结
2020-12-08 16:27:46// 但是数据冗余问题没有解决 //我们可以考虑使用虚拟继承,这样就可以解决数据二义性和数据冗余的问题 //class student : virtual public person //class teacher : virtual public person //有了虚拟继承,...
-
NPDP值得产品经理去考吗?
-
多变量测试:5个简单步骤提升转化率
-
el-tree子级与父级不需要强关联
-
2021年 系统分析师 系列课
-
与机器人对话:初探语音智能交互
-
MySQL 存储过程(创建海量数据实验环境)
-
自动化测试Python3+Selenium3+Unittest
-
centos防火墙(firewalld)端口操作笔记
-
docker容器镜像相关命令
-
MySQL 备份与恢复详解(高低版本 迁移;不同字符集 相互转换;表
-
Apache.NMS.AMQP-1.8.0-src.zip
-
react项目中suepense的简单使用
-
DM8与Oracle12c兼容性白皮书.pdf
-
NetAssistant-master.zip
-
通过在65nm CMOS中实现2D差分功率组合,输出功率密度为74.5mW / mm2的53至73GHz功率放大器
-
21届数字IC秋招经验分享
-
MySQL NDB Cluster 负载均衡和高可用集群
-
中间件的实战使用
-
github上传本地代码
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)