系统架构设计·数据库系统·函数依赖和范式

 一、数据库系统

1.1 函数依赖

        概念:给定一个X,能唯一确定一个Y,就称X决定(确定)Y,或者说Y依赖于X。 例如:Y=X*X函数,此时X能确定Y的值,但是Y无法确定X的值,比如x=2,y=4,但是y=4无法确定x=2。

        函数依赖又可扩展以下两种规则:

                1、部分函数依赖:A可决定C,(A,B)也可决定C,既然A都可以决定C了,那么要不要B其实都无所谓了,所有这种就称之为部分函数依赖。

                2、传递函数依赖:当A和B不相同时,A可决定B,B可决定C,则A可决定C,是传递函数依赖;若A和B相同,则不存在传递了,A就可以直接就可决定C。

1.2 函数依赖公理系统

        函数依赖的公理系统是指一组用于推导和证明函数依赖的规则和公理集合。这些公理系统基本上是数学理论的扩展,包括以下公理和规则:

                1、自反律:对于任意属性集合X和Y,有X ⊆ Y,则X → Y。 

                2、增广律:对于任意属性集合X、Y和Z,如果X → Y,那么XZ → YZ。

                3、合并律:对于任意属性集合X、Y和Z,如果X → Y和X → Z,那么X → YZ。

                4、分解律:对于任意属性集合X、Y和Z,如果X → YZ,则X → Y和X → Z。

                5、合成律:对于任意属性集合X、Y和Z,如果X → Y且Y → Z,那么XZ → YZ。

                6、传递律:对于任意属性集合X、Y和Z,如果X → Y且Y → Z,那么X → Z。

1.3 键与约束

        超键:能唯一标识记录的属性集合(可能不止一个)。

        候选键:最小的超键,用于作为主键(通常只有一个)。

        主属性:除候选键外的具有代表意义的非重复且非衍生属性。

        主键:任选一个候选键,即可作为主键。

        外键:其他表中的主键。

        实体完整性约束:即主键约束,主键值不能为空,也不能重复。

        参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值,或者为空。

        用户自定义完整性约束:自定义表达式约束,如设定年龄属性的值必须在0到180之间。

        例子:设计一张学生课程表,包含以下属性:学号、姓名、系名、课程名称、教师姓名:

                超键:是表中能唯一区分每条记录的数据项集合。该表有两个超键:

                - 学号:能唯一标识每位学生

                - 姓名+系名+课程名称:也能唯一标识每门课程

                候选键:是表中的最小超键,用于关联其他表或保证数据完整性。该表的候选键是学号。因为学号作为最小的超键,既能唯一标识每位学生,又适合作为主键与其他表建立关联。

                主属性:是除候选键之外的非重复且非衍生的属性集合。该表的主属性为:

                - 姓名:标识学生的名称,非重复且非从其他属性导出

                - 系名:标识学生的系别,非重复且非从其他属性导出

                - 课程名称:标识选修课程的名称,非重复且非从其他属性导出

                - 教师姓名:标识任课教师的姓名,非重复且非从其他属性导出

        超键:雇员编号,姓名,部门编号,部门名(这些属性的任意组合可以唯一标识一行记录)

        候选键:雇员编号(可以唯一标识一行记录,并且没有它的任何属性子集具有同样的特征)

        主键:雇员编号(从候选键中选择的最简单属性,用于唯一标识一行记录)

        外键:部门编号(在雇员表中指向部门表的主键,用于两张表之间的联系) 

        主属性:雇员编号,姓名,职位(决定雇员实体的属性)

1.4 范式

第一范式1NF

        要求数据库表中的所有字段都是不可分割的原子值。通俗地说,第一范式就是表中不允许有小表的存在。比如,对于如下的员工表,就不属于第一范式:

        例子:用一个单一的关系模式学生来描述学校的教务系统:学生(学号,学生姓名,系号,系主任姓名,课程号,成绩)

        依赖关系(学号->学生姓名,学号->所在系,所在系>系主任姓名,学号>课程号,  (学号,课程号)->成绩) 

第二范式 2NF

        在1NF的基础上,要求数据库表中的每个非主属性完全依赖于候选键。也就是说,一个表只描述一件事物。

        通俗地说,就是表中不能存在联合主键 按照定义,上面的学生表就不满足2NF,因为学号不能完全确定成绩(每个学生可以选多门课)。

        将学生表分解为: 学生(学号,学生姓名,系编号,系名,系主任)选课(学号,课程号,成绩)。每张表均属于2NF。

第三范式 3NF

        在2NF的基础上,要求数据库表中的每个非主属性不依赖于其它非主属性。也就是说,数据表中的每一列都和主键直接相关,而不依赖于其它列。

        继续上面的实例,学生关系模式就不属于3NF,因为学生无法直接决定系主任和系名,是由学号->系编号,再由系编号->系主任,系编号->系名,因此存在非主属性对主属性的传递依赖

        将学生表进一步分解为: 学生(学号,学生姓名,系编号)系(系编号,系名,系主任)选课(学号,课程号,成绩)每张表都属于3NF。

