关系数据库中的行列互换.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关系数据库中的行列互换.doc

关系数据库中的行列互换   摘要:关系数据库模式设计的好坏直接影响到整个数据库应用系统的性能,应遵循关系规范化理论,而关系中有些类似数据既可以行的形式存储,又可以列的形式存储。该文阐述了行列这两种存储方式及其优缺点,并用实例及以Oracle 11g为工具详细描述了关系数据库中数据的行列相互转换,并给出实现互换的SQL语句,这对于数据库中类似数据的模式设计、数据库系统的维护都具有借鉴意义。   关键词: 行列互换;关系模式;数据库设计   中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)29-6495-04   随着信息系统在各行各业的蓬勃发展,数据库的应用也越来越广泛,关系数据库的逻辑结构设计是数据库应用系统设计的关键步骤之一,也是系统开发的基础工作,其设计的优劣会影响到系统各模块功能的执行流程和运行效率及性能的好坏。在关系数据库的逻辑设计阶段,是把E-R模型转化为相应的关系模型[1-3],人们以关系规范化理论为指导,即关系是要满足一定要求的,满足不同程度要求的为不同范式[4-5]。   不仅如此,现实世界是错综复杂的,数据的结构、大小、及数据间的关系也会随着时间的变化而变化。数据库设计人员在逻辑设计时既要考虑目前的数据状况,还要考虑数据关系在未来可能发生的变化,设计人员的设计水平和经验至关重要。有些时候,数据模型设计好且系统开发完成,运行一段时间以后,数据的状况和数据间的关系发生了变化,这时需要对现有的数据模型做适当修改,并且还要保证现有数据不丢失、保证数据的完整性、一致性,系统运行可靠和高效率,这也是数据库系统维护的重要工作。   例如,在金融行业的CRM系统中(其他行业也类似),需要用关系表来存储个人客户,其中有电话号码信息,表1为一种数据模型结构。   表1 个人客户关系表方式一   此关系的主键为CNO,且此关系是第三范式的。   另一种数据模型是把客户电话号码分离出来,用一张单独的表来存储,表2为其存储结构。   表2 个人客户关系表方式二   [Customer(个人客户)\CNO   (客户号)\SNAME   (客户姓)\GNAME   (客户名)\SEX   (性别)\BIRTHDAY   (客户号)\PHONETYPE   (电话类型)\PHONENUM   表2中关系Customer的主键为CNO,是第三范式的;关系Cphone的主键为(CNO,PHONETYPE),也是第三范式的。   第一种方式称作以行的形式存储,第二种方式称作以列的形式存储。两种方式都符合关系模式设计的规范化原则,但各有其优缺点。有时设计人员以一种方式设计好关系模式后,随着时间的变化,用户需求、报表格式[6-7]、数据间的关系也发生变化,此种方式的优点变得不明显,设计人员要用另一种方式来存储数据,这时就牵涉到关系中数据的行列互换。   1 行列存储方式的比较   上面提到,行列存储方式各有其优缺点,图1中的方式是以行的形式存储,其优点为:   1)关系模式结构比较清晰,易于理解。   2) 很多报表的格式与关系模式结构类似,易于生成。   3) 用一个关系存储数据,在查询时不需要作多表连接,具有较高的查询效率。   这种方式也有一些缺点:   1)关系表中会出现很多空值,因为不是所有客户都有三种类型的电话号码,特别是对于客户数量很大的情况(一般CRM系统中客户数可达百万以上),这既浪费存储空间,又可能会给数据处理带来异常。   2) 存储客户的电话类型数目是固定的,不够灵活,若增加或减少电话类型数,需要增加或减少表的属性,修改表的结构。   相比较而言,图2中的方式是以列的形式存储,它的优缺点正好与图1中的方式相反。其优点为:   1)若客户没有某种类型的电话号码,则不存储,不会出现空值,从而不会带来可能的数据处理异常。   2) 存储客户的电话类型数目是可变的,非常灵活,若增加或减少电话类型数,不需要增加或减少表的属性,不必修改表的结构,只需要在表Cphone插入或删除记录即可。   这种方式的缺点为:   1)关系模式结构不太清晰,不太容易理解。   2) 很多报表的格式是以行的形式显示,不太容易从数据表中直接生成。   3) 因为是用多表存储,在查询时需要作多表连接,影响查询效率。   由于两种方式各有其优缺点,很难说一种方式一定优于另一种方式,设计人员根据用户需求、数据量、报表格式、数据间的关系会采用一种方式,但随着时间的变化,可能会改为另一种方式,这时就要对关系中的数据进行行列的互换。   下面就以图1、图2为例,以Oracle 11g[8-9]为工具具体阐述如何进行行列互换的。   2 行到列的转换   假设已有图

文档评论(0)

lmother_lt + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档