一、什么是数据模型?
-
数据模型是数据库的基础结构,用于描述和组织数据的方式。
-
它不仅是数据库的底层结构,还是一个概念性工具,帮助理解数据的含义和关系。
- 数据模型包括数据本身、数据之间的关系、数据的语义(含义和描述)、以及数据的约束条件。
- 在设计数据库时,可以从物理层面(存储结构)、逻辑层面(关系模型)和视图层面(用户视角)来考虑和实现数据模型。
常见的四种数据模型:
1.关系模型
关系模型是数据库管理系统中的一种主要数据模型。关系模型通过表和表之间的关系,提供了一种清晰而有效的方式来组织和管理数据,适用于各种规模和类型的应用程序和数据库需求。
-
关系模型是由表的集合组成的,每个表用来表示数据和数据之间的关系。
-
表中的行和列用来存储数据,同时也表示数据之间的关系。
-
每个表可以包含多个列,每个列都有唯一的名称和定义的数据类型。
-
在关系模型中,表被称为关系,反映了数据的结构和组织方式。
-
关系模型是基于记录(即行)的模型,每条记录有多个字段或属性,字段数目和类型是固定的。
-
关系模型是目前最广泛使用的数据模型,大多数现代数据库系统都基于此模型设计和实现。
2.实体关系模型
E-R 模型通过清晰地定义实体和它们之间的关系,为数据库设计提供了一种直观且高效的方法。
-
E-R 模型由称为实体的基本对象及其之间的关系组成。
-
实体是现实世界中可区分的事物或对象,例如一个人、一个地方或一个事件。
-
实体之间可以存在不同类型的关系,如一对一、一对多或多对多关系,这些关系反映了实际世界中事物之间的连接方式。
3.对象模型
对象模型(Object-Based Model,OBM)是数据库设计中的一个重要概念。结合了实体-关系(E-R)模型和面向对象编程语言的特性。
对象模型在现代数据库设计和应用开发中具有重要的地位,为面向对象编程与数据库管理之间的集成提供了理想的解决方案。
-
面向对象的特性:
- 对象模型基于面向对象编程(如C++、Java、C#等)的思想,将数据表示为对象。
- 每个对象有其自身的属性(数据)和方法(操作)。
-
封装:
- 将数据和操作封装在对象内部,通过定义公共接口进行访问和操作,增强了数据的安全性和模块化。
-
继承:
- 支持类与子类之间的继承关系,使得对象可以继承和重用现有的属性和方法。
-
多态:
- 允许不同类的对象对相同的消息作出不同的响应,提高了代码的灵活性和可复用性。
-
实体-关系模型(E-R模型):
- 基于实体、属性和关系的概念,用于描述现实世界中的数据结构和关联。
-
数据建模:
- 通过定义类、属性和方法来建模现实世界中的实体和其关系,更符合业务逻辑和需求的表达方式。
4.半结构化数据模型
半结构化数据模型是一种用于表示和处理半结构化数据的概念性模型,它区别于传统的结构化数据模型(如关系数据库中的表和列)和非结构化数据(如文本和图像)。
-
半结构化数据模型强调数据可以包含不同的数据项类型,并且可以根据需要动态扩展和修改数据的结构。
-
这种模型与传统的数据模型形成鲜明对比,比如关系型数据库模型,它们通常要求所有数据都遵循预定义的严格结构。
-
在这种情况下,半结构化数据模型可以使用类似可扩展标记语言(如XML)的格式来表示数据。
-
XML允许数据以自定义的、层次化的方式进行组织,每个数据项可以具有不同的属性集合。这
二、为什么需要数据建模?
- 1.大数据时代,如何将这些海量的数据进行有序、有结构地分类组织和存储是我们面临的一个挑战,也是我们的目标。
- Tips:如果把数据比作图书馆里的书,我们希望看到书在书架上分门别类的放好;如果把数据比作城市里的建筑,我们希望城市规划布局合理;如果把数据看作电脑文件和文件夹,我们希望按照自己的习惯有很好的文件夹组织方式,而不是糟糕混乱的桌面,经常为找一个文件而不知所措。
-
2.而数据模型就是数据组织和存储的方法,数据模型强调从业务、数据存储和使用角度合理存储数据。
-
良好的数据模型可以带来很多好处:
- 性能(效率):快速查询所需要的数据,减少数据的I/O吞吐,极大改善用户体验,提高使用数据的效率。
- 成本:减少不必要的数据冗余,也能实现计算结果复用,极大降低成本。
总结下来就是一句话——大数据系统需要数据模型方法来帮助更好地组织和存储数据,以便在最主要的两个方面——成本和效率之间取得最佳平衡。
三、从OLTP、OLAP系统区别看模型方法论的选择
- 一般在公司中,系统是分为两部分的,一部分系统是业务系统,另一部分是决策类系统。
- OLTP通常是业务系统的这种模式,OLAP通常是面向于分析的决策类系统。
- OLTP通常是关系型数据库,必须要保证业务上的数据的唯一性或者准确性(严格3NF要求)。
- OLAP强调的不再是业务数据的存储,而是通过对业务数据的再分析,最终产出一个决策,去回流到业务系统中,让业务系统更好的去发展。