ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2369|回复: 5

[讨论] 阅读《Pro Access 2010 Development》随手翻

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-8-5 20:40 | 显示全部楼层 |阅读模式
本帖最后由 myadmin 于 2012-8-5 20:43 编辑

书名  Pro Access 2010 Development
作者  Mark Collins

近日购得,日读数页,随手翻译;不揣浅陋,水平有限,难谈原创,故本帖主题分类曰:讨论。
繁言不叙,从第2章始。
------------------------------------------------------------------------------------------------

2 定义和关联表
设计一数据库应用程序之逻辑起点是:定义将要存储数据的表。表方案是基础,其必须支持整个应用程序,所以设计好表是不可避免的。因为Access使得建立一应用程序如此简单,所以会很轻易地跳过这重要的一步,但不要这样做。
本章,将介绍一些确保一良好数据模型的基本原则。这些技术普遍适用于大多数数据库引擎。将覆盖的内容包括:数据库规范化、定义主键和外键,以及使用约束以确保参照完整性。
将引导完成创建一组此应用程序之基本表的过程。一步步展示如何设计这些表,以及如何使用Access 2010的诸多数据建模功能。到本章结束之时,就有了建立此应用程序其余部分的一坚实结构。

2.1 探究设计实践
在开始此工程具体设计之前,先介绍在任何数据库设计中都应遵循的一些基本原则。

2.1.1 使用主键
尽管非Access所必需,但是,强烈建议为每一表定义一主键。主键唯一定义了表中的一单一记录。当在表之间定义关系之时,就需要主键,关联表是定义一关系型数据库的一关键部分。

2种设计主键的普遍方法。第1种方法是创建一单一代理之键字段。通常,此字段与此表有相同之名称,并附加一“ID”。例如,订单项目表之主键即为订单项目ID”自动编号字段类型适用于此方法。当插入一条记录之时,数据库引擎将分配下一编号给此字段。这就保证了键之唯一性。

2种方法是从父表继承键,在表之层次结构中为每一层添加一额外字段。例如,订单表的主键是订单ID”订单项目表主键就是订单ID”订单项目ID”字段之组合。在此情况之下,订单项目ID”只在特定订单中才是唯一的。从设计者角度看,此做法清楚表明了,订单项目表和订单表具有一聚合关系。但在实践中,这是较难实现的,因为它要求应用程序生成键值。在此情况下定义外键关系也较棘手,因为需要多个字段。使用这种设计,有些表可能最终有三个或更多主键字段。

对于本书中之工程,将使用第1种方法,赋予每一表一单一主键字段。相信这是比较普遍的做法,尤其是在Microsoft平台中,例如Access 和SQL Server。这也将简化此工程的实现。

2.1.2 规范化数据库
一设计良好的数据库将会有一定程度的规范化。规范化基本上是删除冗余信息的过程。有一系列称为范式的定义,为确定规范化提供了标准的规则。这些范式是逐层更为规范化的。例如,第一范式(1NF)要求,在一表之中没有重复列,并且每一表都具有一主键(一主键可由多列所组成)。
注:此处关于1NF之定义,值得商榷。个人认为,Access帮助文件中之INF定义较为准确。

第二范式(2NF)要求,每一非键字段依赖于整个键,而非仅依赖于其一部分。例如,在之前所描述的订单项目表中,其键是订单ID”订单项目ID”的一组合,每一非键字段必须依赖于这两个键字段。例如客户订单日期字段仅依赖于订单ID”,而不依赖于订单项目ID”

第三范式(3NF)进一步要求,在一表中之每一列仅依赖于主键。例如,假定有一客户订单表,其包含客户的姓名和地址。客户的姓名和地址是客户之属性,而非订单属性。要满足3NF,应移除这些列,将其放置于一独立客户表中。于是,订单表中将仅包含一外键字段,此为客户表之主键。


考虑此规则的另一角度是,若一客户有多个订单,那么其姓名和地址将会在每一订单中重复。减少这种数据重复是规范化之目标。违反3NF的另一常见示例是,包括了一可基于其他列计算所得的列。例如,表中同时包含了出生日期年龄就违反了3NF,因为年龄可基于出生日期计算得出。


定义这些范式的目标在于,帮助识别存在冗余数据的地方。由于以下三个主要原因,应消除这种冗余性:
1. 冗余数据导致更为庞大的数据库。
2. 冗余数据更难以维护。
3. 冗余数据更易产生错误。

存储成本相对较低,所以,除非使用的是一相当庞大的数据库,否则,由冗余数据所占用的空间可能并非是一个大问题。不过,维护问题可能相当严重。例如,思考订单表,它包含了客户姓名和地址。假定客户迁移,就将必须更新每一订单记录来存储其新地址。另外,对于每一新订单,都需输入其姓名和地址,而非简单地在客户表中查阅之。除了增加数据输入的负担,还更有可能有人会输入不正确的信息。若需要输入“Mark Collins”50次,将可能至少有一次输错了,最终输入了“Markl” “Marl”


建议初始数据库设计至少应从3NF开始着手。同时也应意识到,为了处理的效率,有时需要一定程度的反规范化。可能选择违反3NF,例如,除了出生日期字段,还添加一年龄字段。不过,只在必要之时,才添加这些列。若需要反规范化,建议使用数据宏(第3章中讲述)来填充它们。这会降低反规范化的负面影响。但绝不应违反2NF。取而代之,可使用一查询来创建一或多个表的反规范化视图,将在第4章中阐述之。

TA的精华主题

TA的得分主题

发表于 2012-8-5 20:48 | 显示全部楼层
不错不错!                     

TA的精华主题

TA的得分主题

发表于 2012-8-9 00:03 | 显示全部楼层
请问楼主在哪里购得,How much?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-13 18:45 | 显示全部楼层
zhangjimfu 发表于 2012-8-9 00:03
请问楼主在哪里购得,How much?

托在国外朋友购。约45刀,有点贵。
淘宝上应该有卖的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-13 18:47 | 显示全部楼层
最近EH较难打开。
发帖文本编辑有点麻烦,以后译文发word或PDF。

TA的精华主题

TA的得分主题

发表于 2012-9-1 18:20 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-12 20:37 , Processed in 0.031315 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表