数据库定义表之间关系(带图)
数据库原理与应用第九章

理平台,这里介绍使用SQL Server管理平台的方法。 在SQL Server 2005管理平台中,展开指定的数据表和数
据库,右击要操作的数据表,从弹出的快捷菜单中选择“修改” 命令,打开修改数据表界面,在要设置唯一性的属性上右击, 从弹出的快捷菜单中选择“索引/键”命令,打开“索引/键”对 话框,单击“添加”按钮后对话框将出现新的索引/键名称,用 户可以修改该索引/键的名称并设置“是唯一的”为“是”,完 成唯一约束的设置。
列的为空性决定表中的行是否可为该列包含空值。空值 (或NULL)不同于零(0)、空白或长度为零的字符串(如 "")。NULL的意思是没有输入,出现NULL通常表示值未知或 未定义。
9.2 约束的定义与操作
9.2.2 操作约束
约束的操作主要包括增加、修改和删除约束,其方法通 常有两种,SQL 语句和SQL管理平台。下面介绍使用SQL管 理平台的方法。
| <table_constraint> } [ ,...n]
9.1 数据表的定义与操作
9.1.3 删除数据表
删除数据表可以采用命令和管理平台两种方式删除表。这 里主要介绍使用管理平台删除数据表。
在SQL Server 2005管理平台中,展开指定的数据库和数据 表,右击要删除的数据表,从弹出的快捷菜单中选择“删除” 命令,将打开“删除对象”窗口,单击“确定”按钮即删除数 据表。单击“关系依赖图”按钮,可显示所有该表依赖的对象 以及依赖该对象的对象,当有对象依赖该表时,想删除该表就 必须先删除依赖该表的其他表,否则该表不能被删除。
在SQL Server 2005管理平台中,展开指定的数据表和 数据库,右击要操作的数据表,从弹出的快捷菜单中选择 “修改”命令,打开修改数据表界面,在要修改约束的属性 上右击,从弹出的快捷菜单中选择合适的约束命令,然后按 照创建各约束的步骤在对创建的约束进行增加、修改或删除 即可。
如何绘制逻辑图——逻辑的表达:数据逻辑(8)

如何绘制逻辑图——逻辑的表达:数据逻辑(8)编辑导语:我们在日常工作中经常会遇到各种各样的逻辑关系,逻辑可以让我们的工作提高效率;作者在前一篇介绍了逻辑中的“业务逻辑”表达方式,本篇文章作者继续介绍“数据逻辑”的表达方式,我们一起来看一下。
多数没有开发背景的需求工程师对数据面层的分析、设计是比较生疏的,面对比较复杂的数据关系时或多或少都有一些畏惧,不太愿意深究,尽量交给后续的程序员去处理。
这个做法是不对的,数据逻辑来源于业务逻辑,需求分析师能够向程序员说明数据逻辑关系,那么后者的工作效率会提升很多(否则、不熟悉业务的后者还要花费很多时间去研究业务逻辑);同时是否能够清楚地表达数据逻辑关系也说明了需求分析师具有的能力和水平。
一、数据逻辑的概念数据逻辑:表达的是数据层数据之间的逻辑关系,这个层的要素是数据。
为了理解数据逻辑,要先理解为什么存在着业务逻辑和数据逻辑二种不同的表达形式呢?这首先是因为两者存在于不同的层面上、且要素不同。
1. 业务逻辑表达的是以客户“活动、规则”等内容为要素的逻辑关系。
业务逻辑表达的是业务活动之间的关系,是以客户的业务知识、业务事理为基础的。
举例说明,图1是一个生产过程的业务架构图(流程图),我们对客户业务的理解首先是从业务架构图获得的,从图的表面上只看到业务活动之间的关系,如:活动“4.采购”完成后下一个活动是“5.物流”。
图1 生产流程图在表面上虽然直接看不到数据的存在,但是在两个活动之间的关联线中流动着如下的数据:采购物品名称、数量、单价、交付日期等。
2. 数据逻辑表达的是以“数据”为要素的逻辑关系。
数据逻辑是数据间的关系。
数据架构层在业务架构层的下面,图2是一个业务逻辑与数据逻辑关系的示意图。
从业务架构图上是不能直接看到数据逻辑的,数据是业务活动产生的结果(沉淀),数据逻辑的获取是依赖于业务逻辑的,但在数据获取后,数据间的引用关系要远多于业务活动间的关联关系,如图2所示。
【转】如何画关系代数的连接图(数据库关系代数中笛卡儿积、θ连接、等值连接、自然连接、外连接)

