2011-07-26 114 views
1

很抱歉的愚蠢的頭銜,但我不知道該怎麼命名這個問題:)「內容類型」的數據庫字段

所以我試圖建立存儲數據在一個非常簡單的內容管理系統數據庫。

其中一種數據類型是「內容類型」(類似於WordPress的帖子/自定義帖子類型)。

內容類型可不管:一個頁面,一個新車上市,註釋,書產品等

每種內容類型都有其自己的領域。例如:

  • a page has:title,text。
  • 一個汽車房源有:製造商,型號,類型,年份,價格,...
  • 有:標題,作者,價格

等等...

這個想法是,這些內容類型是動態的(以及它們的字段)。它們將通過CMS的擴展添加。唯一的內置內容類型是頁面。

無論如何,我需要建議如何爲他們設置數據庫表。這應該從主CMS完成,而不是從使用CMS API編寫的擴展中完成。

我該如何設置表格/表格字段,以這種方式根據某些內容類型字段搜索結果會非常快?

WP爲這些字段使用不同的表格,並將它們存儲爲指向它們所連接的帖子的ID的行。但是,當你搜索多個字段時,這很慢...

+0

這是非關係型數據庫,如Couch和Mongo真正發光這些類型的任務。 –

回答

1

有很多不同的選項。

最常見的是存儲「鍵/值」對(我相信這是WP模式),與內容項目一起。該模型存在很多問題 - 布爾邏輯在快速搜索時變得難以理解,內容類型不容易在代碼中定義和驗證(例如,「所有CAR內容類型必須具有屬性引擎大小」)等。但是,它們確實很容易創建和更改內容類型。

另一種模式是根據內容類型生成數據庫表,通常以「基本」內容項作爲根。 Larman的書中討論瞭如何建模數據庫表(「應用UML和模式」)。這種設計會創建大量的內務代碼 - 創建和修改數據庫表是一件痛苦的事情,而且我不會推薦您在需要大量內容類型的解決方案中執行此操作。

我見過的最健壯的解決方案使用XML來存儲內容 - 通常在數據庫中。 XML允許您定義內容類型(使用DTD或模式)並驗證/查詢它。它不像SQL那樣快,但...

1

id建議Neville K的第一個解決方案,它需要一個帶有4個表格的結構。
contents,
content_properties_name,
content_properties_values並加入contents_properties (content_id , content_property_id , content_value_id)

其快速,搜索查詢有點複雜

相關問題