此文是本人在学习Oracle的时候,摘录和总结的一些Oracle基本理论知识,作为读书笔记,方便自己复习,查阅。当然希望能够帮到跟我一样处于初学阶段的朋友,同时也希望大家能够及时的纠正,补充,不胜感激!
目前,数据模型总共有4类:
1. 层次模型:
层次模型是指用树行结构表示实体及其之间的联系,树中每一个节点代表一个记录类型,树状结构表示实体型之间的联系。最著名最典型的层次数据库系统是于1969由IBM公司的IMS(Information Management System),这是IBM公司研制的最早的大型数据库系统程序产品,目前仍然有着一定的市场份额。
学过数据结构的人应该对树状结构并不陌生,类似红黑二叉树,平衡二叉树等等;层次数据模型中最基本的数据关系是基本层次关系,它代表两个记录型之间一对多的关系,所以,在层次模型中,只有根节点是单向映射关系,其余节点都是双向映射关系;细心的人应该已经发现了这种模型的局限性:它有且只有1对N一种关联关系,虽然可以通过复杂的构建来实现例如N对N的关联关系,但过程比较复杂,至于层次模型其他的特点,这里就不再予以讨论,有兴趣的同学可以自行研究。
2. 网状模型
网状模型是最早出现的网状DBMS。网状模型中以记录为数据的存储单位。记录包含若干数据项。网状数据库的数据项可以是多值的和复合的数据。每个记录有一个惟一地标识它的内部标识符,称为码(DatabaseKey,DBK),它在一个记录存入数据库时由DBMS自动赋予。
由于这种网状的数据模型,它允许一个以上的节点无任何关联关系,也允许一个节点若干个复杂的关联关系,正是由于这种比较“自由式”的关联关系定义方式,用户在进行查询的时候,不仅需要确定查找的对象,更要规定存取路径。
然而对于小型应用,这种网状模型的确能够快速,准确地反映出各事物之间的联系,但是如果对于大型应用,势必会导致网状结构越来越复杂。
3. 关系模型
关系模型总的来说克服了上述两大数据模型的缺点,它在表示各事物之间联系的时候,不会像层次模型那样局限,也更不会像网状模型那样的“随意”。
关系模型用二维表来描述数据,你可能没有听过二维表,但你一定知道Excel表吧?在关系数据模型中,关系可以看成是由行和列交叉组成的二维表格,其中一行称为一个元组(在Java中也有元组的概念,Java中的元组是根据Java的泛型与擦除机制而产生的一种类持有机制,与此处的元组有着本质的区别),可以用来标识实体集中的一个实体。与此同时,关系模型又有着严格的规范:属性值具有原子性,不可分解;没有重复的元组,即没有重复的行;理论上没有行序号,但是有时使用的时候可以有行序。
4. 面向对象模型
很多的资料文献上都说这种数据模型仍然处于探索研究中,并没有投入到实际生产,但是我个人对此抱着否认的态度。
Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD(增删改查)操作。有过Java数据持久化开发经验的人一听是不是感觉和大名鼎鼎的Hibernate框架的思想一致?
近几年来,数据库方向上,SQL和NOSQL的争论一直处于很激烈的状态,然而我个人觉得,在未来业务开发与数据持久化这两项工作必然会分开,而且就现在,也确实有好多公司确实已经开始这么做了。