数据库表关联

合集下载

MySQL中的触发器和存储过程的区别与用途

MySQL中的触发器和存储过程的区别与用途

MySQL中的触发器和存储过程的区别与用途MySQL是一种常用的关系型数据库管理系统,广泛应用于各种互联网应用中。

在MySQL中,触发器(Trigger)和存储过程(Stored Procedure)是两种常见的编程方式,用于实现数据库操作的自动化和业务逻辑的封装。

本文将探讨MySQL中的触发器和存储过程的区别和用途。

一、触发器触发器是MySQL中一种特殊的数据库对象,它和数据库表关联,并在表中的指定事件发生时自动执行特定的操作。

触发器是基于事件驱动的,它可以在数据插入、更新或删除时触发执行相应的操作。

1. 触发器的创建在MySQL中,创建触发器需要使用CREATE TRIGGER语句,并指定触发时机、触发事件、触发操作和触发操作所执行的SQL语句。

例如,我们可以创建一个在数据插入前触发的触发器如下所示:```CREATE TRIGGER before_insert_triggerBEFORE INSERT ON table_nameFOR EACH ROWBEGIN-- 触发操作所执行的SQL语句...END;```2. 触发器的用途触发器可以用于各种场景,例如数据自动更新、数据约束、数据一致性等。

下面以一个实例来说明触发器的用途。

假设我们有一个订单表和一个库存表,每当有订单数据插入时,我们希望自动更新库存表中对应商品的库存数量。

这时,就可以使用触发器实现该功能。

```CREATE TRIGGER update_inventoryAFTER INSERT ON ordersFOR EACH ROWBEGINUPDATE inventorySET quantity = quantity - NEW.amountWHERE product_id = NEW.product_id;END;```在上述示例中,我们创建了一个名为update_inventory的触发器,它在订单表插入数据后触发,然后执行更新库存表的操作。

VF实验二关联、查询和数据库

VF实验二关联、查询和数据库

实验二关联、查询和数据库实验2-1 多表关联与查询实验目的:〔1〕理解关联的概念,掌握在数据工作期窗口中建立关联的方法。

〔2〕掌握SELECT-SQL查询命令。

〔3〕掌握用查询设计器建立查询的方法。

实验要求:〔1〕在数据工作期窗口上建立以“订单〞为父表,“订单明细〞为子表的一多关系;再建立以“订单明细〞为父表,“货物〞为子表的多一关系的二级关联。

然后查看关联后的效果。

〔2〕用SELECT-SQL命令对上述5个表作多表查询练习。

①查询联系“东南实业〞公司的员工**及联系。

②查询订购麻油的订单份数。

〔3〕用查询设计器查询公司订货情况。

实验步骤:〔1〕为“关联〞建立索引:为订单表的订单号字段建立索引,再为货物表的货号字段建立索引。

1)翻开“订单明细表〞在命令窗口里输入命令:INDE* ON 订单号 TAG ddh,执行命令就为该表建立了索引,翻开表生成器查看如下:图中显示了索引,默认是升序的。

2〕同样的方法,翻开“订单明细表〞在命令窗口里输入命令:INDE* ON 货号 TAG hh,执行命令就为该表建立了索引,〔2〕建立关联:过程方法:1〕翻开数据工作期窗口→分别用“翻开〞按钮翻开订单表、订单明细表和货物表→在“别名〞列表框中选定“订单〞,单击“关系〞按钮→在“别名〞列表框中选定“订单明细〞→随即弹出“设置南索引顺序〞对话框,其列表框中显示“订单明细.订单号〞。

选定“确定〞按钮→随即弹出“表达式生成器〞对话框,其SET RELATION框中显示“订单号〞。

选定“确定〞按钮,多一关系建立完成→选定“一对多〞按钮→在随即弹出的“创立一对多关系〞对话框中→选定“确定〞按钮,一多关系建立完成。

显示的表达式生成器如下:2)在“别名〞列表框中选定“订单明细〞→为确定以订单明细表为父表建立下一级关联,在“关系〞列表框中也选定“订单明细〞→单击“关系〞按钮→在“别名〞列表框中选定“货物〞→在随即弹出的“设置索引顺序〞对话框中选定“确定〞按钮→在“表达式生成器〞对话中选定“确定〞按钮,多一关系建立完成,如图下列图所示:〔3〕查看关联效果:分别“订单〞、“订单明细〞和“货物〞浏览窗口,并按左中右顺序排列→选定“订单〞表的*个记录,“订单明细〞和“货物〞浏览窗口的内容即会关联变化,如下列图所示。

数据库表描述

数据库表描述

