元數據(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
{
/// <summary>
/// 卡屬性基本信息實體
/// </summary>
public class DProfileInfo
{
/// <summary>
/// 其他信息
/// </summary>
public string OtherInfo
{
get
{
/*Begin Template
return mOtherInfo;
/*End Template Expansion{9D774738-E901-427A-86E7-EF2715768C17}*/
}
set
{
/*Begin Template Expansion{F6A2B75D-D01B-47B0-B65D-E62E43286DDC}*/
mOtherInfo = value;
/*End Template Expansion{F6A2B75D-D01B-47B0-B65D-E62E43286DDC}*/
}
}
/// <summary>
/// 卡屬性ID
/// </summary>
public int Profile_ID
{
get
{
/*Begin Template Expansion{2230D3C4-9766-4778-9203-5063D88B468C}*/
return mProfile_ID;
/*End Template Expansion{2230D3C4-9766-4778-9203-5063D88B468C}*/
}
set
{
/*Begin Template Expansion{0A1C9514-4DDB-4079-BE19-8DACE24CD454}*/
mProfile_ID = value;
/*End Template Expansion{0A1C9514-4DDB-4079-BE19-8DACE24CD454}*/
}
}
/// <summary>
/// 卡屬性名稱
/// </summary>
public string ProfileName
{
get
{
/*Begin Template Expansion{A43788B8-60A0-4882-9C51-A3DEE710FE78}*/
return mProfileName;
/*End Template Expansion{A43788B8-60A0-4882-9C51-A3DEE710FE78}*/
}
set
{
/*Begin Template Expansion{829EEF0A-A18A-4492-BE57-67C4C57ACFC3}*/
mProfileName = value;
/*End Template Expansion{829EEF0A-A18A-4492-BE57-67C4C57ACFC3}*/
}
}
private string mOtherInfo;
private int mProfile_ID;
private string mProfileName;
}
}
在開發和實際運行過程中經常發生這樣情況,經過一段時間用戶的實際情況變化了,可能想要在上面的實體中和其所對應的數據庫的Table中增加一個或多個Field。我們只能修改這個數據實體,在代碼開發完成後,進行這樣的修改是麻煩而且可能相當危險的。
設想一下現在的情況,由於種種原因需要更改上面的數據結構,我們打算增加兩個字段“Price”“CreateTime”,有什麼方法可以讓數據實體容易適應的進行這種變化呢
兩種方法:
1) 在表DProfile中增加一個描述所增加的Field的元數據字段名稱爲FieldsMetaInfo,數據類型可以定義成Text類型或image等二進制類型,在這個字段中定義一個XML格式的文檔描述和存儲所新增加的Field。
格式可能是這樣的
<Field Name="Price" FromBaseType="TRUE" Type="Text" DisplayName="價格" Required="TRUE" MaxLength="255" DefaultValue=”0” >123.45</Field>
<Field Name=" CreateTime " FromBaseType="TRUE" Type="DateTiem" DisplayName="價格" Required="TRUE" >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映射中所起的作用: