Die MySQL-Struktur für ein Soziales Netzwerk
(Bevor jemand fragt, das ist rein nur für die Lernerfahrung, die nichts mehr)
Ich bin zu Experimentieren, indem Sie ein Soziales Netzwerk von Grund auf in PHP/MySQL, aber ich habe Schwierigkeiten, das denken von die optimale MySQL-Struktur für Sie, derzeit habe ich:
Dies ist eine Tabelle, die speichert alle user-info:
fname varchar (300),
sname varchar (300),
pass varchar (400),
email varchar (300),
gender varchar (300),
dob varchar (200),
uid varchar (300),
PRIMARY KEY (id)
Dieser wird erstellt, wenn ein Benutzer sich anmeldet, Ihre eigenen persönlichen Tisch:
id int(20) NOT NULL auto_increment,
uid varchar (300),
photo_url varchar (400),
pfid varchar (300),
phototime datetime,
video_url varchar (400),
vfid varchar (300),
videotime datetime,
status longtext,
sid varchar (300),
statustime datetime,
blog longtext,
bid varchar (300),
blogtime datetime,
about_bio longtext,
about_current_job longtext,
about_secondary_school longtext,
about_primary_school longtext,
about_college longtext,
about_university longtext,
about_workemail longtext,
about_homeemail longtext,
about_phonenumber longtext,
about_relationshipstatus longtext,
about_relationshipwith longtext,
PRIMARY KEY (id)
)";
Die sessions Tabelle, um zu verfolgen, ob jemand angemeldet ist oder nicht:
id int(20) NOT NULL auto_increment,
sid varchar(300),
uid varchar(300),
PRIMARY KEY (id)
Habe nicht bekommen, auf Beziehungen, aber ich dachte:
id int(20) NOT NULL auto_increment,
requestby varchar(200),
requestto varchar(200),
status varchar(200)
- Es gibt ein paar Probleme... Erstens, werden Sie nicht erstellen Sie eine neue Tabelle für jeden user, das wäre unüberschaubar. Stattdessen fügen Sie Datensätze in bestehende Tabellen, wenn ein neuer Benutzer Hinzugefügt. Als Nächstes müssen Sie straffen Ihre Datentypen. Speichern Sie nicht alles in varchars, und machen Sie nicht den varchar-mehr als das, was erforderlich ist, um den Wert zu speichern, wie
gender varchar (300)
,dob varchar (200)
usw... - Das ist nur meine Allgemeine feedback, aber haben Sie eine spezifische Frage?
- Guter Punkt. Es ist keine Frage hier :S
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, Sie definitiv sollte nicht eine Tabelle pro user. Ich denke, eine Datenbankstruktur mehr wie dies funktioniert wirklich gut:
photos
Tabelle, hält die Foto-Informationen UND erstellen Sie eine Zeile in deruserPhotos
Tabelle, die links die Nutzer zu dem Foto. Sie würde das gleiche tun für videos. Für status-updates, können Sie nur einfügen einer Zeile in der status-Tabelle, jedes mal, wenn der Benutzer updates zu seinem status. Könnte eine gute Idee zu haben, einDATETIME
Spalte in derstatus
Tisch, so dass Sie können halten Sie in Ordnung.userPhotos
oderuserVideos
Tabelle, die links, die Benutzer, um das Foto/video. Sie nicht brauchen, um erstellen Sie eine weitere Zeile in derphotos
odervideos
Tabellen, weil Sie auf ein Foto oder video, der bereits in die Tabelle.Nicht verwenden, große varchars für alle diese Felder. Freundschaft-status kann nur ein int, wenn Sie eine lookup-Tabelle (oder Liste in Ihrem code), der erläutert, jeder Wert.
Wenn die user-Tabelle hat eine auto-increment-ID, die Sie verwenden könnte, dass ID für foreign key-Beziehungen. Auch wenn Sie nicht wollen, UID integer ist, könnte man immer noch machen es zu einem GUID oder etwas anderes, das ist viel, viel kleiner als ein varchar.
Diese Tabellen nur ein Profil festlegen und vielleicht eine Beziehung, aber es ist so viel mehr. Selbst etwas so einfaches wie Twitter hat eine Tabelle, tweets, Listen, Konten, um in einer Liste die Benutzer, die Folgen einer Liste, direkte Nachrichten (obwohl diese könnten theoretisch in der gleichen Tabelle als Tweets), verbunden mit apps, Benutzer gesperrt und viel, viel mehr.
Also ich denke, zunächst einmal sollten Sie darüber nachdenken, was Ihr Soziales Netzwerk sein sollte, was es Aussehen sollte, welche Funktionen sollte es haben. Dann Streifen, die nur die nötigsten Funktionen. Dann Streifen Sie sich ein wenig mehr, denken Sie noch zu groß. 😉
Wenn Sie klar geworden, was Ihre minimale desirement sind, wird es wohl sehr viel klarer für Sie, was die Tabelle, die Sie brauchen würde.
Vergessen Sie nicht, hinzufügen von constraints und Indizes!
Beachten Sie, dass in der Praxis, Twitter, Facebook und andere große Netzwerke, die nicht mit MySQL, sondern um die Praxis, MySQL ist in Ordnung.