2017-07-28 5 views
0

Okey, Kontext:Datenbankarchitektur - Haben 2 separate Spalten oder 1

Ich habe ein System, das erfordert, um eine monatliche, wöchentliche und tägliche Berichte zu tun.

Architektur A: 3 Tabellen: 1) Monatsberichte 2) Weekly berichtet 3) Tägliche Berichte

Architektur B: Tabelle 1: 1) Berichte: Mit extra Spalte report_type , mit Werten: "monatlich", "wöchentlich", "täglich".

Welcher wäre leistungsfähiger und warum?

+0

Warum möchten Sie Daten im Format von Berichten in der Datenbank speichern? – HappyCoding

+0

@HappyCoding, vielleicht ist es nur eine Logging-Tabelle zu wissen, wann die Berichte ausgeführt werden. Ich habe etwas ähnliches gemacht. –

+0

Bessere Frage, würden Sie uns bitte sagen, welche Spalten Sie planen, in diesen Tabellen oder Tabellen zu haben? – HappyCoding

Antwort

0

Die übliche Methode, die ich dazu verwende, ist die Verwendung von zwei Tabellen, ähnlich wie bei Ihrem B-Ansatz. Eine Tabelle wäre wie beschrieben mit Berichtsdaten und einer zusätzlichen Spalte, aber anstatt die Werte hart zu codieren, würde diese Spalte eine ID zu einer Referenztabelle enthalten. Die Referenztabelle würde dann die Namen dieser Werte enthalten. Diese Einrichtung ermöglicht es Ihnen, die Intervalle mit anderen Tabellen leicht zu referenzieren, wenn Sie das später benötigen, und macht auch Namensaktualisierungen sehr viel effizienter. Wenn Sie den Namen von "Monthly" in "Month" ändern, ist hier ein Update erforderlich, im Gegensatz zu n Updates, wenn Sie die Zeichenfolge in Ihrer Berichtstabelle gespeichert haben.

Beispielstruktur:

report_data | interval_id 
xxxx  | 1 

interval_id | name 
1   | Monthly 

Als Randbemerkung, würden Sie nur selten wollen Ihren ersten Ansatz, Ansatz A, darauf zurückzuführen, wie es begrenzt das Intervall Art der eingegebenen Daten zu ändern. Wenn Sie plötzlich die Hälfte Ihrer täglichen Einträge in wöchentliche Einträge ändern möchten, müssen Sie n/2 Löschungen und n/2 Einsätze durchführen, was ziemlich kostspielig ist, besonders wenn Sie mit der Einführung von Indizes beginnen. Im Allgemeinen sollten Tabellen Arten von Daten beschreiben (zB Berichte) und Spalten sollten diesen Typ beschreiben (zB Wie oft ein Bericht passiert)

+0

Wir planen nicht, die Daten des vergangenen Berichts zu ändern. Aber ja, ich denke auch an Plan B. – IvRRimUm

+0

Sie sollten immer versuchen, eine Datenbank nach Möglichkeit zu testen, da das spätere Ändern der Konfiguration extrem schwierig und zeitaufwändig sein kann. Aber wenn Sie das absolute Setup Ihrer Datenbank kennen, sollten Sie das natürlich verfeinern. – yanman1234