2009-07-16 54 views
2

很久以前,我接管了一個基於Web的內容管理系統的維護工作,該系統有一個相當聰明的數據庫表格。這稱爲什麼類型的數據庫表結構?

表結構是這樣的:

表:TPAGE(上PAGEID PK,版本,狀態)

PageID, PageTitle, Version, Status 
1,  Homepage, 1,  Archived 
1,  Homepage, 2,  Live 
1,  New Home, 3,  Draft 

表:tElements(上PAGEID PK,版本,的ElementName)

PageID, Version, ElementName, ElementValue (nText) 
1,  1,  IntroText, Hi, this is our first version. 
1,  2,  IntroText, This is the current version, 
1,  2,  MainBody, We sell sprockets. 
1,  3,  IntroText, Welcome text here 
1,  3,  MainBody, We sell sprockets and widgets. 

要獲得當前主頁的正文文本,您可以編寫如下查詢:

查詢:

SELECT ElementValue 
FROM tElements, tPage 
WHERE PageID  = 100 
     ElementName = 'MainBody' 
AND tPage.PageID = tElements.PageID 
AND tPage.Version = tElements.Version 
AND tPage.Status = 'Live' 

結果:

We sell sprockets. 

此表的結構之美,(至少對我來說)是,我並不需要添加新列當我想要添加新類型的數據時將它添加到表中。我剛剛創建了一個新的ElementName。但功能上它就像一個新的專欄。

我已經在其他一些項目中使用了這種安排,我需要一個可以隨着新特性/內容類型的添加而輕易改變的數據庫。例如,在我上面的CMS例子中,我們從IntroText和MainBody開始,但幾年後,我們結束了CoursePrice,ContactPerson,RelatedCourses和SetupFee,並且我發現這種組織數據的方式非常靈活。

我的問題是,這種類型的表結構稱爲什麼?我不確定我應該使用Google搜索關鍵詞獲取更多信息。

回答

3

它被稱爲「實體屬性值」或「EAV」。

+0

謝謝ChrisW,我剛剛查找了維基百科上的entity-attribute-value,它完全描述了它。 乾杯! – Brontojoris 2009-07-16 02:29:09