2017-06-29 1 views
0

Ich habe diese Reddit wie Beziehung wie unten gezeigt. Grundidee ist, jeder Benutzer kann vielen Gemeinschaften beitreten und viele Blogs in jeder Gemeinschaft schreiben.Viele zu viele Beziehung mit zusätzlichen Informationen

Und es gibt Community-spezifische Informationen über diesen Benutzer, wie Reputation usw. Meine Frage ist, ist es eine gute Praxis, die zusätzlichen Informationen auf die assoziative Tabelle (d. H. UserCommunities) zu setzen? Warum warum nicht?

Danke!

enter image description here

+0

Warum hat Ihre Tabelle Blogs communities_id und UserCommunities_Communities_id? Wird der Wert nicht gleich sein? – k1133

+0

Ich habe das mehrmals getan, ohne Reue. Was glaubst du, würdest du gewinnen, wenn du Ansehen in eine separate Tabelle bringst? –

+0

@WalterMitty Nichts wirklich ... Ich bin ziemlich neu in der DB-Design, so war ich ein bisschen besorgt über mögliche Nachteile, die ich nicht von –

Antwort

0

Es gibt zwei grundlegende Kräfte für relationales Datenbank-Design betrachtet:

  1. reduzieren Redundanz und die Abhängigkeit von Daten. (Normalisierung)
  2. Das Abfrage-Muster der Anwendung. (Use Case/Scenarios)

Der Normalisierungsteil ist gut dokumentiert. Sie können wiki oder this für Details dazu verweisen. Sie sollten dies unbedingt berücksichtigen, wenn Sie Bedenken hinsichtlich des Datenwachstums haben oder wenn Sie beobachten, dass das Ändern eines Feldwerts mehrere Spaltenwerte ändern muss (Datenabhängigkeit).

Der zweite Teil ist mehr auf Ihre Anforderung subjektiv. Wenn Ihr Abfrage-Muster einige Daten über Abfragen hinweg benötigt und es nicht sehr kostspielig ist (platzweise), beide Daten in derselben Tabelle zu behalten, kann man die Normalisierungstechnik ignorieren/verbiegen.

Für Ihr Beispiel:

Wenn Benutzer Tabellendaten hatten spezifisch für Benutzer wie ihre Initialen, Adresse, Vorlieben, dann können Sie es als separate Tabelle haben.

in ähnlicher Weise für Benutzer Gemeinschaften Tabelle, wenn neben Ruf es Daten wie Anzahl der Beiträge hat, die Anzahl von Leuten etc etc. Es kann/sollte eine andere Tabelle

sein, warum nicht?

Sie können die Normalisierungsformulare für die Vorteile beziehen. :)

Aber wenn Ihr Use Case/Abfrage-Muster ist, dass "einen Benutzer gegeben und Blog, sagen Sie mir den Ruf des Benutzers" oder etwas Ähnliches und es gibt keine zusätzlichen Daten, können Sie die Reputation in der gleichen Tabelle.

Warum

Es wird Ihre Anfragen vereinfachen. Anstatt über Tabellen zu verbinden, wird es eine einfache Abfrage mit weniger Komplexität sein.

Verwandte Themen