1.模型分类
数据模型是一种由符号、文本组成的集合,用以准确表达信息景观,达到有效交流、沟通的目的。数据建模者要求能与来自不同部门,具有不同技术背景,不同业务经验,不同技术水平的人员交流、沟通。数据建模者要了解每个人员的观点,并通过反馈证明理解无误,最终作为组件,构建在模型中。
数据模型的两大核心价值:交流性和精确性。
- 交流性:在企业开发过程中,不同的部门、团队、不同技术背景和业务经验的成员,在进行业务沟通时需要对概念(如订单、客户等)达成统一的理解,数据模型就是一种理想的工具。
- 精确性:阅读模型时,每一个符号和条目都是清晰的、无歧义的。
数据模型有三个层次:概念模型、逻辑模型、物理模型。
概念模型(Conceptual Data Model,CDM)包含模型最基本的、关键的概念,如“商品”、"员工"等,描述预设范围内的业务需求,不涉及具体的实体属性。
概念模型 |
---|
![]() |
逻辑模型(Logical Data Model,LDM)针对业务需求更加具体的解释实体,表示详细的业务解决方案,比如“员工”包含姓名、出生日期等属性。逻辑模型与平台无关。
逻辑模型 |
---|
![]() |
物理模型(Pysical Data Model,PDM)表示详细的技术解决方案,在逻辑模型基础上,增加了字段类型、约束等信息,与特定数据库相关。
物理模型 |
---|
![]() |
建模模式有两种:关系和维度。关系数据建模是通过准确的业务规则来描述业务如何运作的过程;维度数据建模是通过准确的导航来描述业务如何被监控的过程,侧重于度量结果。比如在关系模型中可以约束:一个订单至少对应一件商品;而维度模型中,可以通过天、月、年等维度展示商品销售额。
2.模型组成
2.1 实体
实体表示与业务有关的重要且有价值的事务的信息集合。
每个实体设计时,都由一个名词或名词词组定义,应该符合六大类型之一:谁(Who)、什么(What)、何时(When)、何地(Where)、为何(Why)、如何(How)。
实体可分为强实体和弱实体:强实体可独立存在,表示独立的人、事或地点,用直角矩形表示,如通过用户编号能直接查到用户,用户可独立存在;弱实体至少依赖一个其他实体,用圆角矩形表示,如用户购买商品生成订单,订单依赖于商品,即创建订单之前商品必须在系统中存,那么订单就是弱实体。
实体和弱实体 |
---|
![]() |
2.2 属性和域
属性用于描述业务特征,不同身份的用户对它有不同的称呼,业务人员可能称呼为“特征”/“标签”,数据库开发人员习惯用"列"或者"字段"来称呼。
某一属性所有可能取值的集合称为域。属性的取值不能超出该域。域可以由一组值限定:比如性别的域,只能限定为男和女。域也可以通过规则限定,比如日期必须是合法日期,类似2月30日的值就是非法的。
通常域划分为三种类型:
- 格式域:将数据指定为数据库中的标准类型,如整型(Integer)、日期(Date)都是格式域。
- 列表域:可以理解为下拉列表,给定枚举集合作为取值范围,如性别只能取男和女,订单状态有:未支付、已支付、已关闭等。
- 范围域:要求取值介于最大值和最小值之间。如订单的交付日期必须在天到未来三个月内的某一天。
列表域和范围域都是格式域的改良。
2.3 关系
数据模型中的规则即为关系,关系可以是数据规则,也可以是行为规则。数据规则指数据间如何关联;行为规则指当属性包含某特定值时,需要采取什么操作。
数据规则包括结构完整性(Structural Integrity,SI)和参照完整性(Referential Integrity,RI)。结构完整性定义了参与某个关系的实体数量,如每个产品可以出现在一个或多个订单上,每个订单上有且仅有一个产品;参照完整性用于确保取值的有效性,比如订单不能脱离有效的产品而存在。通过上述例子可以看出,当定义了SI时,对应的RI规则也随之产生。
行为规则指当属性包含某特定值时,需要采取什么操作,比如一个订单包含5件以上商品,可享受九折优惠。
数据模型可以进行数据描述并指定数据规则,但在数据模型中不能加上行为规则。行为规则在应用程序中限定。
基数表示一个实体的多少实例与另一个实例发生关系。如每个部门包含一个或多个员工。基数可以选择0、1或多个(m)。0或1用于说明关系中实体的实例是否被需要,多用于描述大于0的任何数。但需要注意的是,不能指定一个特定的数字来表示多,如1辆车有4个轮子,我们只能说1辆车有多个轮子,车和轮子之间是一对多的关系。
在关系图中,用连线表示关系,连线中有竖线的一端为1的一方,“鱼尾纹”的一端表示多的一方。多对多关系中两端都是鱼尾纹,但父实体一端是竖线。连线上有标签来说明关系所表示的规则。
下一期分享:键和规范化。
参考资料:
《数据建模》[美]Steve Hoberman 著 丁永军 译