元数据(metadata)在企业应用开发中的作用
元数据 (metadata) 介绍:
Metadata( 元数据 ) ,它是 “ 关于数据的数据 ”(data about data), 近年来在软件设计中 Metadata 有广泛的应用。
在编程中,元数据不是被处理的对象,而是通过改变元数据的一些 “ 值 ” 来改变程序的运行的数据。
可以 “ 解释 ” 程序的运行时,不同的元数据值可以让同一段程序有不同的运行结果。
元数据 (metadata) 应用:
在以前的工作中,经常遇到这样的问题,
SqlServer 数据库中一个表如下:
CREATE TABLE [dbo].[DProfile] (
[Profile_ID] [int] IDENTITY (1, 1) NOT NULL ,
[ProfileName] [varchar] (250) COLLATE Chinese_PRC_CI_AS NULL ,
[OtherInfo] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
[ValidateStatus] [int] NULL
) ON [PRIMARY]
为其定义一个实体类:
namespace E_Commerce.Data
{
///
1<summary>
2
3/// 卡属性基本信息实体
4
5/// </summary>
public class DProfileInfo
{
///
1<summary>
2
3/// 其他信息
4
5/// </summary>
public string OtherInfo
{
get
{
/*Begin Template
return mOtherInfo;
/End Template Expansion{9D774738-E901 -427A -86E7-EF 2715768C 17}/
}
set
{
/Begin Template Expansion{F 6A 2B75D-D01B-47B0-B65D-E62E43286DDC}/
mOtherInfo = value;
/End Template Expansion{F 6A 2B75D-D01B-47B0-B65D-E62E43286DDC}/
}
}
///
1<summary>
2
3/// 卡属性 ID
4
5/// </summary>
public int Profile_ID
{
get
{
/Begin Template Expansion{2230D 3C 4-9766-4778-9203-5063D88B 468C }/
return mProfile_ID;
/End Template Expansion{2230D 3C 4-9766-4778-9203-5063D88B 468C }/
}
set
{
/Begin Template Expansion{ 0A 1C 9514-4DDB-4079-BE19-8DACE24CD454}/
mProfile_ID = value;
/End Template Expansion{ 0A 1C 9514-4DDB-4079-BE19-8DACE24CD454}/
}
}
///
1<summary>
2
3/// 卡属性名称
4
5/// </summary>
public string ProfileName
{
get
{
/Begin Template Expansion{A43788B8 -60A 0-4882 -9C 51-A3DEE710FE78}/
return mProfileName;
/End Template Expansion{A43788B8 -60A 0-4882 -9C 51-A3DEE710FE78}/
}
set
{
/Begin Template Expansion{829EEF 0A -A 18A -4492-BE57 -67C 4C 57ACFC3}/
mProfileName = value;
/End Template Expansion{829EEF 0A -A 18A -4492-BE57 -67C 4C 57ACFC3}/
}
}
private string mOtherInfo;
private int mProfile_ID;
private string mProfileName;
}
}
在开发和实际运行过程中经常发生这样情况,经过一段时间用户的实际情况变化了,可能想要在上面的实体中和其所对应的数据库的 Table 中增加一个或多个 Field 。我们只能修改这个数据实体,在代码开发完成后,进行这样的修改是麻烦而且可能相当危险的。
设想一下现在的情况,由于种种原因需要更改上面的数据结构,我们打算增加两个字段“ Price ”“ CreateTime ”,有什么方法可以让数据实体容易适应的进行这种变化呢
两种方法:
1) 在表 DProfile 中增加一个描述所增加的 Field 的元数据字段名称为 FieldsMetaInfo ,数据类型可以定义成 Text 类型或 image 等二进制类型,在这个字段中定义一个 XML 格式的文档描述和存储所新增加的 Field 。
格式可能是这样的
1<field 0”="" defaultvalue="”" displayname=" 价格 " frombasetype="TRUE" maxlength="255" name="Price" required="TRUE" type="Text">123.45</field>
1<field displayname=" 价格 " frombasetype="TRUE" name=" CreateTime " required="TRUE" type="DateTiem"> 2004-01-01 </field>
这个新添加的字段记录未来可能增加的 field 的数据类型信息和数据信息等其它信息
2) 增加两个表
在表中存储新增加的 Field 信息
表 ProfileFields
ID int
FieldName nvarchar(50)
FieldType nvarchar(50)
表 ProfileFieldsValue
ID int
ProfileID int
ProfileValue varchar(50)
ProfileFields 表存储增加的 Field 名称类型等信息
表 ProfileFieldsValue 表存储对应 Filed 的值
在数据实体类中增加一个自定义类型的属性返回存储在源数据结构中的数据
可以是 Hashtable 类型,也可以是自定义的其它集合类型
Private Hashtable metaFieldsList;
自定义结构用来方便的存储和更新
元数据 (metadata) 数据存储结构:
元数据有许多存储格式,其中最多使用的是 xml 格式。
xml 最适合用来存储元数据,易与使用和解析。
元数据 (metadata) 在 o-r 映射中所起的作用: