2012-01-06 132 views
3

我正在構建一個用於編輯頁面內容的CMS。我希望儘可能靈活,因爲每個頁面將包含可變數量的部分。CMS的數據庫結構

目前,我有以下幾點:

Table page: 
=========== 
id 
name 

Table page_section: 
=================== 
id 
page_id 
name 
display_order 

Table page_section_sub: 
======================= 
id 
page_section_id 
name 
content 

我認爲這種結構將很好地工作,直到我意識到有很多重複的數據,它不是拉選擇特定的數據的理想方式。

例如,表page_section_sub中的name字段用於存儲表單的字段標籤。下面是一個示例數據:

Table page_section: 
=================== 

id page_id  name 
----------------------------------------- 
1 1   Slideshow Slide 1 
2 1   Slideshow Slide 2 
3 1   Slideshow Slide 3 
4 1   Middle Box 
5 1   Bottom Box 


Table page_section_sub: 
======================= 

id page_section_id name    content 
------------------------------------------------------ 
1 1    Heading    ... 
2 1    First Paragraph  ... 
3 1    Second Paragraph ... 
4 2    Heading    ... 
5 2    First Paragraph  ... 
6 2    Second Paragraph ... 
7 3    Heading    ... 
8 3    First Paragraph  ... 
9 3    Second Paragraph ... 
10 4    Image URL   ... 
11 5    Image URL   ... 

現在在前端我想顯示的3張幻燈片和其從上述表中的相關content。這證明是非常乏味的。

我知道我可以爲「標題」,「第一段」和「第二段」創建另一個帶有單獨列的表,但正如我所提到的,我需要這個系統是靈活的,並考慮到任意數量的列。

如何改進此數據庫的結構,以便我可以輕鬆地在前端輸出此數據並在後端修改它?

編輯:這是我想在我面前做到底:

<?php while($row = mysql_fetch_array($slideshow)) { ?> 
<div class="slideshow"> 
    <h1><?php echo $row['heading']; ?></h1> 
    <p class="first"><?php echo $row['first']; ?></p> 
    <p class="second"><?php echo $row['second']; ?></p> 
</div> 
<?php } ?> 

但當然這些實際$行的列不存在於表中。在後端的,但是我需要能夠在一頁上編輯上述11行。

+1

只是一個提示......你可能想看看非關係型數據庫,如mongo db,因爲它提供了極高的速度和靈活性......你的內容應該適合它。 – jribeiro 2012-01-06 12:08:23

回答

3

從你的描述看來,你可以用'頁面'和'內容'來做到這一點。我不知道你爲什麼有'section_sub'。

pages: 
    Page ID 
    Content ID 
    Content ID 
    Content ID 
    ... 

Content: 
    Content ID 
    Content Heading 
    Content Text 

每個內容行可以有

編輯「顯示標題」,「字體」等欄目:例如數據

Content: 
    ID0, Slide0 header, slide0 text 
    ID1, Slide1 header, slide1 text 
    ID2, Slide2 header, slide2 text 
    ID3, RepetitiveHeader0, RepetitiveText0 
    ID4, Repetitiveheader1, RepetitiveText1 
    ID5, RepetitiveHeader2, RepetitiveText2 

Pages: 
    Page0, Title0 
    Page1, Title1 
    Page2, Title2 

現在,林看着這一點 - 我有辦法在頂部(在Page表中有多個ContentID部分) - 更多的是NoSQL解決方案。您可以通過添加一個表完成在MySQL解決方案同樣的事情如下:

PageContent: 
    PageID 
    ContentID 
    PageOrder 

項建立一個特定的頁面會是這樣:

Page0, ContentID0, (order)1 
    Page0, ContentID3, (order)2 
    Page0, ContentID4, (order)3 
    Page1, ContentID1, (order)1 
    Page1, ContentID4, (order)2 
    Page1, ContentID5, (order)3 

要構建一個特定的頁面你選擇因爲PageId加入到PageContent中,然後加入到內容本身並由PageOrder排序。

+0

嗨ethrbunny,謝謝你的回覆。你能否提供一個如何運作的例子? (使用我的示例數據) – GSTAR 2012-01-06 12:24:30

+0

編輯顯示示例 – ethrbunny 2012-01-06 12:36:46

+0

乾杯,我會試試這個,讓你知道它是怎麼回事:) – GSTAR 2012-01-06 13:07:15