全面掌握MS ACCESS SQL(18)
时 间:2018-01-08 16:42:44
作 者:Big Young ID:252 城市:襄阳
摘 要: 三种表关联关系的理解与实践。
正 文:
第四节 三种表关联关系的理解与实践
前面说过,MS ACCESS支持三种表间关系:一对一、一对多和多对多三种关系。现在我们来分别讨论一下这三种表间关系的具体要求下实现,先从一对一关系说起。
一、创建一对一表间关系
对于数据库中的一对一的关系,在ACCESS数据库中可以可以通过主键和外键的关联来实现,这又可以分成两种情况一对一单向关联关系和一对一双向关联关系。一对一单向关联关系比较简单,前面已说明的例子就是这样关系,这里重点举例说明一对一双向关联关系。
1、一对一双向关联关系
对于两个表或多个表,如果分别从不同的侧面描述同一个对像的多种属性,即表间的关系是平等的,这里两表间为了实现统一管理可以创建双向的一对一关联关系。我们下面以一个具体的例子来说明,例如我们要管理居民的相关信息,有时为了安全或方便的原因,通常会把相关的信息存放在不同的表中,我们可以用一个名为“居民”的表,保存“编号”、“姓名”、“性别”、“身份证号”、“联系电话”等信息,面用另一个表“身份证”来保存与身份证相关的信息,如“身份证号”、“发证机关”、“住址”、“出生日期”、“证件生效日期”、“证件失效日期”、“证件照片”、“居民编号”等信息,我们可以看出这些都是关于一个居民的相关信息,为了实现数据完整性及统一管理,我们需要在它们之间创建一对一的双向关联关系。
我们先创建“居民”表,SQL语句如下:
Create TABLE 居民
(
编号 COUNTER,
姓名 VARCHAR(8),
性别 TEXT(1),
身份证号 TEXT(18) UNIQUE,
联系电话 TEXT(11),
CONSTRAINT 主键_编号 PRIMARY KEY (编号)
);
然后,我们再来创建“身份证”表,并同时引用表“居民”的“编号”字段创建表间的关联:
Create TABLE 身份证
(
身份证号 TEXT(18),
发证机关 TEXT(50),
住址 TEXT(50),
出生日期 DATETIME,
证件生效日期 DATE,
证件失效日期 DATE,
证件照片 IMAGE,
居民编号 INTEGER,
CONSTRAINT 主键_身份证号 PRIMARY KEY (身份证号),
CONSTRAINT 外键_居民编号 FOREIGN KEY (居民编号)
REFERENCES 居民 (编号)
ON Update CASCADE
ON Delete CASCADE
);
接下来我们再来修改“居民”表的属性使它同时引用“身份证”表,实现两表的双向关联:
Alter TABLE 居民
ADD CONSTRAINT 外键_身份证号 FOREIGN KEY (身份证号)
REFERENCES 身份证 (身份证号)
ON Update CASCADE
ON Delete CASCADE;
最后我们用下列的sql查询查验,确实创建了双向关联关系:
Select *
FROM MSysRelationships
Where left(szObject,4) <> "MSys";
2、一对一单向关联关系
这种关系比较简单,如果两个表只在B表中引用A表中相关列就实现了两表的相互单向关联关系,也就是双向关联的一半就实现了,这里就不再赘述了。
实际上一对一的关系的多张表其实可以合成一张表,分开再关联其实只在特殊需要的情况下都会出现。
二、创建一对多表间关系
一对多关系是最常见的关系类型,是指表A中的行可以在表B中有许多匹配行,但是表B中的行只能在表A中有一个匹配行。
如果在相关列中只有一列是主键或具有唯一约束,则创建的是一对多关系。例如,“学生”表用于存储学生的基础信息,这里定义为主表;“课程”表用于存储课程的基础信息,一个学生可以学多门课程,这里定义为从表。与此相似的一对多关系还有国家和地区关系:一个国家中有多个地区,而一个地区只能属于一个国家,这就是国家和地区的一对多关系。类似的还有员工和部门的关系,一个员工只属于一个部门,面一个部门对应许多员工。
一对多关系的创建与一对一关系的创建是一样的,都是通过“主键”与“外键”的关联创建的,例子就不再多举了,它的应用在讲到选择查询时再说明。
三、多对多关联关系创建
多对多关系是关系数据库中两个表之间的一种关系, 该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。第二个表中的一个行也可以与第一个表中的一个或多个行相关。
比如在常见的订单管理数据库当中“产品”表和“订单”表之间的关系。单个订单中可以包含多个产品。另一方面,一个产品可能出现在多个订单中。因此,对于“订单”表中的每条记录,都可能与“产品”表中的多条记录对应。此外,对于“产品”表中的每条记录,都可以与“订单”表中的多条记录对应。这种关系称为多对多关系,因为对于任何产品,都可以有多个订单,而对于任何订单,都可以包含许多产品。请注意,为了检测到表之间的现有多对多关系,务必考虑关系的双方。
要表示多对多关系,您必须创建第三个表,该表通常称为联接表,它将多对多关系划分为两个一对多关系。将这两个表的主键都插入到第三个表中。因此,第三个表记录关系的每个匹配项或实例。例如,“订单”表和“产品”表有一种多对多的关系,这种关系是通过与“订单明细”表建立两个一对多关系来定义的。一个订单可以有多个产品,每个产品可以出现在多个订单中。
现实中多对多关系也很多,如零件和仓库的关系,一种零件可以存放在多个仓库中,而同时一个仓库也可以存放多种零件。还有司机和车辆的关系,一个车队中有很多司机,也有很多车辆,这有一个车辆驾驶记录:一个司机可能一天当中驾驶两辆以上不同的车辆,当然,每一辆车一天当中也可能被两个以上的司机驾驶,这样就应该明白司机和车辆之间的多对多关系了吧?
与一对多的关系一样,其关系创建也是通过“主键”与“外键”的关联来实现的。
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)