热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Access开发中建表的基本原理和规范(上)

点击上方蓝色字关注我们~\x0a\x0aAccess是一个基于数据库的开发设计工具,用它甚至可以开发

点击上方蓝色字关注我们~



Access是一个基于数据库的开发设计工具,用它甚至可以开发出一整套的基于数据库的应用管理软件,所以使用时就必须遵循一定的开发设计流程,不像和它同属MicrosoftOffice办公系统软件的其它组件如WordExcel等,可随时随意的打开新文件及输入数据,而必须进行一定的设计才能使用。

而表是Access中其它对象的根源,所有其它对象的设计开发都围绕表中的数据而进行,所以表的设计至关重要。

当开发进行到一定程度的时候,如果要对表的设计做出改动,和其相关的所有内容都需要同样进行修改,耗时耗力,甚至需要完全重新设计,由此可见初期正确建表的重要性

本文针对刚接触Access的初学者,讲述了一些建表的基本原理和规范,让大家少走一些弯路,尽量避免由于初期建表不正确造成的效率不高、后续开发困难,甚至因此造成需要全部推倒重来。

在实际应用中,尤其是刚接触Access的朋友,如果之前没有数据库的相关理论知识的话,就会感到很茫然,不知如何下手。最可能的情况就是凭感觉随意建表,结果造成完全达不到想要的结果或者效率不高,乃至后继的开发无以为继,甚至需要全部推倒重来。

建议大家找一些关系数据库理论方面的书看看,因为Access就是一个关系数据库。在这里由于篇幅所限,只能简单的说一下在Access中建表的一些基本原理规范及要点。

先声明一下两个名词的含义:表是列和行组成的,在Access中列被称为字段,行被称为记录(大部分关系数据库也都是这么叫的)。请记住这两个名词,以后会频繁的用到

构造数据库必须遵循一定的原理规则,而Access是一个关系数据库系统,所以使用Access就要遵循关系数据库的原理规则:范式(NormalForm)。

目前按照国际标准,一共有6种范式,除第一范式外,其它范式都是在满足前一范式的基础上而定义的,也就是说,符合第三范式的必定符合第二范式,符合第二范式的必定符合第一范式,以此类推。不过一般来说我们只要规范化到第三范式就足够了,其它范式不常用到,这里就不做解释和讨论了。

第一范式(1NF):数据库表中的字段都是单一属性,不可再分。

第一范式是最低的规范化要求,第一范式要求数据表不能存在重复的记录,即存在一个无重复主索引(主键)。第一范式的第二个要求是每个字段都不可再分,即已经分到最小,关系数据库的定义就决定了数据库满足这一条。主键不一定是某一个字段,也可以是多个字段的组合,不过一般都是设为一个字段,这样在使用时相对简单。主键要求它基于的字段不允许重复、不允许有空值。

满足第一范式的关系模式有许多不必要的重复值,并且在添加、修改、删除记录时可能会导致异常。为了避免数据冗余和消除异常,就引出了第二范式(2NF)。 

第二范式(2NF):在第一范式的基础上,其它所有的字段都完全地依赖于主键字段。

为了说明问题现举一个例子来说明:有一个库房存储的库有四个字段(零件号码,仓库号码,零件数量,仓库地址),这个库符合第一范式,其中“零件号”和“仓库号”构成主关键字。但是因为“仓库地址”只完全依赖于“仓库号码”,即只依赖于主关键字的一部分,所以它不符合第二范式。

这样首先存在数据冗余,因为仓库数量可能不多。其次,存在如果更改仓库地址时,如果漏改了某一记录,存在数据不一致性。再次,如果某个仓库的零件出完了,那么这个仓库地址就丢失了,即这种关系不允许存在某个仓库中不放零件的情况。

我们可以用投影分解的方法消除部分依赖的情况,而使关系达到第二范式的标准。方法是从关系中分解出新的表,是每个表中所有的非关键字都完全依赖于各自的主关键字。我们可以分解成两个表(零件号码,仓库号码,零件数量)和(仓库号码,仓库地址),这样就完全符合第二范式了。

第三范式(3NF):如果一个关系属于第二范式,且其它字段不传递依赖于主键,则它满足第三范式。

从第二范式中消除传递依赖,就是第三范式。比如有一个表(姓名,工资等级,工资额),其中姓名是关键字, 此关系符合第二范式,但是因为工资等级决定工资额,这就叫传递依赖,它不符合第三范式,我们同样可以使用投影分解的办法分解成两个表:(姓名,工资等级),(工资等级,工资额)。 

以上就是关系数据库的最基本的三范式规则,只有从理论上理解了,才会更容易在实际应用中理出头绪。后面我们会再用一篇文章说一些要点和技巧。



爱我,请给我好看





推荐阅读
  • 我们有(据我所知)星型模式SQL数据库中的数据文件。该数据库有5个不同的文件,扩展名为 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • 本文介绍了使用SRILM平滑Katz回退方法训练语言模型的步骤,包括测试文件的使用、模型训练过程以及困惑度的重新计算。平滑Katz回退方法通过将次数较少的N-gram组的概率减少,并将减少的概率分配给训练集中未出现的N-gram组。详细的条件概率计算过程可参考附录中的Excel表格。通过重新计算困惑度,可以评估训练得到的语言模型的质量。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • MATLAB函数重名问题解决方法及数据导入导出操作详解
    本文介绍了解决MATLAB函数重名的方法,并详细讲解了数据导入和导出的操作。包括使用菜单导入数据、在工作区直接新建变量、粘贴数据到.m文件或.txt文件并用load命令调用、使用save命令导出数据等方法。同时还介绍了使用dlmread函数调用数据的方法。通过本文的内容,读者可以更好地处理MATLAB中的函数重名问题,并掌握数据导入导出的各种操作。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
author-avatar
轩楼妈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有