数据库表描述全文共四篇示例,供读者参考第一篇示例:数据库表是数据库系统中的基本组成单元,用来存储特定类型的数据。

它由行和列组成,行代表数据记录,列代表数据属性。

在数据库设计中,表的结构和字段类型需要经过精心设计,以确保数据的存储和检索效率。

本文将探讨数据库表的描述和设计方法。

一、数据库表的描述1. 表名:数据库表需要有一个唯一的名称来区分不同的表。

表名应该简洁明了,能够清晰地表达表所存储的数据类型。

一般来说,表名采用复数形式,并使用下划线或驼峰命名规则。

2. 字段(列):数据库表由多个字段组成,每个字段代表数据的一个属性。

字段的命名应该具有描述性,能够清晰地表达该字段存储的数据内容。

常见的字段类型包括整型、字符型、日期型等。

3. 数据类型:字段的数据类型决定了字段可以存储的数据范围和格式。

常见的数据类型包括整型(INT)、字符型(VARCHAR)、日期型(DATE)等。

选择合适的数据类型可以提高数据库的存储效率和数据完整性。

4. 主键:主键是表中用来唯一标识每条记录的字段,通常是一个或多个字段的组合。

主键的值必须唯一且不能为空,可以通过主键索引来加快数据检索速度。

主键的选择应该遵循唯一性和稳定性原则。

5. 外键:外键是表与表之间建立关联关系的依据。

外键是指在一个表中存在的另一个表的主键,用来确保数据的一致性和完整性。

外键约束可以在数据库设计时设置,以确保引用表的数据不会出现错误或不一致。

6. 索引:索引是一种提高数据检索效率的数据结构,可以加速查询操作。

在数据库表中设置适当的索引可以减少搜索时间,并提高数据库的性能。

常见的索引类型包括主键索引、唯一索引、组合索引等。

7. 约束:约束是用来确保数据完整性和一致性的规则。

常见的约束包括主键约束、唯一约束、外键约束、默认值约束等。

在设计数据库表时,应该根据业务需求和数据关系来设置适当的约束。

二、数据库表的设计方法1. 标识表的对象:在设计数据库表时,首先需要确定要存储的数据对象和关系,然后根据需求来设计表的结构和字段。

数据库表的结构

数据库表的结构

数据库表的结构1. 概述数据库表是关系型数据库中数据存储的基本单位,它是由若干行和列组成的二维数据结构。

在设计数据库时,合理的表结构设计是至关重要的,它直接影响到数据库的性能、可维护性和扩展性。

本文将详细探讨数据库表的结构,包括表的组成、命名规范、字段设计以及常见的表关系类型。

2. 表的组成数据库表由若干列(字段)和若干行(记录)组成,每一列都具有唯一的列名和数据类型。

每一行代表一个实体或记录,它由各个字段的值组成。

表中的每一列可以存储不同类型的数据,比如整数、字符、日期等。

3. 命名规范为了提高数据库的可读性和可维护性,表的命名应该遵循一定的规范。

以下是一些常见的命名规范:•表名应该具有描述性,能够清楚地反映出表的含义。

•表名应该使用小写字母,并使用下划线分隔单词(例如:employee_info)。

•表名应该是名词或名词短语的复数形式(例如:employees)。

•列名也应该使用小写字母,并使用下划线分隔单词(例如:first_name)。

•列名应该具有描述性,能够清楚地反映出列的含义。

4. 字段设计表的每一列都是一个字段,字段的设计直接影响到数据库的性能和数据的完整性。

以下是一些字段设计的注意事项:•每个字段应该具有明确的数据类型,这样可以有效地节省存储空间,并提高查询效率。

•字段的长度应该与实际数据的长度相匹配,避免过长或过短的字段长度。

•字段应该具有适当的约束,比如唯一约束、非空约束等,以确保数据的完整性。

•字段应该具有描述性的名称,能够清楚地反映出字段的含义。

5. 表关系类型在数据库设计中,表与表之间可以存在不同的关系类型,包括一对一关系、一对多关系和多对多关系。

以下是对每种关系类型的介绍:5.1 一对一关系一对一关系指的是两个表之间存在唯一的关联,这种关系通常可以通过在一方表中添加外键来实现。

一对一关系常用于将某些属性独立出来,形成单独的表。

5.2 一对多关系一对多关系指的是一个表的一条记录对应另一个表中的多条记录。

用户数据库表设计

用户数据库表设计

用户数据库表设计全文共四篇示例,供读者参考第一篇示例:用户数据库表设计是数据库设计中的一个关键部分,它负责存储和管理用户的信息,包括用户的基本信息、登录信息、权限信息等。

