有读者问起元数据、数据元、数据字典、数据模型及元模型的区别,这些相似的概念估计会把不少人饶晕,这里我先给出一个图解的例子,然后再对这些概念作详细解读。
1、数据元就是”个人所得税记录表“中的字段,比如示例中的”个人所得税金额“,注意,数据元既有描述内容,也是数据的一部分,最小单元而已,图中蓝色虚框包含的部分就是数据元。
2、数据模型就是”个人所得税记录表“这张表本身,它是现实世界的一个抽象,见图中黑色虚框包含的部分。
3、”个人所得税金额“的元数据是对”个人所得税金额“这个字段的描述,见图中红色虚框部分,可见它不包含数据。
4、”个人所得税记录表“的元数据是对”个人所得税记录表“这张表的描述,见图中咖啡虚框部分。
5、数据字典就是针对表,字段等数据库对象元数据的一种重新组织形式,示意如上。
6、有了对数据模型的理解再看元模型,元模型是模型的模型,定义了描述某一模型的规范,具体来说就是组成模型的元素和元素之间的关系,如上图对实体和实体间的1:1依赖关系做了定义,对实体的属性做了name、field定义,元模型实例化就成了模型和元数据。
以下是我的辨析总结:
数据元:是通过定义、标识、表示以及允许值等一系列属性描述的数据单元,数据元的相关信息也是元数据的一部分,数据元=单元数据+基本描述(元数据子集)
元数据:关于数据的数据,但元数据无法涵盖理解数据元所要表示的数据所必需的所有信息,元数据=对于数据元有缺失的描述
数据字典:用户可以访问的一种信息集合的目录,是元数据的子集和应用,数据字典=元数据的一种特殊应用
数据模型:是数据特征的抽象,将若干具有相关性的数据元按一定的次序组成一个整体结构即为数据模型,数据模型=若干数据元组合
元模型:对模型的元素和元素之间关系的规范,元模型=数据模型和元数据的抽象规范
如果还想了解更多,可以继续往下读,共分为五个部分。
一、数据元
数据元(Data element)即数据元素,是通过定义、标识、表示以及允许值等一系列属性描述的数据单元,在一定语境下,构建一个语义正确、独立且无歧义的特定概念语义的信息单元。在特定的语义环境中,数据元被认为是不可再分的最小数据单元,将若干个具有相关性的数据元按一定次序组成的一个整体结构,即数据模型。
数据元由对象类、特性及表示三部分组成,比如“个人所得税金额”就是一个数据元,“个人”为对象词,“所得税”是该数据元的特性词,“金额”是该数据元的表示词,值域可以是一系列非负整数(带有货币单位)。
1、对象类:现实世界中的想法、抽象概念或事物的集合,有清楚的边界和含义,并且特性和其行为遵循同样的规则而能够加以标识;
2、特性:对象类的所有个体所共有的某种性质;
3、表示:值域、数据类型、计量单位(如果需要)、表示类(可选)组成。
数据元可以用来对各行业的数据进行规范化,对行业数据进行统一的名、型、值规范及分类,规划好行业数据元之后,可以为行业构建出统一、集成的、稳定的数据模型奠定基础,同时它也为数据交换奠定基础。
国标GB/T 18391对数据元做了详细规范,下图给出了数据元的结构模型,同实体关系类的数据模型相比,模型中的实体相当于数据元的对象类,而实体的属性相当于数据元中的特性和表示。
国标定义了数据元的基本属性,如下图所示:
下面是一个示例:
二、元数据
面对数据我们总是会有以下的一些疑问:
**这个数据怎么来的?**谁创建的,谁更新的,从哪个系统来的…
**这个数据是什么?**数据的语义环境是什么,数据怎么存储的,数据的定位是什么…
**这个数据怎么用?**数据的应用场景是什么,有没有和其他系统共享,如果丢失会造成什么影响…
**这个数据怎么管理?**谁负责这个数据,这个数据怎么评定质量,谁有权访问这个数据…
为了更好的解决这些问题,需要使用元数据来记录数据相关的信息。元数据是关于数据的组织、数据域及其关系的信息,简言之,元数据就是关于数据的数据。
元数据的作用是巨大的,其是网络信息资源描述的重要工具,可以用于网络信息资源管理的各个方面,包括信息资源的建立、发布、转换、使用、共享等,具体可以概括为五个方面:
1、描述作用:对信息对象的内容和位置进行描述,从而为信息对象的存取与利用奠定必要基础。
2、定位作用:由于网络信息资源没有具体的实体存在,因此,明确定位至关重要,元数据包含有关网络信息资源位置方面的信息,由此便可确定资源的位置所在,促进了网络环境中信息对象的发现和检索。
3、搜寻作用:元数据提供搜寻的基础,在著录的过程中,将信息对象中的重要信息抽出并加以组织,赋予语境,并建立关系,使搜索结果更加准确。
4、评估作用:元数据提供有关信息对象的名称、内容、年代、格式、制作者等基本属性,使用户无需浏览信息对象本身情况下,就能对信息对象具备基本了解和认识,参照有关标准即可对其价值进行必要的评估,作为存取利用的参考。
5、选择作用:根据元数据提供的描述信息、参考评估标准,结合使用环境,用户能够做出对信息对象取舍的决定,选择适合用户使用的资源。
下面举2个例子。
1、图书馆中的元数据
图书馆都会用一个叫作“图书目录”的文件夹来管理藏书,图书目录包含图书名称、编号、作者、主题、简介、摆放位置等信息,用来帮助图书管理员管理和快速查找图书。元数据就如同图书馆的图书目录一样,能够帮助数据管理员管理数据。
2、元数据好比字典
字典包含一个字的注音、含义、组词、举例等基本信息及其字体结构、相关引用、出处等。另外,我们可以通过拼音或偏旁部首查到这个字。所有这些信息都是对这个字的详细描述,它们就是描述这个字的元数据。
从前面的数据元的定义可以知道,数据元是数据的基本单元,它是先于元数据存在的,但一个组织的数据元必须具备元数据,数据元的相关信息也是元数据的一部分,这些元数据将便于用户理解和共享该组织中的数据。
但元数据不可能涵盖理解数据元所要表示的数据所必需的所有信息,例如,一个收集调查资料的组织将会有许多关于如何收集数据的信息,这些诸如样本和问卷设计等常常是理解数据所必要的,但是,样本和问卷设计并不是用来表示和描述数据元的元数据的一部分。
三、数据模型
数据模型(Data Model)是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。数据模型所描述的内容有三部分,分别是数据结构、数据操作和数据约束。
数据模型按不同的应用层次分成三种类型:分别是概念数据模型、逻辑数据模型、物理数据模型。
1、概念数据模型:确定好领域内的基础和关键的业务实体,统一各种业务术语和命名规范,同时也要给出实体间关系的描述,如下示例:
2、逻辑数据模型:逻辑模型所有实体属性均需添加,实体间关系要清晰描述,需要使用术语,遵循命名规范,逻辑模型不受底层实际存储数据库的约束,但我们需要定义好实体属性以及实体间的关系(这里主要是主外键关系、一对一或一对多或者多对多关系)、实体和属性的备注说明、属性的数据类型以及约束(空值、非空、主外键键约束),如下示例:
3、物理数据模型:是面向计算机物理表示的模型,描述了数据在储存介质上的组织结构,它不但与具体的DBMS 有关,而且还与操作系统和硬件有关,需要考虑查询性能要求和未来一段时间内的存储空间占用情况,一般根据逻辑模型,使用模型设计工具自动生成的,如下示例:
根据前面的数据元结构分析可以知道,数据模型从结构上看,跟数据元有映射关系,区别仅在于数据元是基本数据单元,是对现实世界更原子化的抽象,将若干具有相关性的数据元按一定的次序组成一个整体结构即为数据模型。
四、数据字典【3】
数据字典是用户可以访问的一种信息集合的目录,记录了有关数据库以及应用程序源数据的信息,Oracle数据库认为:数据字典是存放有关数据信息的地方,且具有描述数据的用途。数据字典不包含数据库实际数据的信息。数据字典的详细分类见下文,集成化数据字典具体部分见下:
1、数据项:数据项是不可再分的数据单位,数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系}。
2、数据结构:数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}}。
3、数据流:数据流是数据结构在系统内传输的路径。数据流描述={数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}。
4、数据存储:数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。数据存储描述={数据存储名,说明,编号,流入的数据流,流出的数据流,组成:{数据结构},数据量,存取方式}。
5、处理过程:数据字典中只需要描述处理过程的说明性信息。处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}。
数据字典是一个广泛概念,狭义上指用来存储信息的数据库本身,也可以是非技术的业务领域内数据元素的定义的集合。常见分类如下:
1、按存储介质
(a) 数据库介质:有Oracle、hive自带的元数据库,也有企业将自己公司的数据字典存储在数据库中,如MySQL、Oracle、Postgre等。
(b) 非数据库介质:主要是以excel文档为主:对于一个项目中的数据字典,项目组出于使用便捷、成本低以及数据量可控制等原因,使用excel存储相对应的数据元素,方便数据记录、查询、维护和再开发。
2、自动和手动
(a) 自动数据字典:一般是数据库管理软件自动管理或者大公司自研的大数据产品,与数据库的当前结构和定义一致。当数据库管理系统对数据库进行任何更改时,数据字典也会更新。
(b) 手动数据字典:一般与业务数据库分开维护,需要我们手动更新。被动数据字典可以作为单独的数据库进行维护,也可以是在独立的excel进行维护。
(c) 半自动特殊情况:在实施项目过程中,经常会出现脚本结合excel情况。主要有俩种模型,一种是在修改影响数据字典内容前,本着设计及开发原则,先修改数据字典,之后通过脚本或者人工方式再去修改对应数据库的内容;另一种情况是,每次修改完数据库内容后,通过脚本方式重新迭代生成新的数据字典。
3、使用用途
(a) 业务数据字典:记录数据在业务流转过程中的关键节点和背后业务意义,保存一个数据元在数据产生、流转、融合、销毁等全生命周期的业务信息规则,帮助数据稽查和商业分析等活动。
(b) 技术数据字典:记录一个数据元在物理数据库中信息,方便开发人员对某一数据元或数据表建设数据模型等加工处理操作。
(c) 其他用途数据字典:在某些项目中,由于特殊需求,针对数据操作和管理可能会有单独的数据字典来维护,项目中每多增加一个非自动化数据字典,提高了维护的人工成本和数据不一致的风险,因此需要项目团队谨慎对待。
可以看到,元数据有助于填充数据字典,将元数据存储于一个库中并使之条理化就可以形成一个数据字典。数据字典一般供技术团队使用,是引用不同数据属性的主要场所,包括约束、数据类型、默认值、长度、转换规则和业务定义。通过建立整个公司都能理解的连贯定义,所有团队都可以在同一层面上。这有助于保持数据的有效性并实现组织内的一致性。
五、元模型
元模型定义了描述某一模型的规范,具体来说就是组成模型的元素和元素之间的关系。元模型是相对于模型的概念,离开了模型元模型就没有了意义。下面来看一个类模型与其元模型的例子【4】:
可以将元模型想象成为某种形式语言,这样模型就是一篇用该语言描述的文章,其中元模型中的元素就是该语言的词汇,元素之间的关系就是该语言的语法,如下图:
每个模型都有一种元模型来解释它,虽然这种元模型可能不是显而易见的,而模型与元模型也是相对的,对于元元模型来说元模型就是它的模型。模型与元模型构成了一个无限循环,而越往上抽象层次越高。举一个例子,随着抽象层次的提升,动物、植物在某个抽象层次有一致的元模型(都是有细胞构成的),再往上提升在某一抽象层次,动物植物矿物都是一致了(都是由分子构成)。
ERWIn,Powerdesign都是建模工具,这些工具中的实体、关系、属性等构件就是元模型,基于这些元模型的编排我们就可以构建出自己需要的数据模型,如下图所示:
大家可以看到,元模型让模型的定义和连接变得更加规范和标准化,这对于数据的集成是非常关键的,现在有很多数据库产品,它们对元数据都有自己的定义和格式,如果这些元数据没有统一的标准,意味着两个产品无法进行沟通,比如BI产品要从ORACLE数据库取到所需要的的表,双方必须对接口的定义保持一致,要解决这些问题,就必须得用标准的语言描述双方元数据的结构和语义,并提供标准的元数据交换机制。CWM(公共仓库元模型)就是满足这些条件的一个规范。
OMG(对象管理组织)在2000年发布了CWM规范,旨在推动数据仓库、智能商务和知识管理方面元数据的共享和交换。CWM主要基于以下三个工业标准:
1、UML:统一建模语言,是OMG的一个建模标准;
2、MOF:元对象工具,是OMG关于元模型和元数据库的一个标准;
3、XMI:XML元数据交换,是OMG关于元数据交换的标准;
这三个标准是OMG元数据库体系结构的核心,UML定义了表示模型和元模型的语法和语义。MOF为构建模型和元模型提供了可扩展的框架,并提供了存取元数据的程序接口。而利用XMI则可以将元数据转换为标准的XML数据流或文件的格式,以便进行交换,这大大增强了CWM的通用性。
传统的元数据有四个层次,除了最底层外,每一层都对它的下一层进行描述。最底层是用户对象层(M0),包括用户要描述的信息,这些信息统称为数据。向上一层是模型层(M1),由描述信息的元数据组成,在这一层,元数据一般都组合成模型的形式。再向上一层是元模型层(M2),由定义M1层元数据格式和语义的描述信息组成,也就是元元数据,一般组合成元模型的形式。最高层是元元模型层(M3),它定义了元模型的结构和语义。
下面举个例子对这种四层结构进行说明【5】。
四层的内容解释如下:
1、数据层是学生记录(Record)的实例,即具体的某个学生;
2、 模型层描述学生这个记录类型的内容,它有一个名字(“Student”)和两个字段(Field),每个字段都有一个名字和类型,比如第一个字段的名字是“name“,字段类型是String;
3、元模型层对Record这种类型进行定义,在这一层, Record是元类metaClass的一个实例,一个Record拥有两个元属性metaAttribute,第一个name定义它的名字,是String类型,第二个fields定义它包含的字段集,字段集中的成员是Field类型。类似的,元类field应该也包含两个元属性:名字name和类型type;
4、元元模型层的结构是基本固定的,它将所有概念抽象为以下这些组件:元类meta-Class、元属性meta-Attribute和元关联meta-Association,并定义了元类之间的关系,主要包括:包含(Contains),继承(Generalizes),类型引用(IsOfType)和依赖(DependsOn);
综上所述,可以用下面这张表来描述OMG的上述规范和元数据四层结构的对应关系:
可以想像一下,如果A系统想访问B数据库的学生记录(Record),双方必需对实体、属性等的定义和格式要保持一致,这样A系统才能准确的告诉B我首先要查找实体学生记录,然后从这个实体获得属性 ,如果大家的模型不是基于同样定义的实体和属性构建出来的,那么肯定是无法进行连接的,这种抽象就叫CWM元模型,在MOF里叫作元元数据。
五个概念全部解读完了,希望对你有所帮助,当然我说得也不一定准确,比如有观点就认为数据元不包括数据本身。