数据库应用实例,数据库规范化三个范式应用实例
大家好,今天小编来为大家解答以下的问题,关于数据库应用实例,数据库规范化三个范式应用实例这个很多人还不知道,现在让我们一起来看看吧!
VFP数据库触发技术的应用实例
表跟踪问题的提出:
在管理信息系统的正常运行中,信息的安全性问题日益突出。虽然网络为我们提供了一定的数据安全性,只有授权的用户才能对数据进行日常的维护,但有时用户的误操作可能导致数据的丢失或混乱;另外,有时我们需要对数据的改动留下记载等。对重要的数据文件,记录每一个数据变化的审核日志,对其建立其相应的日志表来跟踪对它的增、删和修改操作是十分必要的。日志表中记载了何时、何用户进行了何种操作,记载了被用户增加或删除的记录信息,以及被修改记录的原来信息和修改后的信息,将被操纵过的记录进行备份。
VFP触发技术:
Visual Foxpro与它的前期版本重大差别之一是使用了数据库(Database)这一强大功能,使之成为一个真正的DataBase。VFP的Database Container包含了表(Table)及表的各种属性定义,也包含了属于后端的SQL中的触发技术(Trigger)。
Trigger的使用为Database中的Table提供了一个记录级规则(即检测程序)。Trigger分为Insert Trigger、Update Trigger和Delete Trigger三种操作。Insert Trigger用于Table新增记录时所触发的检测程序,Update Trigger用于Table修改记录回存时所触发的检测程序,Delete Trigger用于Table中记录被删时所触发的检测程序。VFP允许对任一种操作设定不同的规则,该规则可以是表达式或用户自定义函数(UFD),若响应为真值时,表示触发成功,若响应为假值时,表示触发失败。用户自定义函数(UFD)存储在Database Container中。
创建触发器有两种方式:
1)打开表属性”对话框,在 INSERT、UPDATE或 DELETE触发器框中,输入触发器表达式或用户自定义函数(UFD);
2)使用 CREATE TRIGGER命令。
创建、修改或移去存储过程有三种方式:
1)在项目管理器中,选择并展开一个数据库,选定“存储过程”,然后选择“新建”、“修改”或“移去”按钮;
2)在数据库设计器中,从“数据库”菜单中选择“我存储过程”按钮;
3)在COMMAND命令窗口中,使用 MODIFY PROCEDURE命令。
表跟踪设计:
利用Insert Trigger、Update Trigger和Delete Trigger三种操作原理,我们可以构造备份被操纵记录的用户自定义函数,并将其加入需要进行表跟踪的数据文件Trigger中,以实现表跟踪。这样,不论用户使用程序进行对此表的操纵或直接打开此表进行增删和修改记录,都能激发Trigger将被操纵记录进行日志记载。
本人构造了四个通用的自定义函数,Inslog()、Dellog()、Modlog()和addlog(),存放于Database Container的存储过程中。在需要进行表跟踪的数据文件的Insert Trigger、Delete Trigger和Update Trigger中分别加入Inslog()函数、Dellog()函数和Modlog()函数,以使对数据文件中记录的增、删和修改均激发Trigger进行日志记载。addlog()用于建立被跟踪表的日志表结构,日志表的结构设计包含了被跟踪表的所有字段信息,并且增加了用户标志opid、操作日期时间optime和操作标志opmak字段。日志表的命名规则为被跟踪表的表名前加‘L’,以示区分,另外本人在存放数据文件目录下另设子目录LOGDBFS,专用于存放日志表以便管理。
数据库规范化三个范式应用实例
规范化为什么重要?目前很多的数据库由于种种原因还没有被规范化。本文中解释了其中一些原因,并用不同形式的范式(normal form)规范化了一个保险公司的理赔表。在这个过程中表的改变以及添加的一些附加表使数据库效率更高、错误更少、更容易维护。
数据库的规范化是优化表的结构和把数据组织到表中的实践,这样做数据才能更明确。规范化使你能够改变业务规则、需求和数据而不需要重新构造整个系统。
通过改变存储数据的方式--仅仅改变一丁点--并改变访问这些信息的程序,你就可以消除很多错误或垃圾数据出现的机会并减轻更新信息所必要的工作量。
公司现实存在的一个问题可以用一句话概括"我们一般都这样做"。我们一般像采用那种方式存储信息;我们一般允许人们把任何信息写入;我们一般采用那种方式编程。这通常是一件坏事,特别是对于年轻的和正在学习的公司来说。但是,当有新的系统和更好的完成任务的途径的时候,有时"采用那种方式任务完成得很好"这句话可能需要重新探讨和修改。规范化数据就是公司常常采用的有益的方式之一。
尽管对于COBOL程序(例如任何COBOL程序员都熟悉的文件布局)使用数据来说,把它们(数据)存储在关系数据库中与存储在平面文件中很相似,但是存储在平面文件中的方法并不是完成任务的必要的的途径,特别是由于你不了解两者之间的差别或害怕改变,而简单地把过去的观念带入到现在的方式。
注意:Dictionary.com是这样定义规范化的:"使其标准,特别使导致它符合某种标准或规范。"或"某种标准的强制接受"。Webopedia认为规范化是"在关系数据库设计中,组织数据以最小化冗余的过程。规范化通常包括把一个数据库分成两个或多个表并定义表之间的关系。其目标是隔离数据,这样添加、删除和修改某个字段只需要在一个表中进行,接着可以通过定义的关系传递到数据库中剩余的表中"。我更喜欢这个定义。
术语
在你了解现实世界中的一个保险公司的例子之前,你需要了解一些在讨论中会用到的术语。处理数据库的时候,特别是在处理规范化问题的时候,下面一部分讲到的一组新的关键字很有作用:
·关系(Relation):从本质上说,关系是一个包含行和列的二维表或数组。
·关联(Relationship):关联是不同表之间的数据彼此联系的方法。关联同时存在于形成不同实体的数据项之间和表实体本身之间,构成了数据库规范化的基本核心问题。数据关联有三种基本的类型,对它们有所了解是很重要的:
一对一(1:1):一对一关联意味着任何给定的每个(而不是大多数)实例严密地与另一个实体的一个实例对应。每个人只有一个正确的指纹就是的。每个电话号码准确地与一个付帐的独立私人客户对应(不是公司)。美国的每个人都只有一个社会保障号码。
一对多(1:M):一对多关联意味着给定实体的一个实例可以可以与另一个实体的零个实例、一个实例或者多个实例关联。每个人可能没有小孩、有一个小孩或多个小孩。每个人可能没有汽车、有一辆汽车或多辆汽车。
多对多(M:N):多对多关联(给定实体的零个、一个或多个实例与另一个实体的零个、一个或多个实例关联)是一种直接模拟很复杂的关联,它经常被分解为多个1:M关联。由于多个家庭混合在一起,一个或多个小孩可能没有父母亲(孤儿)、一个父母(单亲家庭),多于一个父母(两个仍然在一起或者离婚的两个父母、或者离婚了又复婚了的父母)。房屋或财产可以转让给一个人或多个人,而这些人(一个或多个)在遗嘱上可能又一个或多个房屋或财产。
·属性(Attribute):属性被认为是程序或数据库中的某些组件的可以修改的特性或特征,它可以被设置为不同值或者关系或表中的列。
· Tuple:Tuple是关系数据库或非关系数据库中的排序了的一组值或值属性:关系中的一行。
·删除异常:删除异常指由于其它数据故意的删除而导致的数据矛盾或未预料到的数据(信息)丢失。
·插入异常:插入异常指由于数据的缺少或缺乏导致没有能力把信息添加到数据库。
·更新异常:更新异常指由于数据冗余或者冗余数据的不完整更新造成的数据矛盾。
·关系的分解:关系的分解指把一个关系分解成多个关系,从而使关系符合更高的范式。
·数据冗余:数据冗余指数据库中没有必要的数据重复。
·数据完整性:数据完整性指数据库中数据的一致性。保证数据完整性很重要,只有这样用户才知道他们依赖的数据是正确的、他们查询的结果以及程序才是精确的和符合期望的。
·原子值:原子值是一个值,它既不是能被进一步拆分的一组值,也不是一个重复的组。每个列都有一个完整的值,但是只有一个值--这个值不能被分解为多个部分,它要么被数据库使用,要么被使用数据库的用户访问的信息。
·参考完整性规则:参考完整性规则指存储在非空的外部健中的值必须是某种关系中的关键数据项。
·外部健:外部健是一个关系中的一组属性(一个或多个列),它同时也是某种(相同的或其它的)关系中的主键。它是关系之间的逻辑链接。参考自己关系的外部健称为递归外部健。
·功能依赖:功能依赖意味着一行中某个属性的值由该行中另一个属性的值决定。这通常出现在主键(使某行的信息片断)与该行的其它信息之间。城市和州的组合依赖于Zip(邮政)代码,即使给定的一个州中有很多Zip代码与某个城市关联。美国的每个合法的人员身份依赖于他的社会保障号码。
·决定性:功能依赖左边的属性决定行中其它属性的值(Zip代码决定了城市和州;社会保障号码决定了人的身份;执照号码和州决定了汽车的拥有者)。
·实体完整性规则:实体完整性规则指某一行的关键属性可能为空(如果你在某个城市就有一个Zip代码;如果你有一辆汽车就有一个执照号码)。
·约束:约束是一种规则,它限定了数据库中的值。电话号码必须是数字的;美元数量必须是数字的;state必须是合法的州或省;country必须是合法的国家;日期不能是2月31号。
现在你已经知道了很多相关的术语了,我们可以看看相关术语中规范会的意义了。下面的例子并不是典型的雇员―经理―部门示例,也不是学生―教授―课程提供示例。我将演示一个假设的保险公司的数据库。数据库中的表比本示例中用到的要复杂得多,但是与人们遇到的比较相近。
图1显示了理赔(claim)表的非规范化定义。尽管在某个保险公司的数据库中的表比它多得多,但是这些表为我们提供了一些背景,通过它我们可以看到规范化和其分支。请记住每个章节中的示例都只有部分列,这样就简化了示例并使你轻易地看到发生变化的东西。
CLAIM_NUM、 OCCURANCE_NUM、 CLAIM_STATUS、 ACCDNT_YR、 ACCDNT_DT、 REPORTED_DT、 ENTERED_DT、 CLAIM_DT1、 CLAIM_DT2、 CLAIM_DT3、 CLAIM_DT4、 CLAIM_DT4、 CLAIM_DT5、 CLAIM_DT6、 CLAIM_DT7、 CLAIM_DT8、 CLAIM_DT9、 CLAIM_DT10、 CLOSED_DT、 DEATH_DT、 ASSIGNED_DT、 ADJSTER_CD、ADJUSTER_NAME、 AGENT_CD、 AWARD_CD、 CAUSE_CD、 CAUSE_DESC、 LOCATION、 SITE、 COVERAGE_CD、 COVERAGE_DESC、 DED_RECOV、 DEDUCTIBLE_REMAIN、 PAID_1、 RESERVED_1、 PAID_2、 RESERVED_2、 PAID_3、 RESERVED_3、 PAID_4、 RESERVED_4、 PAID_5、 RESERVED_5、 PAID_6、 RESERVED_6、 PAID_7、 RESERVED_7、 PAID_8、 RESERVED_8、 PAID_9、 RESERVED_9、 PAID_10、 RESERVED_10、 LEGAL_FLG、 KEY1、 KEY2、 KEY3、 KEY4、 KEY5、 KEY6、 KEY7、 KEY8、 KEY9、 KEY10、 SEVERITY_CD、 POLICY_NUM、 PAYMENT_NUM、 SSN、 STATE、 ACTVY_DT、 ENTRY_DT、 ADMIN_CD、ADMIN_DESC、 REOPEN_DT、 INSURED_NAME、 INSURED_ADDRESS、 INSURED_PHONE、 INSURED_CITY、 INSURED_STATE、 INSURED_ZIP、 CLAIMANT_NAME、 CLAIMANT_ADDRESS、 CLAIMANT_CITY、 CLAIMANT_STATE、 CLAIMANT_ZIP、 CLAIMANT_PHONE、 SPECIAL_DT_1、 SPECIAL_DT_2、 SPECIAL_DT_3、 SPECIAL_DT_4、 SPECIAL_DT_5、 SPECIAL_DT_6、 SPECIAL_DT_7、SPECIAL_DT_8、SPECIAL_DT_9、 SPECIAL_DT_10、 GROSS_PD、 POLICY_ID
标题2、在生活中你碰到过哪些数据库的应用。
比如浏览网页,在线购物,玩网络游戏,上QQ,微信,邮箱等等都会用到数据库。
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。基本上生活中用到软件的地方就会用到数据库,因为软件处理数据后都要保存结果,数据库是保存结果数据的地方。
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
好了,文章到这里就结束啦,如果本次分享的数据库应用实例和数据库规范化三个范式应用实例问题对您有所帮助,还望关注下本站哦!