超码、候选码、主码(主键)、主属性、非主属性、关系数据库中的依赖、关系数据库范式、反范式

超码:可以区分记录的一个属性或多个属性的集合。
候选码:超码的最小集,即包含最少属性的超码。超码的最小集可以有多个,即多个集合大小相同,但元素构成不完全相同的最小集。
主码(主键):被选中的一个候选码。候选码可以有多个,主码只有一个。主键如果是由多个属性构成,又称联合主键。

主属性:属于某个候选码的属性。
非主属性:不属于任何候选码的属性。

表的域、属性、字段、数据项是一致的。

关系数据库中的依赖:根据A属性可以得到B属性,则B属性依赖于A属性。如:根据学号可以得到姓名,则姓名依赖于学号。
Java模块中的依赖:A模块的运行需得到B模块的支持,则A模块依赖于B模块。

关系数据库范式(Normol Form,NF):
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(Boyce-Codd Normal Form,BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
第N范式满足第N-1范式,N>=2。
下面的介绍,默认后者已经建立在前者的基础上,只是加上了增加部分的表述:
1NF:属性有原子性,即属性不可拆分。如:员工表中不能有部门属性,应该是部门编号属性。
2NF:表有主键,即记录可区分。如:表中有两条记录内容完全相同,就违反了2NF。
3NF:非主属性之间没有依赖,即属性之间消除依赖传递。如:员工表中有员工编号,有部门编号,有部门人数,而部门人数依赖于部门编号,二者都是非主属性,违反了3NF;员工部门编号依赖于员工编号,造成了传递依赖:员工所在部门人数依赖于员工编号,应该去掉部门人数。
BCNF:非主属性不依赖于主键子集。
4NF:属性集合和属性集合之间没有依赖。
5NF:每个连接依赖被候选码包含。


规范的目的是消除表数据的冗余,节省存储空间;有助于保持数据一致性,提高操作效率。
如:表中有各属性值完全相同的记录,造成了数据多余的存储。如果满足2NF,就不会发生。
    部门表中存储了部门编号和部门人数,员工表中存储了部门编号,还存储了部门人数,修改部门人数时得修改两张表,不利于数据一致性存储,修改效率低,如果满足了3NF,就不会发生。

反范式
范式减少了数据冗余,使一个属性尽可能只存储在一张表中,使表的划分更细,表更多;为了整合数据,需更多地跨表联查,如果联查很多张表,或联查的表的数据量很大,耗时会很严重,在这种情况下可以反范式,即违反范式要求去设计表,在一张表中增加需跨表联查的属性,存储属性的值。

在分库分表的情况下,为了避免跨表联查,对数据及时性要求高的系统选择违反3NF设计表,对数据及时性要求低的系统选择调用微服务进行缓存组装。

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风铃峰顶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值