Einzelne Tabelle mit mehr Spalten im Vergleich zu mehreren Tabellen mit weniger Spalten

8

Was wäre ein besseres Datenbankdesign für eine Website in sozialen Netzwerken? Eine einzelne Tabelle mit mehr Spalten und weniger Zeilen oder mehrere Tabellen mit weniger Spalten, aber mehr Zeilen?

Beispiel: Ein Benutzer kann ein Update an seiner Pinnwand oder in einer Gruppe veröffentlichen.

Zwei Datenbankdesigns, an die ich denken kann, sind:

Design 1

UserPosts

  • Ich würde
  • Benutzeridentifikation
  • Post
  • Terminzeit

UserGroupPost :

  • Ich würde
  • Gruppen-ID
  • Benutzeridentifikation
  • Post
  • Terminzeit

Mögliches Problem : Möglicherweise sind Verknüpfungen erforderlich, was (in Zukunft) eine langsame Abfrage sein kann.

Design 2

Beiträge :

  • Ich würde
  • Benutzeridentifikation
  • Gruppen-ID
  • Post
  • datetime (wobei die Gruppen-ID null wäre, wenn Benutzer Beiträge an ihrer Pinnwand veröffentlichen)

Mögliches Problem : Das Durchlaufen eines großen Datensatzes kann (lange) dauern.


Wie kann ich eine bessere Leistung erzielen, wenn die Daten steigen? Gibt es einen anderen (besseren) Weg?

Siddharth Patel
quelle
Für mich wenige Spalten mehr Zeilen. Es ist einfach, einen Teil für Teil zu verwalten, als wenn ein großer Datensatz vorhanden ist. Wenn Ihr großes Anliegen die großen Datenmengen in der Zukunft sind, tun Sie dies nicht. SQL Server wurde mit dieser Art von Problem entwickelt. Alles, was Sie tun müssen, ist es richtig zu entwerfen. Ein großer Datensatz ist kein Problem, wenn Sie wissen, wie Sie Ihre Abfrage optimieren können
Vincent Dagpin
Die Verwendung des Ausführungsplans ist wirklich eine große Hilfe. Hier erfahren Sie, wo das Problem mit Ihrer Abfrage liegt. Ps: keine Schleife machen, wenn möglich Massenverarbeitung verwenden, diese Funktion ist bereits vorhanden, benutze sie
Vincent Dagpin

Antworten:

2

Meine Neigung hier wäre immer Designoption 1 oder zumindest in diese Richtung. Machen Sie sich nicht zu viele Gedanken darüber, dass Sie nicht versuchen müssen, Tabellen in zukünftigen Abfragen zu verknüpfen. Jede normalisierte Datenbank verwendet Verknüpfungen in nützlichen Abfragen, das sind nur relationale Datenbanken.

Warum müssen Sie außerdem unbedingt die Tabellen userPosts und userGroupPosts für Ihre Website verknüpfen? Würden sie nicht separat angezeigt? Der einzige Grund, warum Sie diesen Tabellen beitreten würden, ist möglicherweise die Suche nach Posts, aber es sollte nicht zu schwierig sein, dafür effiziente Abfragen zu schreiben. Abgesehen davon möchten Sie möglicherweise die Tabellen zu Analysezwecken abfragen, dies ist jedoch nicht der Hauptzweck dieser Datenbank.

Design 2 könnte zumindest bedeuten, dass Sie am Ende einen sehr belebten Tisch haben.

Die beste Option wäre jedoch, jeweils einen Prototyp zu erstellen und einige Tests durchzuführen. Erstellen Sie einen Prototyp jeder Entwurfsoption und führen Sie mit einigen Dummy-Daten ein Leistungsbenchmarking für verschiedene Vorgänge durch.

Ian_H
quelle
-3

Für mich ist Design 2 gemäß Ihrer aktuellen Struktur besser. Sie können eine Partitionierung implementieren, eine optimierte Abfrage und eine strukturierte Methode zum Erstellen einer Datenbank / Tabelle verkürzen die Ausführungszeit. In einigen Fällen funktioniert die Normalisierung jedoch besser, hängt jedoch vollständig von Ihrer Datenbankentwurfsarchitektur ab.

Dipa
quelle