【转】如何画关系代数的连接图(数据库关系代数中笛卡⼉积、θ连接、等值连接、⾃然连接、外连接)
关系代数中的连接是⼀个重要⽽且容易混乱的知识点,我通过查阅很多资料总结了与连接有关的知识点,并发现了他们之间的关系。
本⽂通过理论知识先了解连接相关的重要名词意思,然后通过画图来理解画连接的思路以及他们之间的关系。
理论知识
定义:
⼀、笛卡⼉积
⼆、θ连接
(⼀)等值连接
(⼆)⾮等值连接
θ不为“=”的连接运算称为⾮等值连接。
三、⾃然连接
五、外连接
(⼀)左外连接(Left outer join/ left join)
如果只把左边关系R要舍弃的元组在⾃然连接的基础上保留就叫左外连接。
(⼆)右外连接(rightouter join/ right join)
如果只把右边关系S中要舍弃的元组在⾃然连接的基础上保留叫右外连接。
(三)全外连接(fullouter join/ full join)
左表和右表都不做限制,所有的记录都显⽰,两表不⾜的地⽅⽤null 填充。
画图
题⽬
⼀、笛卡⼉积
⼆、θ连接
(⼀)等值连接
(⼆)⾮等值连接
三、⾃然连接
五、外连接。
数据库基础知识

1.3 数据库系统模型
定义
•
数据库系统模型即数据模型,它是对现实世界数据特征的抽象。
用来描述数据、组织数据和对数据进行操作的。
• •
数据模型就是现实世界的模拟
数据模型是数据库系统的核心和基础。
1.3 数据库系统模型
两类数据模型
•
概念模型
概念模型也称为信息模型,它是按用户的观点对数据和信息
建模,主要用于数据库设计; • 逻辑模型和物理模型
www,
第一章 数据库基础知识
作者:王龙葛 QQ: 294706448
本章主要内容
1 2 3 4 5
1.1 数据库管理系统 1.2 数据库技术 1.3 数据库系统模式 1.4 关系数据库 1.5 网络数据库基础
数据库的地位
数据库的重要性
•随着计算机技术的蓬勃发展,在计算机的科学计算、过程控制和 数据处理三大主要应用领域中,数据处理已成为计算机应用的主 要方面; •数据库管理系统作为数据管理最有效的手段广泛应用于各行各业 中,成为存储、使用和管理信息资源的主要手段,是信息化运作 的基石。
1.3 数据库系统模型
信息世界中的几个术语
• 实体(Entity):客观存在并且可以相互区别的事物称为实体。实 体可以是具体的人、事、物,也可以是抽象的概念或联系。
• 属性(Attribute):实体所具有的某一特性称为属性,一个实体 可以由若干个属性来刻画。
• 码(Key):唯一标识实体的属性或属性集称为码。
外模式
外模式,是用户与 数据库系统的接口,是 数据库用户能够看见和 使用的局部数据的逻辑 结构和特征的描述,是
内模式
内模式也称为存
储模式,它是数据物 理结构和存储方式的 描述,是数据在数据 库内部的表示方式。 一个数据库只有一个 内模式。
数据库和表(一)_真题(含答案与解析)-交互

数据库和表(一)(总分200, 做题时间90分钟)一、选择题1.“字段大小”属性用来控制允许输入字段的最大字符数,以下______不属于常用的字段的大小。
SSS_SINGLE_SELA OLEB 整型C 长整型D 双精度型分值: 2答案:A2.Access中包含有______个数据库对象。
SSS_SINGLE_SELA 5B 6C 7D 8分值: 2答案:C3.创建交叉表查询必须对______字段进行分组(Group By)操作。
SSS_SINGLE_SELA 标题B 列表题C 行标题和列标题D 行标题、列标题和值分值: 2答案:C4.文本型字段最多可以存放______个字符。
SSS_SINGLE_SELA 250B 252C 254D 255分值: 25.Access字段名可包含的字符是______。
SSS_SINGLE_SELA “.”B “!”C 空格D “[]”分值: 2答案:C6.下列对主关键字段的叙述,错误的是______。
SSS_SINGLE_SELA 数据库中的每个表都必须有一个主关键字段B 主关键字段值是惟一的C 主关键字可以是一个字段,也可以是一组字段D 主关键字段中不许有重复值和空值分值: 2答案:A7.Access是______办公套件中的一个重要组成部分。
SSS_SINGLE_SELA OfficeB WordC ExcelD Lotus分值: 2答案:A8.Access中,______字段类型的长度由系统决定。
SSS_SINGLE_SELA 是/否B 文本C 货币D 备注分值: 2答案:A9.在数据据表的设计视图中,数据类型不包括______类型。
SSS_SINGLE_SELB 逻辑C 数字D 备注分值: 2答案:B10.以下不属于Microsoft Office 2000系列软件的是______。
SSS_SINGLE_SELA Access2000B Word2000C Excel2000D WPS2000分值: 2答案:D11.在Access数据库系统中,不能建立索引的数据类型是______。
数据结构ppt课件