BC范式

        规范化数据库设计的一种方法,它对关系型数据库中的表进行分解,其符合第三范式(3NF),同时尽量避免数据冗余和不一致性,提高数据的可靠性和完整性。

        假设仓库管理关系表(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。此关系模式已经属于了3NF,那么这个关系模式是否存在问题呢?我们来看以下几种操作:

                1、删除异常:当仓库被清空后,所有”存储物品ID”和”数量”信息被删除的同时,”仓库ID”和”管理员ID”信息也被删除了。

                2、插入异常:当仓库没有存储任何物品时,无法给仓库分配管理员。

                3、更新异常:如果仓库换了管理员,则表中所有行的管理员ID都要修改。

        把仓库管理关系表分解为二个关系表:

                仓库管理:(仓库ID, 管理员ID);

                仓库:(仓库ID, 存储物品ID, 数量)。

        这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个PDF文件是我花钱买来的,现在为了挣积分,拿出来与大家分享!! 本书深入浅出地介绍了目前世界上最受欢迎的数据库管理系统之一——SQL Server。全书共分三个部分:第一部分阐释了数据库的基本概念,讲解了数据库建模语言;第二部分展示了从概念建模到在SQL Server 2008上真正实现数据库的过程;第三部分深入探讨了SQL Server若干方面的技术细节,如数据保护、索引、并发访问等。通过将理论融入数据库实践,清晰地讲解了关系型数据库的设计原则,完整地展示了如何进行良好的关系型数据库设计,深入揭示了SQL Server 2008的技术细节。   本书浓缩了作者作为SQL Server数据库架构师多年来丰富的实践经验,适合各类数据库开发和管理人员学习参考 目录 第1章 数据库概念简介  1.1 数据库设计阶段   1.1.1 概念阶段   1.1.2 逻辑阶段   1.1.3 实现阶段   1.1.4 物理阶段  1.2 关系数据结构   1.2.1 数据库和模式   1.2.2 表、行和列   1.2.3 信息原则   1.2.4 域   1.2.5 元数据   1.2.6 键   1.2.7 未显式赋值的项(NULL)  1.3 实体之间的关系   1.3.1 二元关系   1.3.2 非二元关系  1.4 数据访问语言(SQL)  1.5 理解依赖性   1.5.1 函数依赖性   1.5.2 判定  1.6 总结 第2章 数据建模语言  2.1 数据建模介绍  2.2 实体  2.3 属性   2.3.1 主键   2.3.2 替代键   2.3.3 外键   2.3.4 域   2.3.5 命名  2.4 关系   2.4.1 识别性关系   2.4.2 非识别性关系   2.4.3 角色名字   2.4.4 关系基数   2.4.5 动词短语(关系名字)  2.5 描述信息  2.6 其他建模方法   2.6.1 信息工程   2.6.2 Chen ERD   2.6.3 Visio   2.6.4 Management Studio数据库关系图  2.7 最佳实践  2.8 总结 第3章 概念阶段数据建模  3.1 理解需求  3.2 文档化过程  3.3 需求收集   3.3.1 客户访谈   3.3.2 要回答的问题   3.3.3 现存的系统和原型   3.3.4 其他类型的文档  3.4 识别对象和过程   3.4.1 识别实体   3.4.2 实体间关系   3.4.3 识别属性和域  3.5 识别业务规则和业务过程   3.5.1 识别业务规则   3.5.2 识别基础业务过程  3.6 完成概念模型   3.6.1 识别明显的、额外的数据需求   3.6.2 和客户一起评审   3.6.3 重复以上步骤直到客户同意你的模型  3.7 最佳实践  3.8 总结 第4章 规范化过程  4.1 为什么要规范化   4.1.1 消灭重复数据   4.1.2 避免编写不必要的代码   4.1.3 给表瘦身   4.1.4 最大化聚集索引的使用   4.1.5 降低每张表中索引的数量  4.2 规范化应该走多远  4.3 规范化过程  4.4 实体和属性的形式:第一范式   4.4.1 所有属性必须是原子的   4.4.2 实体的所有实例必须包含相同数量的值   4.4.3 实体中出现的所有实体类型都必须不同   4.4.4 第一范式所避免的不规则编程   4.4.5 当前设计不符合第一范式的线索  4.5 属性间的关系   4.5.1 第二范式   4.5.2 第三范式   4.5.3 Boyce-Codd范式  4.6 实体中的多值依赖   4.6.1 第四范式   4.6.2 第五范式  4.7 非规范化  4.8 最佳实践  4.9 总结  4.10 额外的例子  4.11 本书迄今为止所讲述的故事 第5章 实现基础的表结构  5.1 评审逻辑设计  5.2 变换设计   5.2.1 选择名字   5.2.2 处理子类型   5.2.3 决定树的实现方式   5.2.4 选择键的实现方式   5.2.5 决定域的实现方式   5.2.6 设置模式   5.2.7 评审“最终的”实现模型  5.3 实现设计   5.3.1 创建基本表结构   5.3.2 添加唯一性约束   5.3.3 构建默认约束   5.3.4 添加关系(外键)   5.3.5 处理排序规则和排序   5.3.6 计算列   5.3.7 实现用户定义的数据类型   5.3.8 文档化你的数据库   5.3.9 处理依赖信息  5.4 最佳实践  5.5 总结 第6章 保护数据的完整性  6.1 最佳实

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值