LOGO 第 6 章 数据库规范化设计 孙焘. 重点: 三个范式的基本概念 1 概念模型 2 物理模型 3 多 framePowerDesigner 工具的使用页面设计 4.

Slides:



Advertisements
Similar presentations
2010 年 6 月课件制作人:王亚楠 1 模块 2 项目开发概论 教学课件 年 6 月课件制作人:王亚楠 2 目录 目标 了解:数据库技术的基本概念与结构 理解:数据模型的分类与结构组成 掌握:关系数据库及 SQL 的基本理论 知识 掌握:数据库设计的方法与步骤 内容 2.1 数据库技术基础.
Advertisements

第四章 数据库管理和使用.
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
An Introduction to Database System
SQL的简单查询.
第六章 数据库设计.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
复习重点; 1. 关系模型、ER模型 2. SQL 3. 事务管理 4. 函数依赖与规范化 5. 数据库设计  复习题 一、单项选择题
再發現 埔頂好樣「戀戀古橋」風華再現 (埔頂二號公園) 雇工購料實作成果 埔頂社區發展協會.
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第3章 关系数据库的基本理论 冯万利.
第14章 預存程序 14-1 預存程序的基礎 14-2 建立與執行預存程序 14-3 預存程序的參數傳遞 14-4 預存程序的傳回值
資料庫 (Database) SQL Server 2008實作
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
软件设计师培训.
计算机应用基础 上海大学计算中心.
資料庫管理 資管二 賴柏融.
数据库原理 Database Principles 第五章 数据库完整性 Database Principles.
用心写信息 让数说实话.
第五讲 利用视图进行查询优化.
第六章: 建立資料庫.
第六章 學習SQL語言.
第 8 章 資料的 新增、修改與刪除.
資料庫系統 Database Systems
課程名稱:資料庫系統 授課老師:李春雄 博士
第4章 SQL语言基础及数据库定义 4.1 基本概念 4.2 SQL Server 提供的主要数据类型 4.3 数据定义.
第 14 章 預存程序.
胡鹏 王慧锋 TEL: 数据库系统原理课程设计 实验环节1 胡鹏 王慧锋 TEL:
Microsoft SQL Server 2000 李金双.
資料表正規化.
第 2 章 規劃關聯式資料庫.
教 师:曾晓东 电 话: 数据库技术 教 师:曾晓东 电 话:
SQL Server 2000 数据库入门.
Chapter 3 正規化與各種合併.
資料庫簡介 郭士煒 助教.
表格正規化簡介 講授大綱: 第一正規化 資料表的切割 第二正規化 第三正規化 Boyce/Codd正規化 第四正規化 第五正規化
《第二組》 組長/謝佳馨 組員/陳大為、葉容政、張智陪
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
第7章 ADO.NET操作SQL Server数据库
單元3:軟體設計 3-1實體關係圖 Ch 08 System models.
第9章 SQL Server的数据库保护技术 教学目标:通过本章学习,了解SQL Server的安全体系结构的含义和安全认证模式的分类;掌握SQL Server登录账号、用户账号及角色的创建方法;熟悉权限的分类,掌握对象权限和语句权限的管理方法;明确SQL Server中数据完整性的种类,掌握数据完整性实现的具体方法;熟悉SQL.
第九章 進階的查詢技巧.
国家“十一五”规划教材 数据库原理与应用教程(第3版).
SQL SERVER 一些经典语句 1.
医院职工公费医疗系统.
Ch4.SQL Server 2005資料庫組成員元件介紹
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
实验二讲评 … 张榆….
数据库技术.
数据库应用技术 SQL Server 2005.
第二章 實體關係模式:基本概念 目的 何謂實體關係模式和實體關係圖(ERD) 實體型態 關係型態 二元關係型態 弱實體型態 遞迴關係型態
第二章 實體關係模式:基本概念 目的 何謂實體關係模式和實體關係圖(ERD) 實體型態 關係型態 二元關係型態 弱實體型態 遞迴關係型態
数据库技术与应用.
20 SQL Server全文檢索搜尋 20-1 SQL Server全文檢索搜尋 20-2 全文檢索目錄的建立 20-3 建立全文檢索索引
数据库技术.
資料庫管理系統 緒 論.
通讯录管理系统设计 常州工程职业技术学院 计算机技术系.
学习目标 1、什么是表连接 2、表连接类型 3、表连接区别.
查询与视图 蔡海洋.
SQL查询语句 蔡海洋.
ERWin简介 目前流行的数据库建模工具 PowerDesigner Rose ERwin
第 7 章 建立資料表與資料庫圖表.
第9章 视 图 教学提示:用户在查询数据库中的数据时,除了直接查看数据库中的表中的数据以外,还可以通过视图来查看表中的数据,也就是说,视图为用户提供了另外一种查看表中的数据的方式。 视图是一种虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自于定义视图的查询所引用的表,并且在引用视图时动态生成。
教育部特殊教育通報網 學生異動、接收操作說明.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
資料庫管理 HOMEWORK #2 楊立偉教授 台灣大學工管系 2013 Fall.
資料庫應用與實作 一到六章重點、習題.
银川社保网上申报 宁夏人力资源和社会保障 网上服务大厅操作
Presentation transcript:

