2009-07-16 107 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

相关问题