数据结构的定义数据结构是计算机中存储、组织数据的方式,它定义了数据元素之间的逻辑关系以及如何在计算机中表示这些关系。
提高算法效率合适的数据结构可以显著提高算法的执行效率,降低时间复杂度和空间复杂度。
简化程序设计数据结构为程序设计提供了统一的抽象层,使得程序员可以更加专注于问题本身,而不是底层的数据表示和访问细节。
便于数据管理和维护良好的数据结构设计可以使得数据的管理和维护变得更加方便和高效。
数据结构的定义与重要性线性数据结构中的元素之间存在一对一的关系,如数组、链表、栈和队列等。
线性数据结构非线性数据结构中的元素之间存在一对多或多对多的关系,如树、图等。
非线性数据结构静态数据结构在程序运行期间不会发生改变,如数组、静态链表等。
静态数据结构动态数据结构在程序运行期间可以动态地添加或删除元素,如链表、动态数组等。
动态数据结构数据结构的分类01020304在计算机科学中,数据结构是算法设计和分析的基础,广泛应用于操作系统、编译原理、数据库等领域。
计算机科学在软件工程中,数据结构是软件设计和开发的重要组成部分,用于实现各种软件功能和性能优化。
软件工程在人工智能中,数据结构用于表示和处理各种复杂的数据和知识,如神经网络、决策树等。
人工智能在大数据处理中,数据结构用于高效地存储、管理和分析海量数据,如分布式文件系统、NoSQL 数据库等。
大数据处理数据结构的应用领域0102线性表是具有n个数据元素的有限序列创建、销毁、清空、判空、求长度、获取元素、修改元素、插入元素、删除元素等线性表的定义线性表的基本操作线性表的定义与基本操作03用一段地址连续的存储单元依次存储线性表的数据元素顺序存储结构的定义可以随机存取,即可以直接通过下标访问任意元素;存储密度高,每个节点只存储数据元素顺序存储结构的优点插入和删除操作需要移动大量元素;空间利用率不高,需要提前分配存储空间顺序存储结构的缺点链式存储结构的定义01用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的链式存储结构的优点02插入和删除操作不需要移动大量元素,只需要修改指针;空间利用率高,不需要提前分配存储空间链式存储结构的缺点03不能随机存取,只能通过从头节点开始遍历的方式访问元素;存储密度低,每个节点除了存储数据元素外,还需要存储指向下一个节点的指针0102定义栈(Stack)是一种特殊的线性数据结构,其操作只能在一端(称为栈顶)进行,遵循后进先出(LIFO)的原则。
数据流图(DFD)和数据字典(DD)

数据流名: 说明:简要介绍作用即它产生的原因和结果。 数据流来源:来自何方。 数据流去向(qùxiàng):去向(qùxiàng)何处。 数据流组成:数据结构。 每个数据量流通量:数据量、流通量。
数据流编号:F03-01
数据流名称:学籍变动申请 简述:学生提出的学籍变动申请
(sònɡ wǎnɡ)何处,是存在于数据流图的外围环境中的实体, 在实际问题中可能是人员、计算机外围设备或是传感装置。
处理过程(又称“加工”): 是以数据结构或数据内容作为处理的对象,其名字通常
是一个动词短语,简明扼要地表明要完成的是什么加工。
管理信息系统
贵州大学计算机学院(xuéyuàn) 蒋朝惠
订单拒绝
客户数据文件
客户 订单 接受订单
订单 销售报告 管理者 处理
管理信息系统
贵州大学计算机学院(xuéyuàn) 蒋朝惠
17
精品文档
订单处理系统的第一级
订单 客户
拒绝订单
1 检查 订单
接受订单 2 输入 订单
3
更新数 据文件
管理信息系统
销售报告
4
管理者
执行
(zhíxíng )销售分 析 贵州大学计算机学院(xuéyuàn) 蒋朝
顶层流图:仅包含一个加工,它代表被开发系统,用于表明 被开发系统的范围,以及(yǐjí)它和周围环境的数据交换关 系。
中间层流图:是对其上层父图的细化。
底层流图:又称:“原子加shítǐ)A DFD
示意图
实体A
最高级 过程(guòchéng)
12 3
最小的数据单元
数据(shùjù)元素
一组数据元素
数据结构(shùjù jié ɡòu)
数据库系统(四)---关系型数据库设计及E-R图