一个良好的用户数据库表设计能够有效地支持系统的用户管理功能,提升系统的安全性和性能。

在设计用户数据库表时,需要考虑以下几个方面:1. 用户基本信息表:这是用户数据库表的核心部分,包括用户的基本信息,如用户名、密码、邮箱、电话号码等。

在设计用户基本信息表时,需要确保数据的准确性和安全性,可以使用加密技术对用户密码进行加密存储,保护用户的隐私信息。

2. 用户权限表:用户权限表用于存储用户的权限信息,包括用户的角色、权限等。

通过用户权限表,系统可以方便地对用户的权限进行管理,设置不同用户的权限级别,确保系统的安全性和稳定性。

3. 用户登录日志表:用户登录日志表用于记录用户的登录信息,包括用户的登录时间、登录IP地址等。

通过用户登录日志表,系统可以追踪用户的登录行为,及时发现异常登录行为,保护系统的安全性。

5. 用户关联表:用户关联表用于建立用户与其他数据表之间的关联关系,如用户与角色之间的关联关系。

通过用户关联表,系统可以方便地查询用户的相关信息,确保系统的数据一致性和完整性。

在设计用户数据库表时,需要遵循一些设计原则,如数据规范化、数据安全性、数据一致性等。

需要根据实际业务需求和系统性能要求,灵活地设计用户数据库表结构,确保系统的高效性和可扩展性。

第二篇示例:用户数据库表设计是在一个系统中管理用户信息的重要部分。

一个用户数据库表设计需要考虑到用户的基本信息、安全性需求、权限管理和数据一致性等方面。

在一个系统中,用户数据库表设计的合理性将直接影响到用户信息的管理和系统的运行效率。

在进行用户数据库表设计时,首先需要确定用户表的基本结构,包括用户ID、用户名、密码、邮件地址、电话号码等基本信息。

这些信息将用于用户的身份认证和基本信息管理。

orm的基本映射方式

orm的基本映射方式

orm的基本映射方式ORM的基本映射方式ORM(对象关系映射)是一种将对象模型与数据库模型进行映射的技术,它可以将数据库中的表映射成对象,从而简化了开发人员对数据库的操作。

在ORM中,有几种基本的映射方式,包括:表映射、列映射、关联映射和继承映射。

1. 表映射表映射是ORM中最基本的映射方式之一。

它将数据库中的表映射成对象,使开发人员可以直接通过操作对象来进行数据库的增删改查操作。

在表映射中,每个表对应一个对象,表的每个字段对应对象的一个属性。

通过表映射,开发人员可以方便地进行数据库操作,无需编写复杂的SQL语句。

2. 列映射列映射是指将数据库表中的列映射成对象的属性。

在列映射中,每个表的列对应对象的一个属性。

通过列映射,开发人员可以方便地将数据库中的数据存储到对象中,或者将对象中的数据保存到数据库中。

3. 关联映射关联映射是指将数据库表之间的关联关系映射成对象之间的关联关系。

在关联映射中,通过定义对象之间的关联属性,可以实现数据库表之间的关系。

例如,一个订单对象可以关联多个商品对象,通过关联映射,可以方便地进行订单与商品之间的操作。

4. 继承映射继承映射是指将数据库表之间的继承关系映射成对象之间的继承关系。

在继承映射中,通过定义对象之间的继承关系,可以实现数据库表之间的继承关系。

例如,一个员工对象可以继承自一个人员对象,通过继承映射,可以方便地进行员工与人员之间的操作。

以上是ORM中的基本映射方式,通过这些映射方式,开发人员可以方便地进行数据库操作,提高开发效率和代码质量。

同时,ORM还提供了一些高级的映射方式,如多对多关联映射、一对多关联映射等,可以更加灵活地处理复杂的数据库关系。

需要注意的是,在使用ORM进行开发时,开发人员需要根据具体的业务需求来选择合适的映射方式,并进行合理的设计和调优。

同时,由于ORM是一种抽象和封装的技术,它并不是适用于所有的场景,对于一些对性能要求较高的场景,可能需要使用原生的SQL语句来进行操作。

数据库系统及应用(第六版)第4章数据库及表的操作

数据库系统及应用(第六版)第4章数据库及表的操作

