2012-02-29 11 views
0

私は簡単なPHP CMSシステムで作業していますが、Imはデータベース設計に固執しています。CMSデータベース設計、モジュール?

これは問題です。

私はテーブルという名前のページを持っている、それがpage_orderなど、私はPAGE_URLのように追加して、このページの情報ことができ、すべてのページを保持している。..

今...すべてのページには、いくつかのHTMLコンテンツを保持することができますいずれかのウェブページすることができます。しかし、それはブログやその他のものでもあります。ブログページは1つだけです。一方、ブログはブログの投稿とブログのカテゴリを持つことができます。

簡単に言えば、作成できるすべてのページを表すページテーブルがあります。 そして、すべてのページが異なる可能性があります、それはWebページ、ブログモジュール、ゲストブック、連絡先のページにすることができます。

すべてのページは目的が異なります。

これはどうやって設計するのでしょうか?

は今、これは現時点では明らかではないかもしれないが、ここに私の現在の設計は、Imはachiveしようとしているものを把握しやすくなりますので、多分です:

pages 
    page_id 
    page_name 
    page_url 
    ... 

webpages 
    webpage_id 
    page_id 
    webpage_content 
    webpage_date_created 
    ... 

blogs 
    blog_id 
    page_id 
    ... 

blog_posts 
    blog_post_id 
    blog_post_title 
    blog_post_content 
    ... 

blog_categories 
    blog_category_id 
    blog_category_name 
    blog_category_url 
    ... 

だから、私はページテーブルを持っていることはすべて保持していますそのページはウェブページ(単純な "静的"ウェブページ)でもブログでもかまいません。ブログには投稿、カテゴリなどがあります。

これで、idが属するページに来たらウェブページテンプレート、私は必要なものを取り出してコントローラとビューに戻します。

idがブログに属するページに来たら、最新の投稿を取り出してユーザーに表示します。

そして、後者はページを拡張して、ページがゲストブックか他のものになるようにしたいと思います。 基本的には、ページがページテーブルに格納されるデータベース設計が必要であり、各ページは異なる方法で提示される個別のモジュールにすることができます。

これは私が上記のように行く方法ですか?それとももっとうまくいくのだろうか? 私はここで何か間違っていますか?

答えて

1

ここに根本的に何か問題があるように思えません - あなたは、私が十分を奨励することはできませんオブジェクト指向の規則を、使用しています。わかっていると、すべてのページがPAGESテーブルにリストされ、PAGE_IDによって適切なカテゴリに接続されます。

このようにすると、サイトに存在するすべてのページを1つのリストとして保持するだけでなく、さまざまなページタイプを追加し続けることができます。

私が追加する唯一のものは、おそらくページテーブルの「タイプ」列です。これは、他の(ブログやウェブページ)テーブルでpage_idクエリを実行することで判断できますが、本当にスケーリングに興味があり、あなたのアプリケーションのメイクアップ(25%の静的ページなど)からすぐに。

このレイアウトでは、ブログとウェブページのテーブルにpage_idが含まれていれば、静的コンテンツを導入しながら動的ブログ機能を削除することもできます。

私によく見えます:)

0

「タイプ」列を使用して、ページに含まれるコンテンツの種類を指定します。次に、結合テーブルを使用してコンテンツをページに関連付けます。同様に:

pages 
->id [123] 
->type ['blog'] 

blogs 
->id [123] 
->title ['My Blog'] 

pages_blogs 
->id [123] 
->page_id [123] 
->blog_id [123]