数据库系统(四)---关系型数据库设计及E-R图1、关系型数据库: 关系型数据库是⼀类采⽤关系模型作为逻辑数据模型的数据库系统,遵从数据库设计的基本步骤,包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库的运⾏和维护等阶段。
概念结构设计与逻辑结构设计是关系数据库整个设计过程的关键。
2、关系数据库设计过程与各级模式 在关系数据库设计的不同阶段,会形成数据库的各级模式。
1)需求分析阶段,综合各个⽤户的应⽤需求; 2)概念结构设计阶段,形成独⽴于机器特点、独⽴于各个关系数据库管理系统产品的概念模式; 3)逻辑结构设计阶段,将 E-R 图转换成具体的数据库产品⽀持的关系数据模型,形成数据库逻辑模式,然后根据⽤户处理的要求、安全性的考虑,在基本表的基础上再建⽴必要的视图,形成数据的外模式; 4)物理结构的设计阶段,根据关系数据库管理系统的特点和处理的需要,进⾏物理存储安排,建⽴索引,形成数据库内模式。
3、概念结构设计⽅法 关系数据库的概念结构设计通常采⽤⾃顶向下法,它通过两个步骤来完成概念设计,⾸先建⽴局部信息结构,然后将局部信息结构合成为全局信息结构并优化,使⽤ E-R 图作为概念模型的描述⼯具。
1)局部信息结构设计 局部信息结构设计:根据需求分析报告中标明的不同⽤户视图范围所建⽴的满⾜该范围内⽤户需求的信息结构,称为局部信息结构。
局部信息结构设计的步骤包括:确定局部范围;选择实体;选择实体关键字;确定实体间联系;确定实体的属性。
2)E-R 图的表⽰⽅法 概念结构设计就是将需求分析得到的⽤户需求抽象为信息结构的过程,通常使⽤ E-R 图来作为描述现实世界的建模⼯具。
E-R 图提供了表⽰信息世界中实体、属性和联系的⽅法。
1.实体型,⽤矩形表⽰,写明实体的名称; 2.属性,⽤椭圆形表⽰,并⽤⽆向边将其与其相应的实体连接起来。
3.联系,⽤菱形表⽰,写明联系的名称,⽤⽆向边分别与有关实体连接起来,同时在⽆向边旁标注联系的类型(1:1、1:N 或 M:N),如果⼀个联系具有属性,则这些属性也要⽤⽆向边与该联系连接起来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何定义数据库表之间的关系特别说明数据库的正规化是关系型数据库理论的基础。
随着数据库的正规化工作的完成,数据库中的各个数据表中的数据关系也就建立起来了。
在设计关系型数据库时,最主要的一部分工作是将数据元素如何分配到各个关系数据表中。
一旦完成了对这些数据元素的分类,对于数据的操作将依赖于这些数据表之间的关系,通过这些数据表之间的关系,就可以将这些数据通过某种有意义的方式联系在一起。
例如,如果你不知道哪个用户下了订单,那么单独的订单信息是没有任何用处的。
但是,你没有必要在同一个数据表中同时存储顾客和订单信息。
你可以在两个关系数据表中分别存储顾客信息和订单信息,然后使用两个数据表之间的关系,可以同时查看数据表中每个订单以及其相关的客户信息。
如果正规化的数据表是关系型数据库的基础的话,那么这些数据表之间的关系则是建立这些基础的基石。
出发点下面的数据将要用在本文的例子中,用他们来说明如何定义数据库表之间的关系。
通过Boyce-Codd Normal Form(BCNF)对数据进行正规化后,产生了七个关系表:Books: {Title*, ISBN, Price}Authors: {FirstName*, LastName*}ZIPCodes: {ZIPCode*}Categories: {Category*, Description}Publishers: {Publisher*}States: {State*}Cities: {City*}现在所需要做的工作就是说明如何在这些表之间建立关系。
关系类型在家中,你与其他的成员一起存在着许多关系。
例如,你和你的母亲是有关系的,你只有一位母亲,但是你母亲可能会有好几个孩子。
你和你的兄弟姐妹是有关系的——你可能有很多兄弟和姐妹,同样,他们也有很多兄弟和姐妹。
如果你已经结婚了,你和你的配偶都有一个配偶——这是相互的——但是一次只能有一个。
在数据表这一级,数据库关系和上面所描述现象中的联系非常相似。
有三种不同类型的关系:一对一:在这种关系中,关系表的每一边都只能存在一个记录。
每个数据表中的关键字在对应的关系表中只能存在一个记录或者没有对应的记录。
这种关系和一对配偶之间的关系非常相似——要么你已经结婚,你和你的配偶只能有一个配偶,要么你没有结婚没有配偶。
大多数的一对一的关系都是某种商业规则约束的结果,而不是按照数据的自然属性来得到的。
如果没有这些规则的约束,你通常可以把两个数据表合并进一个数据表,而且不会打破任何规范化的规则。
一对多:主键数据表中只能含有一个记录,而在其关系表中这条记录可以与一个或者多个记录相关,也可以没有记录与之相关。
这种关系类似于你和你的父母之间的关系。
你只有一位母亲,但是你母亲可以有几个孩子。
多对多:两个数据表里的每条记录都可以和另一个数据表里任意数量的记录(或者没有记录)相关。
例如,如果你有多个兄弟姐妹,这对你的兄弟姐妹也是一样(有多个兄弟姐妹),多对多这种关系需要引入第三个数据表,这种数据表称为联系表或者连接表,因为关系型系统不能直接实现这种关系。
建立关系在开始着手考虑建立关系表之间的关系之前,你可能需要对数据非常熟悉。
只有在熟悉数据之后,关联会比你刚开始的时候更明显。
你的数据库系统依赖于在两个数据表中找到的匹配值来建立关系。
如果在数据库系统中发现了一个匹配值,系统将从两个数据表中提取数据并创建一个虚拟的记录。
例如,你可能想要查看某个特定的作者所写的全部书籍,在本文中,系统将从“Books”和“Authors”这两个数据表中查找相关的匹配值。
需要注意的是,在大多数情况下,查询的结果是动态的,这意味着对这条虚拟记录所做的任何改动都将可能作用到底层的数据表上,这一点是非常重要的。
进行匹配的值都是主键和外键的值。
(关系模型不要求一个关系必须对应的使用一个主键来确定。
你可以使用数据表中的任何备选关键字来建立关系,但是使用主键是大家都已经接受的标准。
)主键(primary key)唯一的识别表中的每个记录。
而外键(foreign key)只是简单的将一个数据表中的主键存放在另外一个数据表中。
同样地,对于你来说也不需要做太多的工作——只是简单地将主键加到关系表中,并将其定义为外键。
唯一需要注意的是,外键字段的数据类型必须和主键的数据类型相同。
但是有些系统可以允许这条规则有一个例外,它允许在数字和自动编号(autonumbering)字段(例如在SQL服务器系统中访问Identity和AutoNumber)之间建立关系。
此外,外键的值可以是空(Null),尽管强烈建议在没有特别原因的情况下,不要让外键为空。
你有可能永远都不会有机会来使用需要这项功能的数据库。
现在回到我们的示例关系表,并开始输入合适的外键。
(请继续在纸上打草稿——在你的数据库系统中创建真正的数据表还为时过早。
要知道在纸上纠正错误要容易得多。
)要记住,你正在把主键的值添加到关系表里。
只要调用实体之间的关系就行了,而其他的就简单了:书籍和分类是有关系的。
书籍和出版社是有关系的。
书籍和作者是有关系的。
作者和邮政编码(ZIP)是有关系的。
邮政编码和城市是有关系的。
城市和州是有关系的。
这一步并不是一成不变的,你可能会发现在规范化的过程中加入外键会更容易一些。
在把字段移动到一个新的数据表时,你可能要把这个新数据表的主键添加到原来的数据表里,将其作为外键。
但是,在你继续规范化剩余数据的时候,外键常常会发生改变。
你会发现在所有这些数据表被全部规范化之后,一次添加所有的外键,这样效率会更高。
操作数据表现在让我们一次操作一个数据表,就从Books数据表开始,它在这个时候只有三个字段。
很明显,Authors、Categories和Publishers数据表的主键会被添加到Books里。
当你完成的时候,Books数据表就有了七个字段:BooksTitle (PK)ISBN (PK)PriceFirstNameFK (FK) Authors.FirstName many-to-manyLastNameFK (FK) stName many-to-manyCategoryFK (FK) Categories.Category many-to-manyPublisherFK (FK) Publishers.Publisher one-to-many要记住,Authors数据表里的主键是一个基于姓和名两个字段的复合关键字。
所以你必须要把这个两个字段都添加到Books数据表里。
要注意,外键字段名的结尾包含有FK这个后缀。
加入这个后缀有助于提高可读性和自我归档。
通过名称这种方式来区别外键会使得追踪它们更简单。
如果主键和外键的名称不同,这没有关系。
这里出现了三种关系:Books和Authors、Books和Categories,以及Books和Publishers。
这三种关系中所存在的两种问题可能没有那么明显:Books和Authors之间的关系:一本书可以有多个作者。
Books和Categories之间的关系:一本书可以被归入多个类。
这两者的关系是多对多的关系。
先前我告诉过你,数据表不能直接实现这样的关系,而需要第三个联系表来实现。
(Books和Publishers的关系是一对多的关系,就像现在所说的,这样是没有问题的。
)这两个新发现的多对多关系将需要一个联系表来包含来自每个数据表的主键,并将其作为外键。
新的联系表是:BooksAuthorsmmlinkTitleFK (FK) Books.Title one-to-manyISBNFK (FK) Books.ISBN one-to-manyFirstNameFK (FK) Authors.FirstName one-to-manyLastNameFK (FK) stName one-to-manyBooksCategoriesmmlinkTitleFK (FK) Books.Title one-to-manyISBNFK (FK) Books.ISBN one-to-manyCategoryFK (FK) Categories.Category one-to-many没有必要更改Categories、Authors或者Publishers数据表。
但是,你必须把FirstNameFK、LastNameFK和CategoryFK这三个外键从Books里移走:BooksTitle (PK)ISBN (PK)PricePublisherFK (FK) Publishers.Publisher one-to-many现在,让我们转到Authors数据表上来,它现在有两个字段。
每个作者都和ZIPCodes数据表中的邮政编码的值相关。
但是,每个邮政编码会和多个作者相关。
要实现这种一对多的关系,就要把ZIPCodes数据表中的主键添加进Authors数据表作为外键:AuthorsFirstName (PK)LastName (PK)ZIPCodeFK (FK) ZIPCodes.ZIPCode one-to-many至此,你已经准备好了处理剩下的地址部分了。
看到它们被分在不同的数据表里是很让人奇怪的,但是这是遵照BCNF正确规范化数据的结果。
每个邮政编码的值只会有一个对应的城市值和州值。
每个城市和州的值只会被输入进其对应的数据表里一次。
ZIPCodes和Cities数据表需要外键字段来实现这些关系:ZIPCodesZIPCode (PK)CityFK (FK) Cities.City one-to-manyCitiesCity (PK)StateFK (FK) States.State one-to-manyStatesState (PK)从一个到九个最后,你有了九个数据表:Books、Authors、Categories、Publishers、ZIPCodes、Cities、States、BooksAuthorsmmlink和BooksCategoriesmmlink。
图A是这个示例数据表的数据库最终的图形形式。
很难想像一个简单的数据表会被分成九个数据表。
图A最初的一个数据表现在需要九个数据表了由于这个示例数据库很简单,你可能会问这些关系有什么作用。
看起来仍在保存冗余的数据,只不过形式不同罢了——通过外键来实现。
这是因为我们的数据表现在只有很少几个字段。
试想一下有十几个字段的数据表,会是什么样的一个情形。
需要承认的是,你仍然需要把数据表的主键作为外键保存进关系表里,但是至多可能最多增加一到两个字段。
比较一下为这个数据表里的每一条记录都添加十几个条目的情形吧。
(。