Visual Foxpro的数据一致性设计
内容:
----如何保证数据库系统的数据一致性长期以来一直是人们所关心的问题,传统的Xbase关系型数据库系统在此问题的处理上存在明显的局限性。VisualFoxPro作为一个面向对象的数据库
系统,成功地将一套控制信息存储和合法检验规则的数据字典引入了Xbase领域,从而使数据的一致性限制由庞大的
程序代码变成了数据库的一部分,极大地增强VFP的数据处理能力。
----"一致性"这个术语描述了系统中存储的数据资源的正确状态,VFP从数据有效性、触发器和引用完整性这三个方面来维持数据的这种一致性状态。在此,我们以一个销售系统为例,阐述在VFP中数据一致性的设计方法。
----1.数据的一致性要求
----VFP的数据字典只对数据库有效,而非针对自由表。就一个销售
管理系统而言,其核心是销售发票,因此,我们就可以
设计一个销售数据库(Sales.DBC),其中主要包含以下几个相互关联的数据表:
----商品信息表(goods.dbf):存储商品的有关信息。 包含商品编码、商品名称、商品规格、计量单位、税率、参考单价等字段,其中"商品编码"为 主关键字。
----客户信息表(customer.dbf):存储有业务关系的客户情况。包含了客户编码、名称、地址、开户银行、帐号、纳税人登记号等字段,其?quot;客户编码"为主关键字。
----销售发票表(invoice.dbf):存储所开发票的信息。 包含了发票号码、开票日期、客户编码、备注、经办人等字段,其中"发票号码"为主关键字, 并通过"客户编码"与客户信息表形成多对一的关联。
----销售明细表(details.dbf):存储与销售发票对应的商品的明细信息。包含了发票号码、商品编码、数量、单价、金额、税金等字段,通过"发票号码"与销售发票表形成多对一的关联,同时通过"商品编码"与商品信息表保持多对一的关联。
----为确保数据的正确性,要求有以下的一致性限制:
----开票日期的缺省值为当天日期
----销售明细表的单价必须大于0
----销售明细表的金额=数量*单价
----客户信息表中的开户行、帐号和税号字段均不能为空
----当删除销售发票表的一条记录时,给出提示信息,确认后删除该记录,并且对应的销 售明细信息自动删除
----当客户信息表的客户编号被修改时,销售发票表的对应客户编号随之改变
----当商品信息表的商品编号被修改时,销售明细表的对应商品编号随之改变
----若在销售发票表中存在某客户编号,则禁止删除该客户信息
----若在销售明细表中存在某商品编号,则禁止删除该商品信息
----现在我们就可以通过VFP的数据字典来实现这些 一致性要求。
-
---2.数据有效性
----数据有效性分字段级有效性和记录级有效性,它们分别在Fields Properties(字段属性)和Table Properties(表属性)中进行定义。
----在Table Designer(表设计器)的左下部分可以看到字段属性分组,其中包含了用于字段有效性检测的四个域Validation Rule(有效性规则),Validation Text(字段有效性文本),Default Value(缺省值)和Caption(标题)。有效性规则为一个逻辑表达式,当其返回值为.f.时,将显示一条内容为字段有效性文本的错误信息。缺省值为产生新记录时该字段的初始化值。
----那么,对于开票日期字段,可以将其缺省值属性设为:
----Default Value:date()
----对于单价(price)字段,可设为:
----Validation Rule:price>0
----Validation Text:"商品单价必须大于0"
----Default Value:
----Caption:"单价"
----字段的有效性规则在焦点离开字段时即被启动,如果需要同时检测多个字段的情况,那么就需要用到记录级的有效性规则。记录级有效性规则和字段有效性规则一样工作,只是它在离开记录时启动,并且只有在项