LOGO 第 6 章 数据库规范化设计 孙焘

重点: 三个范式的基本概念 1 概念模型 2 物理模型 3 多 framePowerDesigner 工具的使用页面设计 4

难点: 范式概念的理解 1 “ 强制 ” 关系概念的理解 2 概念模型和物理模型的区别 3 多对多模型的转换 4

6.1 E-R 模型

 E-R 图也即实体 - 联系图 (Entity Relationship Diagram) ,提供了表示实体 型、属性和联系的方法,用来描述现实世界的概 念模型。  E-R 方法 : 是 “ 实体 - 联系方法 ” ( Entity- Relationship Approach )的简称。它是描 述现实世界概念结构模型的有效方法。  构成 E-R 图的基本要素是实体型、属性和联系

实体型 (Entity) :  具有相同属性的实体具有相同的特 征和性质,用实体名及其属性名集合 来抽象和刻画同类实体 ; 在 E-R 图中用 矩形表示,矩形框内写明实体名

属性 (Attribute) :  实体所具有的某一特性,一个实体 可由若干个属性来刻画。在 E-R 图中 用椭圆形表示,并用无向边将其与相 应的实体连接起来;比如学生的姓名 、学号、性别、都是属性。如果是多 值属性的话,再椭圆形外面再套实线 椭圆。

联系 (Relationship) :  信息世界中反映实体内部或实体之 间的联系。实体内部的联系通常是指 组成实体的各属性之间的联系;实体 之间的联系通常是指不同实体集之间 的联系。在 E-R 图中用菱形表示,菱 形框内写明联系名,并用无向边分别 与有关实体连接起来,同时在无向边 旁标上联系的类型

联系的类型  1 对 1 :在两个实体连线方向写 1 ;  1 对多:在 1 的一方写 1 ,多的一方写 N ;  多对多:则是在两个实体连线方向各写 N,M

6.2 键 (Key) :  ①超键:可以唯一标识一个实体的属性或者属性组  ②候选键:可以唯一标识一个实体的具有最小属性 数目的超键。  ③主键 (PK) :被选中作为标示实体的候选键。如学 生表里学号是主键,选课表里学号和课号是联合主键。  ④备用键:没有被选中作为实体的候选键。  ⑤外键 (FK) :实体 A 中的一个属性组,与另一个实 体 B 的候选键相对应,则称该属性组为 A 的外键。如学生 表里的院系代码与院系表的主键对应,院系代码是学生表 的外键。

6.3 概念模型:  数据库概念模型是对真实世界中问题域内的 事物的描述,不是对软件设计的描述。概念的描 述包括:记号、内涵、外延,其中记号和内涵( 视图)是其最具实际意义的。  概念模型不依赖于具体的计算机系统,他是 纯粹反映信息需求的概念结构。  建模是在需求分析结果的基础上展开,常常 要对数据进行抽象处理。常用的数据抽象方法是 ‘ 聚集 ’ 和 ‘ 概括 ’ 。

概念模型的建模过程:  运用概念目录列表或名词性短语找出问 题领域中的后选概念  绘制概念到概念模型图中  为概念添加关联关系  为概念添加属性

设计局部概念模型  ① 确定局部概念模型的范围  ② 定义实体  ③ 定义联系  ④ 确定属性  ⑤ 逐一画出所有的局部 ER 图,并附以 相应的说明文件

设计全局概念模型  ① 确定公共实体类型  ② 合并局部 ER 图  ③ 消除不一致因素  ④ 优化全局 ER 图  ⑤ 画出全局 ER 图,并附以相应的说明文件。

6.4 物理模型:  把概念模型转化到数据世界

