2016-03-22 10 views
0

Ich entwerfe eine Datenbank für soziale Medien, die der Struktur von Facebook ähnlich ist. Ich benutze MySQL. Das Hauptziel unserer Datenbank ist die Leistung, sie muss eine große Anzahl von Anfragen bearbeiten.Datenbankentwurf für soziales Netzwerk

Ich habe eine Liste von Benutzern, Freunden, Beiträge an der Wand, Kommentare und Likes.

Q1- für Benutzer, ich habe mehrere Arten von Benutzern, ich habe normale Benutzer, Supervisor und Admin. Für diese Tabelle denke ich daran, eine übergeordnete Benutzertabelle zu definieren und dann die Information zu übernehmen, aber gleichzeitig sind die Felder gleich. Beispiel:

user 
============= 
id 
username 
password 
email 
isAtcive 
country 

noraml_user 
=============== 
name 
.. 
.. 
user_id 

supervisor 
============== 
name 
.. 
.. 
user_id 

admin 
======= 
name 
.. 
.. 
user_id 

als ich diese Methode wegen der Leistung, so statt für einzelne Benutzer suchen Benutzertyp in Verwendung (eine Million Nutzer als Beispiel), Ich suche (300K Benutzer in Tabelle Supervisor). Habe ich recht?

Q2- Ich habe gerne für die Beiträge und Kommentare. hier ist mein Design

posts 
========== 
id 
content 

comments 
========== 
id 
content 
post_id 

posts_likes 
========== 
id 
post_id 
user_id 

comment_likes 
========== 
id 
comment_id 
user_id 

Denken Sie, dies richtig ist, oder ich einen Tisch nur für Gleichen machen wie die folgenden

likes 
========= 
id 
post_id(nullable) 
comment_id(nullable) 
user_id 

was ist beste Ansatz?

Q3- Können Sie mir einige Tipps geben, die Sie beim Entwerfen der Datenbank für soziale Netzwerke berücksichtigen sollten?

+0

Ich würde die Unterschiede der Benutzer (admin etc.) in die Tabelle users setzen und nur eine zusätzliche Spalte machen. 0 = normal, 1 = super usw. – Alexander

+0

Wenn Sie mit Berechtigungen gehen, würde ich vorschlagen, eine weitere Tabelle user_groups hinzufügen und jedem Benutzer eine group_id geben. Lesen Sie auch, wie Sie mit Bitmasken arbeiten, um die Effizienz zu erhöhen, da es wirklich keine Notwendigkeit gibt, eine Supervisor-Spalte über eine Bitmaske zu haben, die diesen Wert plus 31 andere enthalten kann. – Xorifelse

Antwort

1

Q1 :) Danke: Sie sollten nicht getrennte Tabellen für die verschiedenen Benutzertypen erstellen. In der Tat sollten Sie eine Benutzerrollenspalte in einer gemeinsamen Benutzertabelle haben. Diese Rolle würde dann definieren, was der Benutzer tun kann. Der ganze Sinn von Indizes besteht darin, Teilmengen einer Tabelle effizient zu finden.

Q2: Wieder werden Sie wahrscheinlich feststellen, dass Sie Inhalte und Likes (oder vielleicht sogar "Reaktionen") haben. Wenn es keinen speziellen Grund gibt, Beiträge als besonders wichtig zu betrachten, sind sie wirklich nur Inhalte, die keinen Elternteil haben.

Q3: Ja, das ist eine breite Frage für eine Website wie diese.

Verwandte Themen