2017.1.2
--------------------------------------
一、主数据定义
主数据(MD, Master Data)指系统间共享数据(例如,客户、供应商、账户和组织部门相关数据)。与记录业务活动,波动较大的交易数据相比,主数据(也称基准数据)变化缓慢。在正规的关系数据模型中,交易记录(例如,订单行项)可通过关键字(例如,订单头或发票编号和产品代码)调出主数据。主数据必须存在并加以正确维护,才能保证交易系统的参照完整性。
从报告或维度建模角度看,主数据指基于其组织或配置指标的维度或层次,而不是实际情况或其自身测量结果。例如,收入、成本和利润是实际情况,而时间、地点、客户和供应商是维度。
以上定义来自百度百科的定义。详细内容参见http://baike.baidu.com/view/402047.htm?fr=aladdin,这里就不重复了。主数据管理在一个业务系统中,甚至在一个企业中,是一个很重要的内容。根据主数据管理实施的复杂程度,Jill Dyche, Evan Levy将主数据管理的成熟度分为6个层次,足见主数据管理是多么重要。
二、主数据的种类
上面是主数据的定义,那我们来考虑一个企业中或者说一个企业应用中,有哪些主数据。主数据的中类和业务系统的类型,企业分是属于的行业有关系。我们下面就罗列一些常见的。
1.,用户主数据
2,公司
3,组织结构
4,资产
5,物资(商品)
6,仓库、存放地点
7,职务,称呼
8,地址,邮编
9,供应商
10,客户
11,科目
12,银行账号
三、主数据的基本属性
上面罗列了很多常见的主数据。其实,每个业务系统都有自己特有的主数据,比如我们目前正在开发的水电气收费系统,就有住户,小区,楼房,计量点,价格类型等主数据。每种主数据都有自己独有的属性。
主数据的属性又分两大类:本身固有的属性,业务属性。固有属性是指该数据所代表的对象,无论出于什么业务场景任何公司下,该属性总是不变的,比如商品的名称,规格型号,人员姓名,性别和年龄等等。业务属性则与具体的业务场景有关系,可能会随着时间发生变化,比如人员所属的部门,商品的价格等等。
1,编码和名称
作为主数据来讲,有两个属性是大家都共有的:编码和名称(描述),比如用户主数据有用户编码和用户名称,组织机构有组织机构编码(而且是分级的)和组织机构名称。
有时候,名称还需要分简称,全称。因为在某些场合,显示全称是不合适的,太长了。比如在统计图表中,如果名字太长,屏幕空间又有限的话,可能显示不全或者太挤了。看下图:
对一些分级结构的主数据(典型的是组织机构),可能还需要另外一列:全路径名称,比如 重庆分公司下的财务部的全路径名称是 总公司\重庆分公司\财务部。因为,如果单单使用 “财务部”的话,没法区分是总部的财务部,还是重庆分公司的财务不,或者上海分公司的财务部。使用全路径名称则很好解决了这个问题。
2,创建和修改信息
除了上面的共有属性 编码和名称之外,还有几个比较重要的属性,创建时间,创建人,最后修改时间,最后修改人,这几列是系统的审计列。
3,启用状态信息
还有三列,是否启用,有效期始,和有效期至,这三列主要用于控制该主数据是否启用。很多系统只有是否启用这一列,通过手工修改这个开关,来启用或者关闭,如果使用有效期的话,就免去了手工修改开关的麻烦了,只要设置好有效期,时间一到,自动生效,当然编码的时候,要做这个判断才行。这种业务场景是,我可以预先吧数据准备好先不用,待条件成熟后,再启用之。举个我们做的项目,水电气收费项目,住户10月份安装了水表,待11月份正式入住后,再开始抄表和计费。业务部门就可以先把这些基础数据在系统中创建好,设置启用日期,到11月份后,系统就可以对这块表录入表读数,计算用量和费用了。
不同的主数据在不同的业务中被使用,比如登录系统是,会用到用户主数据,创建订单,可能会用到组织机构,供应商,物资,科目等主数据。业务对象,在数据库设计中,通过主数据编码来引用相应的主数据,比如订单中,会存放供应商的代码,表示该订单的来源是某个供应商,在具体实现中,1方面会输入供应商编码,或者使用编码选择窗口来选择一个供应商,程序根据选择的供应商编码,检查供应商是否存在,并在界面上显示供应商的其他信息,比如供应商名称,联系人等等。
四、主数据的变更
主数据的变更是指主数据属性的变更,包括固有属性和业务属性。
固有属性的变更比较简单,这种属性是数据所代表的的对象的本身客观的特性,一般不发生变化,发生变化,则说明以前的是错误的,需要修正过来。
主数据中除了有其所代表的实体所客观具有的一些固有属性外,还会有一些业务相关的信息。与固有属性相对比较稳定外,这些业务相关的信息则很有可能在企业经营过程中发生变化,比如某个用户所属的部门,某个客户的信用级别,资产所属的成本中心等等。而这些信息在交易时或者数据查询时还是很重要的信息。这些数据有时间相关性,并在数据查询,报表中需要追溯到当时的值,通俗讲,我查历史数据,希望能显示当时该列的值,而不是使用现在的值。比如我可以查询某个用户在去年属于那个部门,在部门的绩效考核成绩,虽然这个客户目前已经调离了该部门。
为了实现以上业务目标,有三种实现方式,
1,记录主数据的这些时间相关属性的变化历史。,在查询时,根据时间进行关联,找到当时的属性值。缺点是查询复杂。
2,将这些信息记录在交易数据中,应对这种情况。缺点是数据冗余了
3,保留原编码,创建一个新的编码。缺点是按照新编码查不出老编码的数据。这个问题可以通过建立新老编码的关系来解决,但是查询起来就麻烦了。
可以根据项目实际情况,选择适当的方式。要记住,没有完美的解决方案。
四、主数据与其他业务对象的关系
主数据是系统运行的基础上数据,他会被其他业务对象频繁引用。
首先主数据之间存在互相引用的关系,比如用户主数据就会引用组织机构和公司主数据,因为一个用户不是孤零零存在的,他必然会属于一个公司和部门(组织机构),必然有一个头衔(职务,称呼)。
除了主数据与主数据之间的关系外,主数据其实更多的是被业务数据所引用。业务数据有称为交易数据,是动态数据。前面的例子中,提到了采购订单引用供应商和科目,除此之外,还会引用用户(订单是谁录入的,业务属于谁),还会用到公司和组织机构(是哪个部门的订单)。
四。主数据管理的系统实现
主数据如此重要,一般系统中都存在一个主数据管理的模块(MDM)。主数据管理模块负责主数据的创建,修改,删除功能。一般有专人负责。更大一些的企业,可能会存在独立与各个应用系统的主数据管理系统(MDMS),有主数据管理系统统一管理本企业内部一些通用的基础数据,主数据的所有变更(包括增加就,删除,修改)均通过本系统进行,通常有一个审批过程和发布过程。审批i过程是为了符合企业内控制度,由发起者,若干主数据审核审批岗位进行审核,确保主数据变更事项是合法的,数据是正确的。发布过程就是,主数据变更通过审批后,传送到消费该主数据的所有系统中。发布过程会涉及到企业内部异构系统之间的数据交换,这是另外一个更大的课题。也是目前大多数企业面临的另一个严峻考验:系统整合,数据共享。