网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > 体系架构 > Oracle的表结构:纵向和横向-体系架构  

Oracle的表结构:纵向和横向-体系架构

2008-04-08  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

    本文将和大家探讨用纵向和横向这两种方法来组织Oracle数据库中的数据。本文的例子都是在Oracle数据库中完成的,但也适用于其他任何关系数据库。这些关系数据库数据组织的方法有利也有弊,文本也将为大家分析它们的异同。<P>

  根据业务和发展的需求,可以实施多种不同的数据存储方式。第一种数据布局为横向结构。这是一种传统的数据存储方式。顾名思义,每条新的数据记录都作为一行输入到表中,表字段是横向排列的。第二种是纵向结构。这是一种特殊的数据存储方式,只有由键(Key)和值(value)组成的两个实际数据列,以及一个(也可以是多个)识别列(ID)。

网管有家bitscn.net

  纵向vs.横向

网管联盟bitsCN_com

  下面的例子是传统的横向表结构: 网管u家u.bitscn@com

  表HR 

网管朋友网www_bitscn_net

ID

网管论坛bbs_bitsCN_com

网管联盟bitsCN@com

网管u家bitscn.net

部门 网管u家bitscn.net

性别

网管网www.bitscn.com

123

中国网管论坛bbs.bitsCN.com

网管网www.bitscn.com

网管联盟bitsCN@com

技术部

网管论坛bbs_bitsCN_com

中国网管联盟bitsCN.com

234

网管联盟bitsCN_com

网管网www.bitscn.com

网管网www_bitscn_com

市场部 网管下载dl.bitscn.com

网管下载dl.bitscn.com

456 网管下载dl.bitscn.com

网管下载dl.bitscn.com

中国网管联盟bitsCN.com

会计部 网管下载dl.bitscn.com

网管网www_bitscn_com

网管有家bitscn.net

  而下面这个是纵向表结构的例子,存储的数据和上面的横向表相同: 网管联盟bitsCN@com

  表 VR 中国网管论坛bbs.bitsCN.com

ID 网管有家www.bitscn.net

Key 网管u家u.bitsCN.com

Value 网管u家bitscn.net

123

网管网www.bitscn.com

网管有家bitscn.net

网管联盟bitsCN@com

234

网管网www.bitscn.com

网管联盟bitsCN_com

网管下载dl.bitscn.com

456 网管朋友网www_bitscn_net

网管联盟bitsCN@com

网管有家www.bitscn.net

123

网管联盟bitsCN@com

网管u家www.bitscn.net

网管网www_bitscn_com

234 中国网管论坛bbs.bitsCN.com

网管u家u.bitsCN.com

网管论坛bbs_bitsCN_com

456

网管u家www.bitscn.net

网管联盟bitsCN@com

网管u家u.bitsCN.com

123

网管下载dl.bitscn.com

部门 网管网www_bitscn_com

技术部 网管bitscn_com

234 中国网管联盟bitsCN.com

部门 网管朋友网www_bitscn_net

市场部 网管u家www.bitscn.net

456 网管下载dl.bitscn.com

部门 中国网管论坛bbs.bitsCN.com

会计部

网管联盟bitsCN@com

123 网管联盟bitsCN@com

性别

网管u家bitscn.net

网管网www.bitscn.com

234 网管有家www.bitscn.net

性别

网管u家www.bitscn.net

网管u家bitscn.net

456

网管u家bitscn.net

性别x 网管朋友网www_bitscn_net

网管网www.bitscn.com

网管u家bitscn.net

  我们可以看到,数据从一个3行×4数据列的矩阵(表HR)转变成了一个12行×2数据列的矩阵(表VR)。横向表的记录条数与列数的乘积似乎和纵向表的行数相等。例如:3×4=12。不过,这种假设并不一定是正确的,稍后会在文中讨论这个问题。 网管有家www.bitscn.net

纵向数据存储的利与弊

  传统横向方式存储数据可以带有预先设定的结构和列,所以有很多优点,但也有缺点。假设我们设计的应用程序带有一个窗体显示区,而这个显示区是完全动态化的,且没有固定的字段号码或名称。用户可以即时创建一个新的字段,并赋予该字段名称和值。要怎样才能在数据库中长期存储这样的窗体呢? 网管bitscn_com

  又假设我们需要根据业务要求来创建一些窗体,各个窗体具有一些符合特定业务需求的不同的字段。我们要把各个窗体的数据都存储在一个横向结构表中,该表中给每一个字段分配一个特定的列,而每个窗体就是该横向表的一行。经过一段时间以后,由于业务需求需要对某个窗体添加一个新的字段。为了将新字段添加到窗体中,就必须改变用户界面和持久层逻辑,而且实际存储的表还需要为此添加额外的列,这样该应用程序还需要重新进行测试和调配。在一个开发人员没有权限直接访问数据库的环境中,数据库管理员团队也要参与到表的实际修改操作当中。如果只需要修改一次也就罢了,但是如果过一段时间后又需要添加另外一个字段呢?

网管朋友网www_bitscn_net

  要解决上面提到的两种情况,就需要使用纵向数据存储方式,并在应用层和用户界面上采用一种不同的动态逻辑。因为数据能够以“键/值”配对的形式存储在只有两列的表中,并通过单一的ID的形式将数据通通绑定在一个逻辑窗体中,而且对于能够在一个窗体中设置多少字段并没有限制。而后,纵向表中的每个逻辑行的字段数就可以不一样了。由此可见,纵向数据存储结构的最大好处就是灵活性,不过也有很多弊端。

网管联盟bitsCN@com

  首先,虽然弹性是有了,但失去了对数据的控制权,也就是说很难维持数据的规范化。举个例子,如果我们在一个纵向表中存储了一个共同基金的信息,根据分析师的名字和联系方式都能够对这些信息做出修改;而通常情况下,这种类型的信息都是存储在不同的表种,并通过外键ID连接到基金表的。而且,在纵向表中,字段的数据类型设置也会出现问题。因为在“值”这一列,只能设置成一种数据类型(例如,设置成varchar),而所有的值都必须是这种类型的值,或者你也可以在保存和检索操作中不停来回转换数据类型。此外,在纵向表中不可能存储类似于BLOB和CLOB这种特殊类型的数据。 网管朋友网www_bitscn_net

  纵向表还有一个缺点就是数据的一致性问题。将所有的列名都输入到一个“键”列中,使用户(或应用程序)能够很轻易就把相同的数据存储成不同的“键”和“值”。例如,用户可以创建一个新字段,命名为“公司”,赋予其值为“甲骨文”;而其他用户可能将字段名改为“企业”,而值为“甲骨文”,事实上两个用户的数据是相同的。 网管u家bitscn.net

网管联盟bitsCN@com

TAGs   体系   架构   横向   纵向   结构   数据   存储   一个       可以      
 上一篇:Windows环境中同时安装Oracle9i 10g和11g-体系架构   下一篇:数据质量体系结构介绍-体系架构
Oracle的表结构:纵向和横向-体系架构 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: