6

Diese Frage bezieht sich auf meine previous question. Basierend auf meinen Anforderungen habe ich einige Korrekturen an meiner Datenbank vorgenommen, aber ich bin mir immer noch nicht sicher, wie ich Untermenüs erstellen kann (die aus einer anderen Tabelle als der Haupttabelle erstellt werden müssen.Datenbank-Design für Website (CMS) Berücksichtigung und Vorschlag für Datenbank-Menüs

Ich halte Seiteninformationen In pg_Pages von wo ich meine Menüs erstellen kann Mein Problem ist, dass ich Untermenüs für "Über uns" und "Multimedia" leicht erstellen kann, da ich diese Seiten in der pg_Pages Tabelle speichern, aber ich muss Untermenüs für News erstellen von der News Category Tabelle und verknüpfen sie mit dem richtigen Seite Handler. & Ausgabe von magazine Tabelle.

Menüs Beispiel enter image description here

Beispieldaten

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

Ich möchte mein Design flexibel genug sein, Menüs aus verschiedenen Tabellen zu lesen. Welche Vorgehensweise/Änderungen sollte ich ergreifen/tun, um es ordnungsgemäß zu erledigen, statt eine separate Tabelle für alle Menüs zu erstellen, die sie mit den Seiten verknüpfen? Bitte schlagen Sie den besten Ansatz für dieses Szenario vor.

Ich möchte System sehr flexibel sein und lesen Sie Menüinformationen direkt aus der Datenbank statt statische Verbindungen erstellen und Abfragen basierend auf IssueID oder eine andere ID.

News Menu grundsätzlich Kategorien von Artikel, Weitere ich brauche eine Abfrage, die nur Kategorien unter News Menü, die Artikel für dieses spezielle Problem hat. Angenommen, die Ausgabe 102 hat keinen Artikel, der sich auf Kultur bezieht, dann sollte das Untermenü Kultur nicht unter Nachrichten erscheinen.

+0

ich würde nicht ein "Menü" in einem Datenmodell zu modellieren versuchen. Das einzige, was Sie jemals mit den Informationen tun werden, ist die Anzeige der Menüs. Sie werden Ihr Leben viel einfacher machen, wenn Sie einfach die Menüobjekte (zB mit json.net) serialisieren und speichern. –

+0

@Filip, Meinst du, ich sollte eine separate 'Menu' Tabelle mit Feldern wie, MenuID, MenuName, PageID usw. erstellen. Können Sie mir bitte ein Beispiel geben, wenn ich falsch liege – Learning

+1

Ich würde eine Datei in Ihrer Webanwendung machen menu.json und lege die gesamte Struktur dort ab. –

Antwort

3

Ihre Aufgabe besteht darin, Ihre Site-Instanzen auf Menüinstanzen zuzuordnen. Dies kann einfach mit View durchgeführt werden.

So zum Beispiel erstellen viewMenu mit den folgenden Spalten: MenuItemId, MenuItemName, MenuItemLevel, MenuItemParent, MenuItemUrl. Sie können diese Eigenschaften bearbeiten, um Ihr Menü in Ihrem Code zu erstellen. Sie können auch Daten aus Ihrer aktuellen Datenbankstruktur oder einer zukünftigen Struktur bearbeiten, indem Sie eine SQL-Abfrage erstellen, die die Anfangsansicht erstellt.

Jetzt können Sie Ergebnisse von drei verschiedenen Abfragen an Ihre drei Tabellen zusammenführen. In Zukunft können Sie Ihrer menüändernden Ansicht weitere Funktionen hinzufügen. Sie können Ihrem Menü auch neue Elemente hinzufügen, wenn Sie neue Tabellen zu Ihrer Datenbank hinzufügen.

4

Für ein generisches CMS sollte es eine separate Menustabelle und eine verwandte MenuItems-Tabelle geben.

Es kann verschiedene Arten von Menüs sein - top/Hauptmenü, inneres linkes Menü, Website Fußzeile etc ... sollten Sie sie in dem Menü Tabelle definieren.

als Sie eine rekursive MenuItems Tabelle haben soll, die eine unendliche Anzahl von Untermenüpunkte haben.

Menüs Tabelle sollte mindestens diese Spalten:

  • MenuID (int)
  • Beschreibung (nvarchar (...))
  • ErstellDat, CreatedBy, ModifyDate .... - Logging Spalten ...

MenuItems Tabelle sollte mindestens diese Spalten haben:

  • MenuItemID (int)
  • MenuID (int) - In welchem ​​Menü ???
  • Bildunterschrift (nvarchar (...))
  • LanguageID (int oder was auch immer)
  • ParentMenuItemID (int) für Rekursion
  • -Link (nvarchar (...)), was auch immer es ist die Verknüpfung (Seite, äußere Seite, nichts, ...). Am Ende muss alles auf einen Link herunterkommen ...
  • IsExternalLink (normalerweise für externe Links können Sie SEO Crawling deaktivieren und auf einem anderen Tab öffnen - also wissen, es könnte gut sein)
  • SortOrder (int) die Bestellung
  • ErstellDat, CreatedBy, ModifyDate .... - Logging Spalten ...

Hoffe, es hilft ...