阅读以下关于数据库分析与设计的叙述,在答题纸上回答问题1至问题4。
某集团公司在各省均设有分公司,现欲建立全国统一的销售管理信息系统,以便总公司及时掌握各分公司的销售情况。公司成立专门的项目组进行该系统的研发工作,其中张工负责其中的数据库设计工作。
张工和需求分析小组紧密合作,在设计出数据流图和数据字典的基础上,给出了数据库关系模式和相应的索引设计。同时考虑到未规范化关系模式可能引起的各类数据错误,对关系模式进行了全面的规范化处理,使所有关系模式均达到了3NF或BCNF。
在项目实施过程中,应用开发小组认为该设计方案未考虑应用功能的实际需求。如果严格按照设计方案实施,会对应用系统中整体性能产生较大影响。主要的原因在于进行数据查询时,会产生大量的多表连接操作,影响性能。而设计方案中的索引设计,并不能完全满足数据查询的性能要求。
应用开发小组还认为,该设计方案未考虑到信息系统中核心销售数据处理的特点:各分公司在使用该信息系统时只能操作自己分公司的销售数据,无权操作其他分公司的销售数据;只有总公司有权利操作所有销售数据,以便进行统计分析。
应用开发小组要求,在数据库设计方案中,必须针对实际应用功能的实现来考虑关系模式的规范化,必要时需要采用逆规范化或解除规范化的方法来保证性能要求。
系统需要管理供应商和货物等信息,具体包括供应商姓名、地址以及货物名称、价格等,供应商可以提供0~n种货物,其公司地址也可能发生变化。请以供应商关系模式supplier(name,address,product,price)为例,解释不规范的关系模式存在哪些问题。
(1)数据冗余:关系模式中多次重复记录了同一供应商的地址。
(2)插入异常:如果还未确定一个供应商有哪些货物,只是想添加一个供应商的地址信息,则会产生产品与价格均为空的记录。
(3)修改异常:当修改一个供应商的地址时,需要将多条记录同时更新,若未同时更新,则数据产生不一致。
(4)删除异常:当删除一个供应商的货物时,其地址信息被一并删除。
在数据库设计过程中,如果直接采用未经过规范化的关系模式,就可能导致一系列数据管理上的问题。以 supplier(name, address, product, price)为例,该关系模式将供应商的基本信息与所提供的货物信息混合在一张表中,造成了结构上的冗余与潜在风险。
首先,数据冗余是最显著的问题。比如一个供应商A提供了5种货物,那么供应商A的地址信息将在该表中重复存储5次。这不仅占用额外存储空间,而且一旦需要更新地址,必须在多条记录中同步更新,极易导致数据不一致。其次,插入异常也很明显。当数据库需要新增一个供应商的信息时,如果此时供应商还未提供任何货物,则只能插入“货物名”和“价格”字段为空值的记录。这种记录破坏了数据的完整性与一致性,同时还可能违反某些字段的非空约束。第三,修改异常表现在地址信息的更新上。当供应商A更换地址时,系统必须在多条记录中逐一更新,否则会出现同一供应商的不同地址,造成信息冲突。最后,删除异常同样严重。当系统删除供应商某一货物时,该供应商的基本信息可能也随之丢失,从而丢失了该供应商仍然存在的事实,这对管理系统的逻辑正确性是极大的破坏。
因此,从冗余、插入、修改、删除四个方面来看,未规范化的关系模式会严重影响数据库的数据一致性与可靠性。通过对关系模式进行规范化处理(如将供应商表与货物表拆分为两个关系,再通过外键关联),可以很好地解决这些问题。