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?
mysql
database-design
Siddharth Patel
quelle
quelle
Antworten:
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.
quelle
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.
quelle