2012-01-06 21 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_subnameフィールドは、フォームのフィールドラベルを格納するためのものです。ここではサンプルデータは、次のとおりです。

フロントエンドに今
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その関連を表示したいです。これは非常に退屈であることが証明されています。

"見出し"、 "最初の段落"、 "2番目の段落"という別の列を持つ別のテーブルを作成することができますが、私はこのシステムを柔軟にし、任意の数の列を考慮に入れる必要があります。

このデータベースの構造を改善して、このデータをフロントエンドに簡単に出力し、バックエンドでも変更できるようにするにはどうすればよいですか?

EDIT:これは私が私のフロントエンドで何をしたいです:

<?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 } ?> 

しかし、もちろん、それらの実際の$行の列がテーブルに存在しません。..バックエンドではしかし、私がする必要があります1ページで上記の11行を編集できるようにする。

+1

ちょっとしたヒント... mongo dbのような非リレーショナルデータベースを見てみると、極端なスピードと柔軟性が得られます...あなたのコンテンツはそれに適しているはずです。 – jribeiro

答えて

3

あなたの説明から、あなたは「ページ」と「コンテンツ」だけでそれを行うことができるようです。なぜあなたは 'section_sub'を持っているのか分かりません。

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

Content: 
    Content ID 
    Content Heading 
    Content Text 

各コンテンツの行は "ショーの見出し"、 "フォント" の欄など

EDITかもしれない:今、Imはこれを見ていることを例データ

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 

を - 私が持っている道を(ページテーブル内の複数のContentIDセクションを持つ)上部は、NoSQLの解決策です。あなたは次のようにテーブルを追加することによって、MySQLの溶液中で同じことを達成することができます:あなたが選択したい特定のページを構築するには

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

:特定のページを構築するための

PageContent: 
    PageID 
    ContentID 
    PageOrder 

エントリは次のようになりますPageContentに結合されたPageIdが次にContentに結合され、PageOrderによって順序付けされました。

+0

こんにちはethrbunny、あなたの返信ありがとうございます。これがどのように機能するかの例を教えてください。 (私のサンプルデータを使用して) – GSTAR

+0

例を表示するように編集 – ethrbunny

+0

乾杯、私はこれを試して、それがどうなるか知ってみましょう:) – GSTAR

関連する問題