第 6 节:设计和创建表间关系
在这一课,您将学习如何使用外键来设计和创建表间关系。
有关更多信息,请参阅 " 表是由外键关联的 " 第 12 页。
虽然每个表都包含有关单个主题的信息,但两个或更多个表可能会包含
相关的信息。例如,职员是部门的成员,或者销售订单是一组产品的销
售订单。数据库中的关系可能表现为表间的外键关系,也可能自身就成
为独立的表。您将在本章中看到这两种情况的示例。
通过在数据库中创建关系,可以编写用于管理表中数据的规则或惯例的
代码。当关系置入数据库结构后,将不存在对例外情况的规定。
表间关系分为以下几个类别。
• 一对一关系 一个实体中的每个项都对应于另一个实体中的零个
或一个实体。例如,在示例数据库中,一个 职员管理一个 部门。
没有地方可以输入另一个部门经理。重复该部门条目会涉及到重
复部门 ID,由于部门 ID 列是主键,所以这是不可能的。
通常,最好将处于一对一关系的项组合到一个表中。 department
表中有一个 manager 列,而不是有一个单独的表名为 manager。
有关应该单独存放项的情况,请参阅 "ASA SQL 用户指南 > 设计
数据库 "。
多对一关系 多对一关系成为表间的外键关系。在多对一关系中,
一个 实体中的主键成为多个 表中的新外键列。
例如,在您刚创建的数据库中,一个 客户可以下多份 订单,但
每份订单只能由一个客户发出。若要表示一对多关系, sales_order
表中需要一个外键列 (cust_id),它映射到 customer 表中的主键列
(id)。通常,为这两个列指定相同的名称将会方便一些。
sales_order 表的 cust_id 列中的每一个条目都必须与 customer 表的 id
列中的一个条目相匹配。 sales_order 表 (包含关系中的外键)称
作外表或引用表。 customer 表 (包含被引用的主键)称作主表或
被引用表。
多对多关系 多对多关系由一个中间表来表示,而且从该中间表
到每个相关实体存在外键关系。
例如,在示例数据库中,产品和销售订单之间存在多对多关系。
一个销售订单可能包含多种产品,而一种产品可能会出现在多个
销售订单上。
product
id
name
integer
char(15)
id
id = prod_id
sales_order_items
integer
id = id
id
sales_order
integer
description char(30)
line_id
smallint
size char(18)
prod_id integer
order_date date
color
quantity
char(6)
integer
quantity integer
ship_date date
region
char(7)
unit_price numeric(15,2)
在某些情况下,中间表 (sales_order_items) 包含附加的信息,如已订
购产品的件数以及它们的发货日期。在本例中,中间表不包含任
何附加信息。
添加用于使数据库中的表相关联的外键。
添加以下外键:
• sales_order_items 中 id 列的外键,引用 sales_order 中的 id 列。该键
将销售订单和销售订单项之间的多对一关系置入数据库。
• sales_order_items 中的 prod_id 列的外键,它引用 product 中的 id 列。
该键将销售订单项和产品之间的多对一关系置入数据库。
• sales_order 中的 cust_id 列的外键,它引用 customer 中的 id 列。该键
将销售订单和客户之间的多对一关系置入数据库。
前两个外键一起将销售订单和产品之间的多对多关系置入数据库。
❖ 创建外键:
1 单击要为其创建外键的表。
2 打开 " 外键 " 文件夹。
3 双击 " 添加外键 " 以打开 " 新建外键 " 向导。
4 遵循向导中的指导操作。
至此,您就学完了有关设计和建立关系数据库的入门章节。本书的其余
章节将介绍如何在数据库中添加数据和从数据库中检索数据。这些章节
将使用 Adaptive Server Anywhere 示例数据库,该数据库比您刚创建的
数据库大一些。 (责任编辑:卢兆林)