Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbankdesign für soziale Webanwendungen:Wie kann ich dieses Schema verbessern?

Insgesamt sehe ich keine großen Mängel in Ihrem aktuellen Setup oder Schema.

Was mich wundert, ist Ihre Aufteilung in 3 Benutzer*-Tabellen. Ich verstehe, was Ihre Absicht war (unterschiedliche benutzerbezogene Dinge getrennt zu haben), aber ich weiß nicht, ob ich genau dasselbe tun würde. Wenn Sie planen, nur Daten vom User anzuzeigen Tabelle auf der Website, das ist in Ordnung, da die anderen Informationen nicht mehrmals auf derselben Seite benötigt werden, aber wenn Benutzer ihren richtigen Namen verwenden und ihren richtigen Namen anzeigen müssen (wie John Doe anstelle von doe55), dann wird dies die Dinge verlangsamen wenn die Daten größer werden, da Sie können Joins erfordern. Mit den Preferences getrennt scheint wie eine persönliche Entscheidung. Ich habe kein Argument dafür oder dagegen.

Ihre Many-to-Many-Tabellen benötigen keinen zusätzlichen PK (z. B. PostFavoriteID ). Eine kombinierte primäre aus beiden PostID und UserID würde da PostFavoriteID reichen wird nirgendwo anders verwendet. Dies gilt für alle Join-Tabellen

Wie beim vorigen. Antwort, sehe ich keinen Vor- oder Nachteil. Ich darf setzen Sie beide seit dem NULL in dieselbe Tabelle (oder vielleicht besser -1 ) Werte würden mich nicht stören.

Ich würde sie mit einem Trigger in dieselbe Tabelle einfügen, um die Erhöhung des ViewCount zu verarbeiten Tabelle

Sie verwenden ein normalisiertes Schema, sodass jederzeit Ergänzungen vorgenommen werden können.

Ich kann es dir nicht sagen, habe es noch nicht gemacht, aber ich weiß, dass Solr sehr leistungsfähig und flexibel ist, also denke ich, dass es dir gut gehen sollte.

Es gibt viele Threads hier auf SO, in denen dies diskutiert wird. Mir persönlich gefällt ein Ersatzschlüssel besser (oder ein anderer eindeutiger Zahlenschlüssel, falls verfügbar), da er Abfragen einfacher und schneller macht, da ein int einfacher gesucht wird. Wenn Sie eine Änderung des Benutzernamens/der E-Mail-Adresse/was auch immer Ihre PK-ist, zulassen, sind massive Aktualisierungen erforderlich. Mit dem Ersatzschlüssel müssen Sie sich um nichts kümmern.

Was ich auch tun würde, ist Dinge wie created_at hinzuzufügen , last_accessed at (meiner Meinung nach am besten über Trigger oder Prozeduren), um einige Statistiken bereits verfügbar zu haben. Dies kann Ihnen wirklich wertvolle Statistiken liefern

Weitere Strategien zur Steigerung der Leistung wären Dinge wie Memcache, Zählercache, partitionierte Tabellen, ... Solche Dinge können diskutiert werden, wenn Sie wirklich von Benutzern überrannt werden, da es Dinge/Technologien/Techniken/... geben kann, die sehr spezifisch sind zu deinem Problem.