以文本方式查看主题 - 易表在线答疑 (http://www.egrid2000.com/dvbbs/index.asp) -- 用户社区 (http://www.egrid2000.com/dvbbs/list.asp?boardid=2) ---- [分享]易表设计表的基本知识 (http://www.egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=19280) |
-- 作者:smileboy -- 发布时间:2006/8/13 8:15:00 -- [分享]易表设计表的基本知识 作者:YLM 很多朋友设计易表表格时,是延用传统印刷表格或Excel方法,其实这是一个比较不好习惯,设计表格时还是要按数据库规律来设计的。 先看看下面表格,是传统考勤表格式样,俺在论坛上还真看到过有人用易表设计成这样的(只是举个例子,并不针对那一位,如有得罪,请多多包涵,在下先道一声对不起.) 这种表格的优点是看起来简单直观,记考勤方便,是手工记录时常用格式。 但如改成易表来操作,就发现明显的问题了: 1、每月必须重新设计一张表或另存后清空数据。 2、汇总统计公式复杂,而且由于列标题很长,写公式时也容易出错。 3、查找与全年汇总更是难办。 5、员工不能有同名的,否则不好区分。 ...... 比较正规的做法: 也许你看一眼就会说:切!这样做,录入时不是很烦,每一天就要新增一行累不累. 其实,易表是介子电子表格与数据库之间的软件,因此,如你单单想用易表的电子表格功能,用Excel方法来操作易表也完全可以,但如你是当一个编好的程序来给其他人用,那么,熟悉一下数据库的规范还是必要的: 下面转贴一篇关于Access数据库设计规范的文章,供设计易表时借鉴: (注意,在某些场合,列可能会被称为字段,行可能会被称为记录。) 数据库规范化简介 在设计数据库时,最重要的步骤是要确保数据正确分布到数据库的表中。使用正确的数据结构,可以极大地简化应用程序的其他内容(查询、窗体、报表、代码等)。正确进行表设计的正式名称是“数据库规范化”。 本文简要介绍数据库规范化的基本概念和一些需要注意并力求避免的常见问题。 理解您的数据 在设计表之前,应明确您打算如何处理数据,还要了解随着时间的推移数据会发生什么样的变化。您所做的假设将会影响最终的设计。 您需要什么样的数据? 设计应用程序时,关键要了解设计的最终结果,以便确保您准备好所有必需的数据并知道其来源。例如,报表的外观、每个数据的来源以及所需的所有数据是否都存在。对项目损失最大的莫过于在项目后期发现重要报表缺少数据。 知道需要什么样的数据后,就必须确定数据的来源。数据是否从其他数据源中导入?数据是否需要清理或验证?用户是否需要输入数据? 明确所需数据的类型和来源是数据库设计的第一步。 您打算如何处理这些数据? 用户是否需要编辑这些数据?如果需要,应如何显示数据以便于用户理解和编辑?有没有验证规则和相关的查找表?要求对编辑和删除保留备份的数据输入有没有相关联的审核问题?需要为用户显示哪些摘要信息?是否需要生成导出文件?了解这些信息后,就可以想象字段之间是如何相互关联的了。 数据之间如何相互关联? 将数据分组放入相关字段(例如与客户相关的信息、与发票相关的信息等),每个字段组都代表要建立的表。然后考虑如何将这些表相互关联。例如,哪些表具有一对多关系(例如,一个客户可能持有多张发票)?哪些表具有一对一关系(这种情况下,通常会考虑将其组合到一个表中)? 随着时间的推移数据会发生什么样的变化? 设计表之后,常常会由于没有考虑时间的影响而导致以后出现严重问题。许多表设计在当时使用时效果非常好,但是,常常会因为用户修改数据、添加数据以及随时间的推移而崩溃。开发人员经常会发现需要重新设计表的结构来适应这些变化。表的结构发生变化时,所有相关的内容(查询、窗体、报表、代码等)也必须随之更新。理解并预测数据会随时间推移发生哪些变化,可以实现更好的设计,减少问题的发生。 学习如何使用查询 了解如何分析和管理数据同样很重要。您应该深刻理解查询的工作原理,理解如何使用查询在多个表之间链接数据,如何使用查询对数据进行分组和汇总,以及如何在不需要以规范化格式显示数据时使用交叉表查询。 好的数据设计的最终目标就是要平衡两个需要:既要随着时间的推移有效地存储数据,又要轻松地检索和分析数据。理解查询的功能对正确设计表很有帮助。 数据库规范化概念 这部分介绍数据库规范化所涉及的基本概念,而不是对数据库规范化进行理论性的探讨。如何在您的实际情况中应用这些概念可能会随着应用程序需要的不同而有所变化。这部分的目的是理解这些基本概念、根据实际需要应用它们,并理解偏离这些概念将会出现哪些问题。 将唯一信息存储在一个地方 大部分数据库开发人员都理解数据库规范化的基本概念。理想情况下,您希望将相同的数据存储在同一个地方,并在需要引用时使用 ID 来进行引用。因此,如果某些信息发生了变化,则可以在一个地方进行更改,而整个程序中的相应信息也会随之更改。 例如,客户表会存储每个客户的记录,包括姓名、地址、电话号码、电子邮件地址以及其他特征信息。客户表中可能包含唯一的 CustomerID 字段(通常是 Autonumber 字段),这个字段即该表的主键字段,其他表使用它来引用该客户。因此,发票表可以只引用客户的 ID 值,而不是在每张发票中存储客户的所有信息(因为同一个客户可能会持有多张发票),这样利用客户的 ID 值即可从客户表中查找客户的详细信息。使用 Access 中功能强大的窗体(使用组合框和子窗体),可以轻松地完成这项工作。如果需要修改客户信息(例如新增电话号码),只需在客户表中修改,应用程序中引用该信息的任何其他部分都会随之自动更新。 使用正确规范化的数据库,通过简单的编辑即可轻松处理数据随时间推移而发生的更改。使用未正确规范化的数据库,通常需要利用编程或查询来更改多条记录或多个表。这不仅会增加工作量,还会增加由于未正确执行代码或查询而导致数据不一致的可能性。 记录是免费的,而新字段非常昂贵 理想的数据库应该只需要随着时间的推移添加新的记录,数据库表应该能够保存大量记录。但是,如果您发现需要增加更多字段,则可能会碰到设计问题。 电子表格专家经常会遇到上述问题,因为他们习惯于按照设计电子表格的方式设计数据库。设计经常随时间变化的字段(例如,年、季度、产品和销售人员)需要在将来添加新字段。而正确的设计应该是转换信息并将随时间变化的数据放在一个字段内,这样就可以添加更多记录。例如,只需创建“年”字段,然后在该字段中输入各记录相应的年份值即可,无需为每年创建一个单独的字段。 增加额外的字段可能会产生问题,因为表结构的变化会对应用程序的其他部分产生影响。在表中添加更多字段时,依赖该表的对象和代码也需要更新。例如,查询需要获取额外的字段,窗体需要显示这些字段,而报表则需要包含这些字段,等等。但是,如果数据已经规范化,则现有对象会自动检索新数据,并正确计算或显示这些数据。查询功能尤其强大,因为它允许您按“年”字段进行分组,以逐年显示摘要(不管表中包含哪些年份)。 但是,数据规范化并不意味着不能显示或使用随时间而变化或依赖时间的字段。需要浏览或显示这类信息的开发人员通常可以使用交叉表查询来达到这一目的。如果您不熟悉交叉表查询,应该学习如何使用它们。虽然它们与表有所不同(尤其是用户无法编辑交叉表查询的结果),但它们的确可以用于在数据表中显示信息(最多可以达到 255 个字段)。如果要在报表中使用它们,则会更加复杂,因为报表需要包含额外的或不断变化的字段名。这就是为什么大多数报表将数据作为独立的分组(而不是独立的列)显示的原因。对于那些别无选择的情况,您必须花时间去解决这个问题。希望所有人都能够理解这种决 |
-- 作者:行走的帆 -- 发布时间:2006/8/14 13:50:00 -- SmileBoy 说的很专业,也很重要!这个问题要在设计程序的时候时时提醒自己,按正确的科学的,有效的方法来!一步步达到自己的目的! 一句话:有一个有序的,条理的,科学的思路很重要! |
-- 作者:smileboy -- 发布时间:2006/8/15 18:15:00 -- 下面引用由行走的帆在 2006/08/14 01:50pm 发表的内容: SmileBoy 说的很专业,也很重要!这个问题要在设计程序的时候时时提醒自己,按正确的科学的,有效的方法来!一步步达到自己的目的! 一句话:有一个有序的,条理的,科学的思路很重要! 这是YLM版主的大作 |
-- 作者:350439742 -- 发布时间:2006/8/30 10:01:00 -- 受益了,谢谢, |
-- 作者:wanjunqing -- 发布时间:2006/8/30 22:05:00 -- 好的,顶一下! |
-- 作者:wzgs -- 发布时间:2006/9/16 11:06:00 -- 受益了,谢谢, |
-- 作者:wlyb -- 发布时间:2006/9/17 10:14:00 -- 受益非浅啊 |
-- 作者:xzd168 -- 发布时间:2006/10/9 22:51:00 -- 受益了,谢谢 |
-- 作者:gdxhq -- 发布时间:2006/10/14 22:50:00 -- 大行家,受益。 |
-- 作者:xuzhou -- 发布时间:2006/10/25 23:46:00 -- 收藏,学习,努力再努力 |