
# 数据模型概述
数据模型是对企业的数据元素及其彼此之间关系的可视化表示。 模型通过帮助在相关业务流程的上下文中定义和精心组织数据，可以为开发有效的信息系统提供支持。 借助这些模型，业务和技术资源可协同决定整个组织中数据的存储、访问、共享、更新和使用方式。
基于元模型驱动（2种[元模型实体]和6种[元模型关系]），工业数字模型驱动引擎-数据建模引擎（xDM Foundation，简称xDM-F）的数据模型包括[数据实体]、[关系实体]和[功能模型]三种类型。应用责任人或应用开发人员可通过图形化方式进行建模，无需关心底层数据表的设计，通过创建数据模型即可定义应用的数据模型格式。
 #### 数据实体
实体指现实世界中客观存在的并可以相互区分的对象或事物，可以是具体的人、事或物，也可以是抽象的概念或联系。这些独立事物个体的特性称为实体属性，每个实体都具有多个属性。在xDM-F中，这些独立的事物个体都可以看作是数据实体。数据实体是xDM-F原子接口的承载体之一，用于定义数据对象的基本信息、业务属性以及配置所需的功能（如基础数据服务、树形结构、生命周期管理等）。
数据实体按元模型类型的维度分为如[表1]所示类型。
 表1元模型实体 
| 类型    | 说明                                                                                                                                                                                                                    |
|:---|:---|
| 独立实体  | 又称"单实体"，适用于关系上不依附、不隶属，单独存在的业务对象。例如，企业的组织架构、部门、机房等。 创建数据实体时，"父模型"为"BusinessObject"或"BasicObject"的数据实体均为单实体。                                                             |
| 多版本实体 | 又称"Master-Branch-Version（M-V）模型实体"，适用于只对同一业务对象进行局部的改进，或者需要对业务对象的历史演变过程进行记录和维护。例如，研发过程的技术文档、部件等业务对象会不断修改，需要能够随时查看历史版本数据及修改记录。 创建数据实体时，"父模型"为"VersionObject"的数据实体均为M-V模型实体。 |
   
数据实体按模型类型的维度分为如[表2]所示类型。
 表2模型类型 
| 类型   | 说明                                                                                                                                                                                                                                                   |
|:---|:---|
| 实体模型 | 指具体的、有形的、实际存在的实体材料，例如文档、产品、汽车零部件等。 可在设计态创建数据实体时选择。实体模型的数据实体会生成一个物理表，可用于运行态扩展子模型。                                                                                                                    |
| 抽象模型 | 指通过语言、符号、图表、数字等抽象形式反映实体内在联系和特征的模型。 可在设计态创建数据实体时选择。抽象模型的数据实体不会生成物理表，但可在创建数据实体时，被数据实体继承。即创建数据实体时，"父模型"可以选择抽象模型的数据实体。                                                                                     |
| 扩展模型 | 当实体模型的属性不能满足实际业务需求，需要添加新属性但不能修改既有模型结构时，可通过扩展模型来扩展属性。 在运行态创建的数据实体均为扩展模型，且该扩展模型作为"父模型"对应实体模型的子类，与父模型共享存储，只允许添加扩展属性。 创建扩展模型数据实体时，"父模型"只能选择具有"扩展类型"功能的实体模型。 |
   
 #### 关系实体
关系实体用于描述两个或更多数据实体相互如何关联，是xDM-F原子接口的承载体之一。
基于xDM-F支持的数据关系，提供如下关系类型：
 表3元模型关系 
