数据库定义表之间关系(带图)
数据库设计中的关系模型与实体关系图

数据库设计中的关系模型与实体关系图关系模型和实体关系图在数据库设计中起着核心的作用。
在数据库设计的早期阶段,开发人员使用关系模型和实体关系图来表示数据实体之间的关系和依赖。
这样做有助于更清晰地理解和表达实体之间的关系,并为数据库的实际实现提供了指导。
关系模型是数据库设计中最常用的模型之一。
它基于关系代数理论,用来表示表和表之间的关系。
关系模型具有以下特点:每个关系模型由表(也称为关系)组成,每个关系都由一组属性(字段)组成,这些属性具有相同的数据类型。
关系模型使用主键来唯一地标识每个元组(行),并使用外键来定义表之间的关联关系。
在进行数据库设计时,使用实体关系图可视化地表示关系模型中的实体,属性和关系之间的联系。
实体关系图由实体类型、属性和关系类型组成。
实体类型是具有独立意义的实体,可以是现实世界中的对象或概念。
属性是实体类型的特性或特征,用于描述实体类型的属性。
关系类型定义了不同实体类型之间的联系和依赖。
关系模型和实体关系图的设计具体步骤如下:1. 确定实体类型:首先,识别需求中的实体类型。
对于每个实体类型,确定其属性和相互之间的关系。
2. 定义属性:为每个实体类型确定属性集合。
属性应该描述实体类型的特征和性质,并具有相应的数据类型。
3. 标识主键和外键:在关系模型中,每个关系都必须有一个主键,用于唯一地标识元组。
声明主键时应选择稳定的属性或属性组合,以确保唯一性。
外键用于定义关系之间的联系,它引用其他关系表中的主键。
4. 确定关系:根据实体类型之间的联系确定关系。
常见的关系类型包括一对一、一对多和多对多。
可以使用关系模型的外键和实体关系图中的连接符号来表示这些关系。
5. 优化设计:通过规范化设计来优化数据库模型。
规范化是消除冗余数据和保持数据一致性的过程。
常用的规范化形式包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
6. 创建实体关系图:使用数据库设计工具创建实体关系图。
实体关系图应准确地表示实体类型之间的联系,并按照规范化设计的原则进行布局。
图数据库

AllegroGrap是一个基于W3c标准的为资源描述框架构建的图形数据库。它为处理链接数据和Web语义而设计, 支持SPARQL、RDFS++和Prolog。
GraphDB是德国sones公司在.NET基础上构建的。Sones公司于2007年成立,近年来陆续进行了几轮融资。 GraphDB社区版遵循AGPL v3许可协议,企业版是商业化的。GraphDB托管在Windows Azure平台上。
图模型
图模型主要包含属性图、RDF图两种。
属性图
属性图模型由顶点、边及其属性构成。顶点和边都可以带有属性,节点可以通过“标签(Label)”进行分 组。表示关系的边总是从一个开始点指向一个结束点,而且边是一定是有方向的,这使得图成为了有向图。关系 上的属性可以为节点的关系提供额外的元数据和语义。
不同图数据库的底层存储机制可能存在很大不同。根据存储和处理模型的不同,图数据库之间也会做一些区 分。比如,一些图数据库使用原生图存储,这类存储是经过优化的,专门为了存储和管理图数据而设计的。这类 数据库一般称为原生图数据库,例如如Galaxybase,Neo4j,tigergraph。有些图数据库依赖关系引擎将图数据 存储在关系型数据库的表中,通过在数据实际所在的底层存储系统之上增加一个具备图语义的抽象层来进行数据 交互。也有使用键值型存储方式或文档型存储方式作为底层存储的图数据库。这些类型图数据库统称为非原生图 数据库,比如ArrangoDB, OrientDB, JanusGraph等。原生图存储相比非原生更具有性能优势。原生图数据库底 层存储不依赖第三方存储系统,计算和存储一体化,极大的简化了系统架构。开发人员和运维人员可以更业务水 平的提升,避免花费大量时间在底层存储的管理和运维。同时,原生图数据库不需要和第三方技术黑盒进行沟通, 少了这部分的通讯开销,系统的性能也更高
数据库原理与应用第九章

理平台,这里介绍使用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管理平台中,展开指定的数据表和 数据库,右击要操作的数据表,从弹出的快捷菜单中选择 “修改”命令,打开修改数据表界面,在要修改约束的属性 上右击,从弹出的快捷菜单中选择合适的约束命令,然后按 照创建各约束的步骤在对创建的约束进行增加、修改或删除 即可。
列举access2016中定义的12种数据模型

列举access2016中定义的12种数据模型Access 2016是一款功能强大的关系型数据库管理工具,它提供了多种数据模型来帮助用户有效地管理和组织数据。
本文将列举并介绍Access 2016中定义的12种数据模型。
1. 平面表平面表是Access中最基本的数据模型。
它由若干列和行组成,每列对应一个属性,每行对应一个记录。
平面表可以用来存储和管理结构简单的数据。
2. 查询查询模型可以用来检索和获取数据,它允许用户通过特定的条件和关联关系来获取指定的数据子集。
查询模型在数据分析和报表生成中非常重要。
3. 带子表的表格带子表的表格是一种将两个表格通过关联关系连接起来的数据模型。
它适用于一对多的关联关系,例如一个顾客可以拥有多个订单。
4. 表格之间的关系Access支持多种不同类型的表格之间的关系,例如一对一关系、一对多关系和多对多关系。
通过定义和维护表格之间的关系,可以更好地组织和管理数据。
5. 分割数据库分割数据库是一种将数据库分成前端和后端两个部分的数据模型。
前端包含用户界面和查询,而后端包含表格和数据。
这种模型可以提高多用户环境下的性能和可维护性。
6. 联接查询联接查询可以将多个表格的数据连接起来,以便进行更复杂的数据操作和分析。
它可以根据共同的字段将相关的数据合并在一起,并生成新的数据集。
7. 报表报表模型可以根据特定的数据源生成各种形式的报表,例如表格、图表和交叉表。
通过设计和自定义报表,用户可以直观地查看和分析数据。
8. 表单表单模型用于创建数据输入和展示界面,以便用户可以方便地添加、修改和查看数据。
表单可以根据用户需求进行自定义设计,并与其他数据模型进行关联。
9. 索引索引是一种用于提高数据库查询性能的数据模型。
通过创建索引,可以快速定位和访问特定的记录,减少查询时间和资源消耗。
10. 完整性约束完整性约束是一种保证数据的一致性和准确性的数据模型。
它可以定义和实施特定的规则和约束条件,以防止无效或不一致的数据被插入或修改。
如何绘制逻辑图——逻辑的表达:数据逻辑(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):唯一标识实体的属性或属性集称为码。
外模式
外模式,是用户与 数据库系统的接口,是 数据库用户能够看见和 使用的局部数据的逻辑 结构和特征的描述,是
内模式
内模式也称为存
储模式,它是数据物 理结构和存储方式的 描述,是数据在数据 库内部的表示方式。 一个数据库只有一个 内模式。
数据结构ppt课件

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