6

この質問は、私のprevious questionを参照しています。私の要件に基づいて私は自分のデータベースにいくつか修正を加えましたが、サブメニュー(メインメニューpg_Pagesではなく別のテーブルから作成する必要があります)を作成する方法はまだわかりません。データベース駆動メニューのWebサイト(CMS)の検討と提案のためのデータベースデザイン

私はページ情報pg_Pages私は自分のメニューを作成することができます。私の問題は、これらのページをpg_Pagesテーブルに保存するので、「About Us」と「Multimedia」のサブメニューを簡単に作成できますが、Newsのサブメニューを作成する必要があります。 News Categoryテーブルから、適切なページハンドラにリンク。&問題magazineテーブルから。

メニュー例 enter image description here

サンプルデータ

pg_Pages Table 
PageID PageName LangID PagePositionNo PageURL  PageInheritance 
1 Home  1 10  Default.aspx 0 
2 About Us 1 20  Page.aspx 0 
3 PageOne  1 10  Page.aspx 2 
4 PageTwo  1 20  Page.aspx 2 
5 Multimedia 1 30  Page.aspx 0 
6 Video  1 10  Videos.aspx 5 
7 PhotoGallery 1 20  Gallery.aspx 5 
8 News  1 40  News.aspx 0 
9 Issues  1 50  #  0 
10 Publication 1 60  Page.aspx 0 
11 SpanishHome 2 10  Default.aspx 0 
12 SpanisAbout Us 2 20  Page.aspx 0 
------------------------------------------------------------------------------ 
Magazine 
MagazineID MagazineIssueCode LangID MagazineTitle MagazineLiveIssue(CurrentIssue) 
1  101   1 Mag Title  0 
2  102   1 Mag Title  1 
3  101   2 SpanisgMag Title 0 
4  102   2 Mag Title  1 
------------------------------------------------------------------------------ 

art_Article Table 
ArticleID ArticleTitle ArticleCatID MagazineID Language TYPE 
1  Article one 100  1  1 Artile 
2  Article two 100  1  1 Artile 
3  Article three 200  1  1 Artile 
4  Article four 300  1  1 Artile 
5  Article Five 100  2  1 Artile 
6  EditorMessage 300  2  1 EditorMessage 
7  Article seven 200  2  2 Somthing 
------------------------------------------------------------------------------ 

私は私のデザインが異なるテーブルからのメニューを読むのに十分な柔軟性を持つようにしたいです。すべてのメニューのための別のテーブルを作成するのではなく、それをページにリンクするために、どのようなアプローチ/変更を行うべきですか?このシナリオに最適な方法を提案してください。

IssueIDまたは他のIDに基づいて静的リンクを作成してクエリを実行するのではなく、システムに非常に柔軟性があり、データベースから直接メニュー情報を読みたいと思っています。

News Menu基本的に記事のカテゴリを表示します。さらに、特定の問題の記事があるNewsメニューのカテゴリのみを表示するクエリが必要です。問題102が、文化に関連する記事を持っていない場合、カルチャサブメニューはニュースの下に表示すべきではないとします。

+0

から

  • CREATEDATE、CREATEDBY、ModifyDate ......。あなたが情報で行うことは、メニューを表示することだけです。メニューオブジェクト(たとえばjson.netなど)をシリアル化して保存するだけで、あなたの人生を楽にしてくれるでしょう。 –

  • +0

    @Filip、MenuID、MenuName、PageIDなどのフィールドフィールドを持つ別の 'Menu'テーブルを作成する必要があることを意味しますか?私が間違っている場合、私に例を教えてください。 – Learning

    +1

    私はあなたのWebアプリケーションmenu.jsonを開き、そこに構造全体をダンプします。 –

    答えて

    3

    あなたのタスクは、メニューインスタンスにサイトインスタンスをマップすることです。これはViewで簡単に行うことができます。

    したがって、たとえば、次の列でviewMenuを作成:MenuItemIdMenuItemNameMenuItemLevelMenuItemParentMenuItemUrl。これらのプロパティを操作して、コード内にメニューを作成することができます。また、初期ビューを作成するSQLクエリを使用して、現在のデータベース構造または将来の構造からデータを操作することもできます。

    今のところ、3つの異なるクエリの結果を3つのテーブルに結合することができます。将来、メニューを変更するビューに機能を追加することができます。データベースに新しいテーブルを追加するときに、メニューに新しい項目を追加するだけでなく、

    4

    一般的なCMSの場合は、別のMenusテーブルと関連するMenuItemsテーブルが必要です。メニューの種類が存在することができ

    - トップ/メインメニュー左内側メニューサイトのフッターなど...あなたは、メニュー表でそれらを定義する必要があります。あなたはサブメニュー項目の無限の数を持つことができ、再帰的のMenuItemテーブルを持っている必要以上に

    メニュー表には、少なくともこれらの列を持っている必要があります。

    • menuID属性(INT)
    • 説明(データ型はnvarchar(...))
    • CREATEDATE、CREATEDBY、ModifyDate .... - ロギングの列

        :...

      のMenuItemテーブルには、少なくともこれらの列を持っている必要があります

    • MenuItemID(int)
    • MenuID(int) - どのメニューに関連していますか?
    • キャプション(データ型はnvarchar(...))
    • 言語ID(intまたは何でも)
    • ParentMenuItemID(int型)それがにリンクされているもの再帰
    • リンク(データ型はnvarchar(...))(のためのページ、外部サイト、何も、...)。最後にすべてがリンクに来る必要があります...
    • IsExternalLink(通常は外部リンクのためにSEOのクロールを無効にして別のタブで開く可能性があります)
    • SortOrder(int)

    はそれが役に立てば幸いログの列... ...私は、データモデルの "メニュー" をモデル化しようとしないだろう