4.2 数据表操作
4.2.1 表的基本操作
1 表的打开、关闭和浏览
(1)菜单方式
4.2 数据表操作
4.2.1 表的基本操作
1 表的打开、关闭和浏览
(1)菜单方式
4.2 数据表操作
4.2.1 表的基本操作
1 表的打开、关闭和浏览
(2)“数据工作期”方式
4.2 数据表操作
4.2.1 表的基本操作
4.1 数据库操作
4.1.3 创建数据库表
4
修改表结构
(2)打开数据库修改数据表 如果数据库已经打开,则可以使用“数据库设计器”修改当前数据 库内所有的数据表。方法是首先在“数据库设计器”内单击选中某个数 据库表,然后执行【数据库】|【修改】菜单命令。或者右击数据库表 打开快捷菜单,执行【修改】菜单命令。还可以单击“数据库设计器” 工具栏内的“修改表”工具按钮。上述三种操作的目的都是为了打开 “表设计器”。
删除触发器:用于指定一个规则,每当用户对表中的记录进行删 除时触发该规则并进行相应的检查。如果表达式值为“假”,则记录 将不能被删除。
4.1 数据库操作
4.1.3 创建数据库表
4
修改表结构
(1)直接修改数据表 执行【文件】|【打开】菜单命令,打开表文件,然后执行【显示】| 【表设计器】菜单命令。使用这种方式可以在不打开数据库的情况下直接 修改数据库中的表,它等同于使用了以下两条命令: USE<表名> MODIFY STRUCTURE
4.1 数据库操作
4.1.4 添加和移去数据表
1 向数据库中添加表
当一个数据库被打开后,用户可以单击“数据库设计器”工具栏的 【添加表】按钮,或者执行【数据库】|【添加表(A)】菜单命令,显示 “打开”对话框,选择被添加的数据表,然后单击【确定】按钮,将该 表添加到数据库内。用户也可以使用命令方式向当前数据库添加数据表。

三级分销数据库表设计

三级分销数据库表设计

三级分销数据库表设计摘要:一、三级分销数据库表设计概述二、三级分销数据库表结构解析1.会员表1.1 字段设计1.2 关系设计2.商品表2.1 字段设计2.2 关系设计三、三级分销业务流程与数据库表关联四、优化数据库表设计1.遵循第三范式2.考虑查询、删除、更新习惯五、总结正文:一、三级分销数据库表设计概述三级分销数据库表设计是构建一个稳定、高效的数据库系统的基础。

它涉及到对会员、商品、订单等核心业务实体的建模,以便于支持业务的正常运行。

在本文中,我们将详细解析三级分销数据库表的设计过程,以指导实际开发工作。

二、三级分销数据库表结构解析1.会员表1.1 字段设计会员表主要包括以下字段:- memberid:会员ID,Long类型,主键,唯一标识每个会员- membername:会员姓名,Nvarchar(20)类型- membersex:会员性别,Tinyint类型- memberphone:会员电话,Long(11)类型- memberemail:会员邮箱,Nvarchar(20)类型- memberaddress:会员地址,Nvarchar(255)类型1.2 关系设计会员表与商品表、订单表存在关联关系。

通过会员ID(memberid)与订单表的会员ID(memberid)外键关联,表示一个会员可以有多个订单。

同时,会员表与商品表通过订单表关联,表示一个会员可以购买多个商品。

2.商品表2.1 字段设计商品表主要包括以下字段:- commodityid:商品ID,Long类型,主键,唯一标识每个商品- commodityname:商品名称,Nvarchar(20)类型- commodityprice:商品价格,Decimal(10, 2)类型- commoditystock:商品库存,Int类型2.2 关系设计商品表与订单表存在关联关系。

通过商品ID(commodityid)与订单表的商品ID(commodityid)外键关联,表示一个商品可以被多个订单关联。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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) Authors.LastName 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) Authors.LastName one-to-many

BooksCategoriesmmlinkTitleFK (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-many CitiesCity (PK)StateFK (FK) States.State one-to-many StatesState (PK) 从一个到九个最后,你有了九个数据表:Books、Authors、 Categories、Publishers、ZIPCodes、Cities、States、BooksAuthorsmmlink和 BooksCategoriesmmlink。图A是这个示例数据表的数据库最终的图形形式。很难想像一个简单的数据表会被分成九个数据表。

A最初的一个数据表现在需要九个数据表了

由于这个示例数据库很简单,你可能会问这些关系有什么作用。看起来仍在保存冗余 的数据,只不过形式不同罢了——通过外键来实现。这是因为我们的数据表现在只有很少几个字段。试想一下有十几个字段的数据表,会是什么样的一个情形。需要 承认的是,你仍然需要把数据表的主键作为外键保存进关系表里,但是至多可能最多增加一到两个字段。比较一下为这个数据表里的每一条记录都添加十几个条目的 情形吧。(

相关文档
最新文档