新手来看:如何设计数据库结构 本文为开发人员提供了一些技巧,使用这些技巧可以在设计 Access 表时避免某些问题。本文适用于 Microsoft Access 数据库 (.mdb) 和 Microsoft Access 项目 (.adp)。 oTj$sLS0 Office中国社区门户5Ay3p6p\d%?简介Office中国社区门户oAkP+cqX%k_!h Office中国社区门户&r&F3mz$oM[^在设计数据库时,最重要的步骤是要确保数据正确分布到数据库的表中。使用正确的数据结构,可以极大地简化应用程序的其他内容(查询、窗体、报表、代码等)。正确进行表设计的正式名称是“数据库规范化”。Office中国社区门户PO'~w] .fE"e9{3a1PY.G0 本文简要介绍数据库规范化的基本概念和一些需要注意并力求避免的常见问题。Office中国社区门户sy,| XX+Ud)| ;_{b O4h?-Q;]0 理解您的数据 Office中国社区门户;R6iUE8~'t0L#W)\t .vM]}1B4fl;ft.q0 您需要什么样的数据? 知道需要什么样的数据后,就必须确定数据的来源。数据是否从其他数据源中导入?数据是否需要清理或验证?用户是否需要输入数据?Office中国社区门户9YXRI.} wZ(Lir \'f)o0 明确所需数据的类型和来源是数据库设计的第一步。 M~A4Kjw0 Office中国社区门户Jc U@bx$wW 您打算如何处理这些数据? Office中国社区门户+WEjR7xw-M K-B ,a8pU"xk8?0 数据之间如何相互关联? Office中国社区门户 uy+DGC S'i c } 0cNf#XO0 随着时间的推移数据会发生什么样的变化? #j'FBD1rzu2Y#N \Xr0 学习如何使用查询 Office中国社区门户@2`\\4l7L+F;b 好的数据设计的最终目标就是要平衡两个需要:既要随着时间的推移有效地存储数据,又要轻松地检索和分析数据。理解查询的功能对正确设计表很有帮助。Office中国社区门户~^Vw2Fd:X:T Office中国社区门户0r:Sts$q9sn数据库规范化概念 将唯一信息存储在一个地方 %E!vc3vyrE|-M0 例如,客户表会存储每个客户的记录,包括姓名、地址、电话号码、电子邮件地址以及其他特征信息。客户表中可能包含唯一的 CustomerID 字段(通常是 Autonumber 字段),这个字段即该表的主键字段,其他表使用它来引用该客户。因此,发票表可以只引用客户的 ID 值,而不是在每张发票中存储客户的所有信息(因为同一个客户可能会持有多张发票),这样利用客户的 ID 值即可从客户表中查找客户的详细信息。使用 Access 中功能强大的窗体(使用组合框和子窗体),可以轻松地完成这项工作。如果需要修改客户信息(例如新增电话号码),只需在客户表中修改,应用程序中引用该信息的任何其他部分都会随之自动更新。Office中国社区门户 ? ^1o$M ?^%t Office中国社区门户 @'G ELMO/z*s H使用正确规范化的数据库,通过简单的编辑即可轻松处理数据随时间推移而发生的更改。使用未正确规范化的数据库,通常需要利用编程或查询来更改多条记录或多个表。这不仅会增加工作量,还会增加由于未正确执行代码或查询而导致数据不一致的可能性。Office中国社区门户@ on'BU8J+f5] Office中国社区门户1~?0c5m1PYl@&q ? 记录是免费的,而新字段非常昂贵 4u9Pa)Jvl0 电子表格专家经常会遇到上述问题,因为他们习惯于按照设计电子表格的方式设计数据库。设计经常随时间变化的字段(例如,年、季度、产品和销售人员)需要在将来添加新字段。而正确的设计应该是转换信息并将随时间变化的数据放在一个字段内,这样就可以添加更多记录。例如,只需创建“年”字段,然后在该字段中输入各记录相应的年份值即可,无需为每年创建一个单独的字段。 :WD*@k2q6C^{q2~x0 Office中国社区门户X/sa7o?增加额外的字段可能会产生问题,因为表结构的变化会对应用程序的其他部分产生影响。在表中添加更多字段时,依赖该表的对象和代码也需要更新。例如,查询需要获取额外的字段,窗体需要显示这些字段,而报表则需要包含这些字段,等等。但是,如果数据已经规范化,则现有对象会自动检索新数据,并正确计算或显示这些数据。查询功能尤其强大,因为它允许您按“年”字段进行分组,以逐年显示摘要(不管表中包含哪些年份)。Office中国社区门户GbQw,]+O)b#oJo X&@/~Jc S0H!Z kt0 但是,数据规范化并不意味着不能显示或使用随时间而变化或依赖时间的字段。需要浏览或显示这类信息的开发人员通常可以使用交叉表查询来达到这一目的。如果您不熟悉交叉表查询,应该学习如何使用它们。虽然它们与表有所不同(尤其是用户无法编辑交叉表查询的结果),但它们的确可以用于在数据表中显示信息(最多可以达到 255 个字段)。如果要在报表中使用它们,则会更加复杂,因为报表需要包含额外的或不断变化的字段名。这就是为什么大多数报表将数据作为独立的分组(而不是独立的列)显示的原因。对于那些别无选择的情况,您必须花时间去解决这个问题。希望所有人都能够理解这种决定会随着时间的变化对其他资源产生的影响。Office中国社区门户%B;yA#Y3f2H? Office中国社区门户UH]2Ge]这就是为什么增加记录是免费的(这是数据库的巨大优势)而增加字段是如此昂贵的原因。如果数据库设计正确,则可以适应各种各样的变化。Office中国社区门户]'?b0Jvm*m}5_ Office中国社区门户|1IgqBO 了解何时需要复制数据 Office中国社区门户-wCq)^p h w-H Fo!`0 在通过客户 ID 号将发票链接到客户表的简单示例中,我们可能需要保留开出发票时的客户地址(而不是制作发票时的地址,因为客户信息在这两个事件之间可能会有所变化)。如果开出发票时未保留客户地址,而将来又必须更新客户信息,则可能无法确定发送某些发票的确切地址。这可能会导致非常严重的商业问题。当然,有些信息(如客户的电话号码)可以不保存。因此,应该有选择地决定需要复制哪些数据。 "Y o$H L'A)@0 Office中国社区门户K*e O#T6q需要复制数据的另一个例子是填写发票的明细项。报价单通常用于挑选客户订购的商品。我们可以只存储报价单 ID,而 ID 指向包含产品说明、价格和其他详细信息的报价单。但是,产品说明和价格会随着时间而改变。如果不将数据从报价单复制到明细表中,将来则无法准确地重新打印原始发票。如果您尚未收到付款,问题将非常严重。 !R"C6^?!MYBy+X _0 Office中国社区门户 E u2}mv8t因此,虽然规范化可以将相同的数据很好地保存在一个地方并能简化编辑工作,但某些情况下却不需要这些优势。如果以后由于历史原因需要数据的快照,则必须从一开始就在数据库中设计好。否则,一旦数据被覆盖就无法再找回。Office中国社区门户^;c/cM0xv,| ;LGhmb&|){0 使用没有确切含义的字段作为主键字段 Office中国社区门户&xf._ }s `2`:ND2d0 一般来说,主键字段应具有如下特征: Office中国社区门户:YJ#Oj F (m.Q5t"pBY0应该只包含一个字段 使用引用完整性 Office中国社区门户#X['Gz s:Q&{%F 例如,如果发票表与订单表相关联,其中的一张发票可能有无限多个订单(明细项),并且每个订单记录包含它所链接的发票编号,则可以使用级联删除操作来删除发票记录,并自动删除所有相应的订单记录。这样可以避免出现没有相应发票记录的订单记录。Office中国社区门户&R2n_/vK Office中国社区门户 z0T"AM8qE%~5B 小结 |
|