既然你打算使用關係數據庫管理系統,我會將這些數據存儲在一組規格化的表格中。第一刺來了(這是所有基於SQL Server 2005上,又難過,):
CREATE TABLE MyData
(
LineOfBusiness varchar(50) not null
,Year smallint not null
,Element varchar(50) not null
,Value float not null
,constraint PK_MyData
primary key (LineOfBusiness, Year, Element)
)
有兩個VARCHAR(50)在你的主鍵可被視爲效率低下,特別是 如果你最終有很多數據。 (a)直到你達到64k時,我纔會出汗,但在你點擊MB數據時,(b) ,現在要回去修改你的 架構還爲時過晚 - 所以不妨一試這是第一次。
這可能是高效的LineOfBusiness移動到一個查找表:
CREATE TABLE LineOfBusiness
(
LineOfBusinessId int not null
constraint PK_LineOfBusiness
primary key
,Description varchar(50) not null
)
如果「元素」可以將業務線之間的重複,它肯定是更有效 將其移動到一個查找表:
CREATE TABLE Element
(
ElementId int not null
constraint PK_Element
primary key
,Description varchar(50) not null
)
年是一個簡單的數值,1900年和2100(如果不是,那麼是吧?),所以 沒有必要正常化出來之間下降。年份查詢表是否有用取決於應用程序要求。 (也許有FirstYear和LastYear列LineOfBusiness有道理?)
基於以上兩個表,並在關係完整性的工作,你會最終
CREATE TABLE MyData
(
LineOfBusinessId int not null
constraint FK_MyData__LineOfBusiness
foreign key references LineOfBusiness (LineOfBusinessId)
,Year smallint not null
,ElementId int not null
constraint FK_MyData__Element
foreign key references Element (ElementId)
,Value float not null
,constraint PK_MyData
primary key (LineOfBusinessId, Year, ElementId)
)
這使得許多問題開關於如何加載數據並確保/保留 的有效性,當然查詢(可能是數據透視查詢)將需要被編寫爲 ,但是如果您的初始存儲設計 不足以滿足您的要求,那麼您可以旋轉並取而代之。
或使用數據透視表。他們在SQL服務器中並不難。 – 2010-01-07 20:32:32