6.5 范式:  另外一种泛化的数据库设计的方法,叫做规 范化  规范化是一种用来产生表的集合的技术,这 些表具有符合要求的属性,并能支持用户或公司 的需求,规范化通常作为对表结构的一系列测试 来决定它是否满足或者符合 给定范式。存在几种 范式形式,但是最常用的是第一范式,第二范式 和第三范式。所有这些范式都是基于在表中的列 之间的关系的。

第一范式 (1NF)  如果关系模式 R 的每个关系 r 的属性都 是不可分的数据项,那么就称 R 是第一范式 的模式。简单的说,每一个属性都是原子 项,不可分割。 1NF 是关系模式应具备的 最起码的条件,如果数据库设计不能满足 第一范式,就不称为关系型数据库。关系 数据库设计研究的关系规范化是在 1NF 之 上进行的。

要点:  任何给定行的列必须是只包含一个值;  表中的每一行必须有相同数量的列;  表中的每一行必须是唯一的即是不相同 的;

学号姓名性别联系方式 张三 Phone: 李四 Phone: 学号姓名性别电子邮件电话 张三 李四 ↓

第二范式 (2NF)  如果关系模式 R 是 1NF ,且每个非主属性完 全函数依赖于任意一个候选键,那么就称 R 是第 二范式。简单的说,第二范式要满足以下的条件 :首先要满足第一范式,其次每个非主属性要完 全函数依赖于任意一个候选键。也就是说,每个 非主属性是由整个主键函数决定的,而不能由主 键的一部分来决定。

要点  必须满足第一范式;  表中的所有非主键必须依赖一整个主 键;

列名含义类型长度允许空键 Sno 学号 char8NP Cno 课号 char8NP Cname 课程名称 varchar50Y Ccredit 学分 intY CTeacher 教师 varchar10Y Grade 成绩 intY 选课表 2(CS2) 字段列表

表 CS2 中,学号和课号是关键字,而属性课程名称等只取决于课号, 这就不满足第二范式。并将带来以下问题:  (1) 数据冗余:同一门课程由 n 个学生选修,课程名称等就重复 n-1 次。  (2) 更新异常:若调整了某门课程的学分,数据表中所有该门课程 的 “ 学分 ” 值都要更新,否则会出现同一门课程不同学分的情况。  (3) 插入异常:假设要开设一门新的课程,暂时还没有人选修。这 样,由于还没有 “ 学生 ” 关键字,课程名称也无法记录入数据库。  (4) 删除异常:假设一批学生已经完成课程的选修,这些选修记录 就应该从数据库表中删除。但与此同时,课程信息也被删除了。

第三范式 (3NF)  如果关系模式 R 是 2NF ,且关系模式 R ( U , F )中的所有非主属性对任何候选关键字都不存在 传递依赖,则称关系 R 是属于第三范式。所谓传 递函数依赖,指的是如果存在 "A → B → C" 的 决定关系,则 C 传递函数依赖于 A 。 简单的说, 第三范式要满足以下的条件:首先要满足第二范 式,其次非主属性之间不存在函数依赖。由于满 足了第二范式,表示每个非主属性都函数依赖于 主键。如果非主属性之间存在了函数依赖,就会 存在传递依赖,这样就不满足第三范式。

要点:  1 )必须满足第二范式;  2 )表中的所有非主键必须相互独 立,即没有传递性依赖

列名含义类型长度允许空键 Cno 课程编号 char8NP Cname 课程名称 varchar50Y Ccredit 学分 intY Cteacher 教师 varchar10Y 课程表 Course 加上职称字段。这样,职称依赖于教师,教师又依赖 这同样会存在数据冗余、更新异常、插入异常和删除异常的情况

鲍依斯 - 科得范式( BCNF ):  在第三范式的基础上,数据库表中 如果不存在任何字段对任一候选关键 字段的传递函数依赖则符合第三范式 。

假设仓库管理关系表为 StorehouseManage( 仓库 ID, 存储物品 ID, 管理员 ID, 数量 ) ,且有一个管理员只在一个仓库工作;一个仓 库可以存储多种物品。这个数据库表中存在如下决定关系: ( 仓库 ID, 存储物品 ID) → ( 管理员 ID, 数量 ) ( 管理员 ID, 存储物品 ID) → ( 仓库 ID, 数量 ) 所以, ( 仓库 ID, 存储物品 ID) 和 ( 管理员 ID, 存储物品 ID) 都是 StorehouseManage 的候选关键字,表中的唯一非关键字段为数 量,它是符合第三范式的。但是,由于存在如下决定关系: ( 仓库 ID) → ( 管理员 ID) 管理员 ID) → ( 仓库 ID)

即存在关键字段决定关键字段的情况,所以其不符合 BCNF 范式。它会 出现如下异常情况: (1) 删除异常: 当仓库被清空后,所有 " 存储物品 ID" 和 " 数量 " 信息被删除的同时, " 仓 库 ID" 和 " 管理员 ID" 信息也被删除了。 (2) 插入异常: 当仓库没有存储任何物品时,无法给仓库分配管理员。 (3) 更新异常: 如果仓库换了管理员,则表中所有行的管理员 ID 都要修改。

把仓库管理关系表分解为二个关系表: 仓库管理: StorehouseManage( 仓库 ID, 管 理员 ID) ; 仓库: Storehouse( 仓库 ID, 存储物品 ID, 数 量 ) 。 这样的数据库表是符合 BCNF 范式的,消除了删 除异常、插入异常和更新异常。

 数据库设计中还有第四、第五范式 ,在一般的设计中能达到 BC 范式,或 者第三范式即可,在一些应用中,达 到第二范式即可。

6.6 SQL 依赖关系  SQL 依赖关系是在 SQL 表达式中使用的按名称引 用,可使一个实体依赖于另一个实体。在其定义中引用了 另一个实体并且该定义存储在系统目录中的实体称为 “ 引 用实体 ” 。被另一个实体引用的实体称为 “ 被引用的实体 ” 。 数据库引擎跟踪两种类型的依赖关系。

绑定到架构的依赖关系  绑定到架构的依赖关系是一种两个实体之间 的关系,只要引用实体存在,这种关系就可以防 止被引用的实体被删除或更改。绑定到架构的依 赖关系是在使用 WITH SCHEMABINDING 子句创建视图或用户定义函数时创建的。绑定到 架构的依赖关系也可以于表在 CHECK 或 DEFAULT 约束或计算列定义中引用另一个实体 (例如 Transact-SQL 用户定义函数、用户定 义类型或 XML 架构集合)时创建。使用由两部 分 (schema_name.object_name) 组成的 名称指定对象不能称为绑定到架构的引用。

非绑定到架构的依赖关系  非绑定到架构的依赖关系也是一种 两个实体之间的关系,但这种关系并 不防止被引用的实体被删除或修改。

 图中包含两个实体:过程 X 和过程 Y 。过程 X 包含一个 对过程 Y 按名称引用的 SQL 表达式。过程 X 称为 “ 引用实体 ” ,而过程 Y 称为 “ 被引用的实体 ” 。由于过程 X 依赖于过程 Y , 因此当过程 Y 不存在时,过程 X 将失败,并出现运行时错误。 但是,当过程 X 不存在时,过程 Y 也不会失败。

 下面的示例说明存储过程 X 如何依赖于存储过程 Y 。  USE tempdb; GO CREATE PROCEDURE dbo.Y AS SELECT * FROM sys.objects GO CREATE PROCEDURE dbo.X as EXEC dbo.Y; GO

 若要查看 X 对 Y 的依赖关系,请运行以下查询。  SELECT * FROM sys.sql_expression_dependencies WHERE referencing_id = OBJECT_ID('X') AND referenced_id = OBJECT_ID('Y') AND referenced_schema_name = 'dbo' AND referenced_entity_name = 'Y' AND referenced_database_name IS NULL AND referenced_server_name IS NULL; GO

6.7 多对多关系  将多对多关系映射到数据库关系图中  多对多关系使您得以将一个表中的每一行与 另一个表中的多行相关,或者将后者中的每一行 与前者中的多行相关。例如,可创建 authors 表与 titles 表之间的多对多关系,以将每位作者 与他或她的所有书籍匹配并且将每本书与其所有 作者匹配。从上述任何一个表创建一对多关系都 会错误地表示每本书只能有一位作者或者每位作 者只能编写一本书。

 表与表之间的多对多关系通过联接表存 储于数据库中。联接表包含要相关的两个 表的主键列。然后,分别创建从每个表的 主键列到联接表中的匹配列之间的关系。 在 pubs 数据库中, titleauthor 表是联 接表。

 多对多关系至少需要 3 个表,我们把一 个表叫做主表,一个叫做关系表,另外一 个叫做字典表或者副表  按照数据库的增删查改操作,多对多关 系的查找都可以用 inner join 或者 select * from 主表 where id in (select 主 表 id from 关系表 )

LOGO