前情提要
数据模型定义
DAMA数据治理体系中将数据模型定义为一种文档形式,数据模型是用来将数据需求从业务传递到IT,以及在IT内部从分析师、建模师和架构师到数据库设计人员和开发人员的主要媒介;
作用
记录数据需求和建模过程中产生的数据定义;
数据建模方法
常见的数据建模方法是关系建模、维度建模、面向对象建模、基于事实建模、基于时间建模和非关系型建模;
本章重点梳理面向对象建模方法
面向对象建模:是一种软件开发过程中的建模技术,它使用对象和对象之间的关系来表示现实世界中的实体和它们之间的关系。
统一建模语言(UML):是一种图形风格的建模语言,UML根据不同的数据库有不同种类的类模型。
面向对象建模的核心概念
对象(Object):对象是具有状态和行为的实体,状态通过属性表示,行为通过方法实现。
类(Class):类是对象的蓝图或模板,它定义了一组属性和方法,这些属性和方法可以被对象实例化时继承。
封装:封装是将数据和操作数据的方法结合在一起的过程,它隐藏了对象的内部状态,只通过方法暴露对外的接口。
UML在数据库设计中的应用场景
UML(统一建模语言)在数据库设计中的应用主要体现在帮助设计者理解、分析和设计数据库的结构。
1.类图(Class Diagram):
类图是UML中用于描述系统中类的结构和它们之间关系的图。在数据库设计中,类图可以用来表示实体(Entity)和它们的属性(Attribute)。
类图中的类通常对应数据库中的表(Table),类的属性对应表的列(Column),类之间的关系(如关联、依赖、聚合等)可以转换为表之间的关系(如外键约束)。
2.对象图(Object Diagram):
对象图是类图的一个实例化版本,它展示了在特定时刻系统中对象的实例以及它们之间的关系。
在数据库设计中,对象图可以用来展示数据的实例状态,帮助设计者理解数据在特定时刻的组织方式。
3.组件图(Component Diagram):
组件图用于描述软件组件的组织和它们之间的依赖关系。
在数据库设计中,组件图可以用来展示数据库组件(如存储过程、触发器、视图等)的组织结构;
4.部署图(Deployment Diagram):
部署图描述了系统的物理部署,包括硬件和软件的配置。
在数据库设计中,部署图可以用来展示数据库服务器的物理位置和配置,以及数据库实例的分布。
5.包图(Package Diagram):
包图用于组织模型元素,如类、接口等,将它们分组到不同的包中。
在数据库设计中,包图可以用来组织相关的数据库模式(Schema)或数据模型元素,提高模型的可管理性;
6.活动图(Activity Diagram):
活动图主要用于描述业务流程或操作的动态行为,但它们也可以用于数据库设计,以展示数据处理的步骤和决策点;
7.状态图(State Diagram):
状态图描述了系统或对象在其生命周期内可能经历的状态以及状态之间的转换。
在数据库设计中,状态图可以用来描述数据实体的状态变化,特别是在设计状态依赖的数据模型时。
面向对象建模的步骤
需求分析:确定系统的需求和功能;
识别实体:识别系统中的关键实体,如用户、订单、产品等;
定义属性和方法:为每个实体定义属性和方法;
建立关系:定义实体之间的关系,如关联、继承等;
设计类图:使用统一建模语言(UML)中的类图来表示类和它们之间的关系;
实例
以类图为例:下面是一个顾客从零售商处预定商品的模型的类图,中心的类是Order,连接它的是购买货物的Customer和Payment,Payment有三种形式:Cash,Check,或者Credit,订单包括OrderDetails(line item),每个这种类都连着Item。
UML类的符号是一个被划分成三块的方框:类名,属性,和操作,抽象类的名字,像Payment是斜体的,类之间的关系是连接线;
类图的三种关系
1.关联association
表示两种类的实例间的关系。如果一个类的实例必须要用另一个类的实例才能完成工作时就要用关联。在图中,关联用两个类之间的连线表示。
2.聚合aggregation
当一个类属于一个容器是的一种特殊关系。聚合用一个带菱形的连线,菱形指向具有整体性质的类。在我们的图里,Order是OrderDetails的容器。
3.泛化generalization
一个指向以其他类作为超类的继承连线,泛化关系用一个三角形指向超类,Payment是Cash,Check和Credit的超类。
一个关联有两个尾端,每个尾端可以有一个角色名role name来说明关联的作用,比如,一个OrderDetail实例是一个Order实例的项目。
关联上的方向性navigability箭头表示该关联传递或查询的方向,OrderDetail类可以查询他的Item,但不可以反过来查询,箭头方向同样可以告诉你哪个类拥有这个关联的实现;也就是OrderDetail拥有Item,没有方向性的箭头的关联是双向。
关联尾端的数字表示该关联另一边的一个实例可以对应的数字端的实例的格数,通过这种方式表达关联的多样性。多样性的数字可以是一个单独的数字或者是一个数字的范围。在例子中,每个Order只有一个Customer,但一个Customer可以有任意多个Order。
--实例引用《UML实践详细经典教程----用例图、顺序图、状态图、类图、包图、协作图》