| 类型            | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|
| 1:N组合关系       | 又称"参考关系"，主要用于为对象之间建立1:N或主外键关系，可分为： - 组合关系：1:N组合关系，即整体和部分的关系。例如公司和部门，如果公司不存在了，部门也不存在了。  - 非组合关系：1:N聚合关系，即普通的1:N参考关系或主外键关系。例如部门和员工，一个部门有多个员工。   在创建属性时，将属性的"类型"定义为"参考对象"，则属性对应的数据模型具有参考关系。 适用于传统主外键数据的关联。例如，一个部门可以有多个员工，它们之间为一对多聚合关系；公司是部门的父项，部门随着公司而存在，它们之间为一对多组合关系。 |
| 1:N聚合关系       | 又称"参考关系"，主要用于为对象之间建立1:N或主外键关系，可分为： - 组合关系：1:N组合关系，即整体和部分的关系。例如公司和部门，如果公司不存在了，部门也不存在了。  - 非组合关系：1:N聚合关系，即普通的1:N参考关系或主外键关系。例如部门和员工，一个部门有多个员工。   在创建属性时，将属性的"类型"定义为"参考对象"，则属性对应的数据模型具有参考关系。 适用于传统主外键数据的关联。例如，一个部门可以有多个员工，它们之间为一对多聚合关系；公司是部门的父项，部门随着公司而存在，它们之间为一对多组合关系。 |
| M:N关系         | 即多对多关系，用于为数据实体/功能模型建立M:N关系。 创建关系实体时，"关系类型"为"多对多"的关系实体均具有此关系能力。可为应用运行态提供：创建/删除关系实体实例，查询关系实体，获取关联实体/被关联实体清单等操作。 适用于为不同数据实体/功能模型建立多对多关系。例如，在汽车电器相关的零件开发中，工程师和零件开发为多对多关系。一个工程师可进行多个零件开发，一个零件可由多个工程师进行开发。                                                                                                                                                                                                                                                                                                   |
| M:xN关系        | 又称"单边不确定关系"，用于为一边不确定的数据实体/功能模型建立M:N关系，不确定的数据实体/功能模型（目标端）默认为基类抽象模型"BasicObject"。 创建关系实体时，"关系类型"为"单边不确定"的关系实体均具有此关系能力。可为应用运行态提供：创建/删除关系实体实例，查询关系实体，查询目标端对象等操作。 适用于基础数据与业务数据的关联。例如，标签数据与业务数据的关联。标签可给任何对象打标签，在创建实例时确定打标签的目标端对象。                                                                                                                                                                                                                                                                           |
| UsageLink使用关系 | 又称"多叉树关系"，适用于实现复杂的数据结构的存储，高效地查找数据，方便管理节点数据的场景。例如，部件和部件之间的使用和被使用关系。一辆汽车有四个轮子，汽车和轮胎都是部件，创建一个关系实体承载汽车和轮胎的使用关系，并在关系实体上定义一个"使用数量"属性用于标识一辆汽车使用了四个轮胎。                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| 自循环树形关系       | 又称"树形结构"，是数据对象之间存在着"一对多"的树形关系的数据结构，适用于数据间上下级的关联。例如，企业的组织结构、软件应用的结构、工作计划、项目管理等。 创建数据实体/关系实体时，通过勾选xDM-F内置的"树形结构"、"分类管理"、"文件夹管理"等能力实现。                                                                                                                                                                                                                                                                                                                                                                                                                 |
   
 #### 功能模型
xDM-F内置了多种功能，在创建数据实体/关系实体时，不仅具备从xDM-F继承的基本功能能力，还可根据实际业务需求勾选xDM-F提供的可选功能，每个功能会继承一个或者多个属性。每勾选一个功能，该实体会自动生成相应功能继承的一个或者多个属性。当xDM-F内置的功能无法满足您实际业务需求时，可通过功能模型进行定义。自定义的功能模型将作为自定义功能，在创建数据实体时，被数据实体通过勾选自定义功能的方式被继承和使用。
在已经确定的应用数据模型结构上，需要对具有相似功能、相似结构、相同属性的数据模型进行归一化处理，可通过功能模型定义这些相似功能、相似结构和相同属性。为这些数据模型提供了标准接口，降低参数的重复性，方便管理模型属性。
例如机械产品中，各部件间有一部分是通过销、铆钉、螺栓等常用标准件直接连接，有一部分是通过联轴器、减速器等部件间接连接。尽管这些常用的零部件大多都已经实现系列化或标准化，但这些零部件易损坏，产品在多次更换过程中需要反复操作和记录。您可以分别创建包含这些具有相似功能的零部件功能模型，然后在创建数据实体时，勾选对应功能模型即可继承该功能模型的属性和关系。
#### 约束与限制
- 任何实体均可与xDM-F元模型建立关系。
- 单个数据模型（数据实体、关系实体、功能模型）的属性数量上限为1664个。如果应用的数据库类型为MySQL，实体模型（"模型类型"为"实体模型"的数据实体、关系实体）的属性总长度不允许超过16000个字节。
- 创建数据模型时，该模型名称不能和XDM应用中的模型名称相同。
- 如果数据实体与抽象模型建立关系实体，该抽象模型的所有子实体模型均建立或继承了关系。
- 如果数据实体与存在扩展子模型的数据实体建立关系实体，该数据实体的所有扩展子模型均继承关系实体。
- 如果数据实体与功能模型建立关系实体，引用该功能模型的所有数据实体均建立了关系（功能模型不能直接作为父模型被其他实体模型继承，需先在功能列表中添加）。
- 对于"模型类型"为"实体模型"的单实体，支持为其"参考对象"类型属性自主配置组合关系；而对于M-V模型实体、"模型类型"为"抽象模型"的单实体以及关系实体，其"参考对象"类型属性只能定义为非组合关系。
 
