2010-12-03 9 views
3

Ich habe 3 Arten von Inhalten: Blogs, Pressemitteilungen und Erinnerungen. Alle von ihnen haben eine body und entered by Felder. Die Blogs und Pressemitteilungen haben ein title Feld, das der Erinnerung fehlt, und die Erinnerungen haben ein hour Feld, das Blogs und Pressemitteilungen fehlen. Dies ist, was es sieht aus wie in tabellarischer Form, so dass es einfach für Sie, um zu sehen ...Welche dieser 2 Datenbankeinstellungen sollte ich wählen?

    blog  press release  reminder 
--------------------------------------------------- 
entered by field yes  yes    yes 
body field   yes  yes    yes 
title field  yes  yes    -- 
time field   --   --     yes 

ich eine Haupttabelle content, die Links zu dem Fach Tabellen blogspress releasesreminders genannt bin zu schaffen. Ich dachte an 2 Strukturen

Erste Struktur ... Dies ist, wie das Content-Management-System ich es benutze, aber ich möchte nicht in ihren Schritten blind folgen, weil meine Bedürfnisse nicht die gleichen sind. Setzen Sie ALLE geteilten Felder in die Haupttabelle content. So die content Tabelle wird nicht nur type und type id zu den spezialisierten Tabellen verknüpfen, die content Tabelle wird auch die gemeinsamen Felder wie body und entered by haben. Die anderen 3 Tabellen haben nur ihre eindeutigen Felder.

content table B=blogs table PR=press releases table  R=reminders table 
------------------------------------------------------------------------------ 
id    id    id       id 
type=B/PR/R  title   title      hour 
type id 
body 
entered by 

Zweite Struktur. content Tabelle hat nur die type und type id notwendig, um zu den anderen 3 Tabellen zu verknüpfen, Dies bedeutet, dass die gemeinsamen Felder in den 3 Tabellen wiederholt werden.

content table B=blogs table PR=press releases table  R=reminders table 
------------------------------------------------------------------------------ 
id    id    id       id 
type=B/PR/R  entered by  entered by     entered by 
type id   body   body      body 
       title   title      hour 

Mit was soll ich gehen? Ich dachte, die erste Struktur ist besser, weil ich den ganzen Inhalt durchsuchen kann, ob es ein Blog oder eine Pressemitteilung oder eine Erinnerung für ein bestimmtes Wort ist. Ich habe noch in den anderen Tabellen sehen, ob ich die title gesucht werden soll, die nur auf blogs und press releases verfügbar ist, aber ...

Also, welche Struktur ist besser, und warum Sie so denken? Ich bin auch offen für andere Ideen oder Verbesserungen, die sich von diesen 2 unterscheiden.

+0

Welches Content Management System? Drupal durch Zufall? ;) – jblue

Antwort

2

Die erste ist das bessere Konstrukt, es ermöglicht einem Inhalt, einen bestimmten Satz von erforderlichen oder gemeinsamen Daten in der Inhaltstabelle und dann spezialisierte Daten in den untergeordneten Tabellen zu haben. Auf diese Weise können Sie in Zukunft weitere Typen mit anderen Anforderungen hinzufügen, die die gemeinsamen Elemente im Inhalt weiterhin verwenden, jedoch eindeutige Daten beibehalten.

Eine weitere wichtige Frage ist, ob diese Daten benötigt werden, zum Beispiel benötigen alle Erinnerungen eine Stunde und alle Blogs/Pressemitteilungen erfordern einen Titel. Wenn sie benötigt werden, stellen Sie sicher, dass diese untergeordneten Tabellen immer ausgefüllt werden.Wenn das nicht der Fall ist, solltest du vielleicht die Struktur abflachen (ja, Virginia solltest du manchmal denormalisieren).

Anstatt Ihre Inhaltstabelle wird einfach (nn = nicht null ist, n = nullable) id (nn), Typ-ID (nn), Typ (nn), Körper (nn), trat durch (nn), Titel (n), Stunde (n). Der Hauptgrund, den ich normalerweise dafür finde, ist, dass die verschiedenen Datenentitäten, die Sie erstellen, so ähnlich sind, dass sie im Laufe der Zeit zusammengeführt werden. Zum Beispiel erfordern Erinnerungen zu dieser Zeit keinen Titel, aber in Zukunft die Macht.

0

Ich denke, Sie sollten über die gemeinsamen Felder nachdenken. Müssen sie wirklich übereinstimmen?

Wenn sie übereinstimmen müssen, ist es einfacher, sie in eine einzige Tabelle zu setzen.

1

Ich würde eher ohne irgendeine Art von "Typ" Feld gehen, stattdessen vier Tabellen: Inhalt, Blogs, Pressemitteilungen und Erinnerungen. Inhalt hat die allgemeinen Felder eingegeben, Körper und Titel. Für jede der Blogs, Pressemitteilungen und Erinnerungen haben sie eine ID, die ein Primärschlüssel und auch ein Fremdschlüssel für eine Inhalts-ID ist. Dies ergibt eine 1: 1 "ist-a" -Beziehung. Erinnerung kann das zusätzliche Zeitfeld haben. Um festzustellen, welche Art von Eintrag eine Inhaltszeile ist, wählen Sie eine Verknüpfung aus.

Dies ist möglicherweise nicht die beste Leistung, aber es ist besser normalisiert.

3

Die erste Struktur ist ein klassischer Super-Typ-Subtyp Ansatz und empfohlen. Ich würde nur vorschlagen, Primärschlüssel mit voller Tabellenname wie ContentID zu benennen, um mögliche Verwirrung zu vermeiden.

alt text

+0

+1 Liebe dein Diagramm. Was hast du benutzt, um es zu zeichnen? – silow

+0

@silow, CA ERwin Datenmodellierer. –

Verwandte Themen