2016-05-30 6 views
0

Diese Frage ist nur ein Szenario zu löschen und um einen Vorschlag bezüglich eines db-Design zu bitten.fügen Sie eine Kategorie ID Column, um Datensätze in allen Tabellen in einem db zu identifizieren

Ich habe vier Tabellen:

  1. Kategorie
  2. Benutzer
  3. Berichte
  4. Termine

Alle Aufzeichnungen in den Benutzern, Berichte und Zeitpläne auf die identifiziert werden müssen, Basis aus Kategorie.

Also meine Frage ist nach oben Szenario ist es gute Ansatz, Kategorie ID in allen Tabellen hinzufügen? Oder gibt es einen anderen Ansatz, um dies zu erreichen?

+0

Gibt es eine Beziehung zwischen anderen Tabellen wie Berichte und Zeitpläne? Wenn dies der Fall ist, fügen Sie einfach die Kategorie-Spalte in der Berichtstabelle hinzu. – Sami

Antwort

1

Dies hängt davon ab, wann normalisierte und denormalisierte Tabellen ausgewählt werden.

Die Normalisierung ist die Organisation von Spalten und Tabellen zum Entfernen von Datenredundanz, während die Denormalisierung den Prozess zum Optimieren der Leseleistung einer Datenbank durch Hinzufügen redundanter Daten oder Gruppieren von Daten darstellt.

Vorteil der Normalisierungs:

  1. Vermeiden Sie redundante Daten die Größe des DB reduzieren.
  2. Bessere Struktur und das Design Ihrer Datenbank

Nachteil der Normalisierungs:

  1. Sie

Vorteil der Denormalisierung viele Tabellen verknüpft:

  1. Bessere Leistung von Abfragen
  2. Reduzieren Sie die Anzahl der Tabellen

Nachteil der Denormalisierung:

  1. Datenduplizierung
  2. Irreführende manchmal

normalisieren, bis es weh tut, denormalize, bis es funktioniert

Dieser Artikel ist gut zu lesen. Maybe Normalizing Isn't Normal

+0

also ziehe ich vor, dass Sie vorschlagen, nicht zu normalisieren und setzen Sie die ID in allen Tabellen, um Joins zu vermeiden und Leistung zu erzielen? –

+0

@WasifTanveer Wenn Ihre Daten nicht zu groß sind, normalisieren Sie Ihre Tabellen und wenn Sie mit sehr großen Datenmengen zu tun haben, denormalisieren Sie Ihre Tabellen, um die Leistung zu verbessern. Für jetzt, Ihr derjenige, der bestimmen kann, was zu folgen ist :) – Sherlock

+0

Daten sind groß, und ich möchte, dass die Abfragen auch schnell sind. so De-normalize ist der Weg zu gehen –

0

Das hängt von Ihrer Anwendungslogik ab.

Alle Aufzeichnungen in den Benutzern, Berichte und Zeitpläne müssen auf der Basis aus der Kategorie

Kein Szenario identifiziert werden 1:
zunächst eine Kategorie definiert wird dann ein Benutzer definiert wird unter der Kategorie. Der Benutzer kann Berichte, Zeitpläne und ...
haben Es zeigt, dass User Tabelle einen obligatorischen Fremdschlüssel von Category hat und andere Tabellen einen obligatorischen Fremdschlüssel vom Benutzer haben.
Keine Notwendigkeit, die Kategorie FK zu anderen Tabellen hinzuzufügen.

Szenario No 2:
Ein Benutzer definiert ist, eine Kategorie definiert ist, kann ein Benutzer eine Kategorie zugeordnet wird (s) (wir user-category Tabelle haben)
Eine Kategorie kann Berichte haben.
Ein Benutzer in einer Kategorie kann einen Bericht unter der registrierten Kategorie ausführen.
Kategorien FK wird in anderen Tabellen benötigt.

So haben Sie Namen (Benutzer, Kategorie, Bericht ...) in Frage gestellt.
Sie haben nicht erwähnt Verben, die Funktionen Ihrer Anwendung zeigt.
Anwendungslogik mit Namen und Verben macht Datenmodellierung.

+0

Kategorien können als Felder/Domänen betrachtet werden, und Benutzer und Zeitpläne und Berichte haben separate Links mit Kategorien, die Benutzern zugewiesen oder nicht zugewiesen werden können, z. B. wird ein Zeitplan für eine Kategorie erstellt, aber keinem Benutzer zugewiesen. und dasselbe wie ein Bericht wird für eine Kategorie aber keinen Benutzer erzeugt. –