2009-07-29 1 views
0

Ich bin auf der Suche nach einer Richtung, wie ich meine Datenbank für Benutzer auf meiner Website am effizientesten strukturiere.PHP/MySQL Strukturieren einer Tabelle/Datenbank für die Profilnutzung

Im Wesentlichen Ich habe bereits eine "tblUsers" Datenbank, die grundlegenden biographischen Daten wie beinhaltet: tblUsers: USRID, First, Last, DOB, Telefonnummer usw.

jedoch ein Aspekt meiner Die Website enthält einen Bereich, in dem Benutzer mehrere Bilder von sich selbst hochladen können. Aus diesen Bildern können sie eines als ihr Standardprofilbild auswählen. Darüber hinaus können sie auch eines ihrer Fotos "beschneiden", um einen "Miniatur-Avatar" zu erstellen.

Also im Grunde bin ich auf der Suche nach etwas Hilfe bei der Strukturierung einer Tabelle (n) für die Verwendung von: 1) Mehrere Bilder, 2) Fähigkeit, Standard-Profilbild zu ändern, 3) Erstellen und Verwenden von Thumbnails/Avatare. Ich denke, dass dies etwas auf der "usrID" des Benutzers basieren wird, aber ich bin mir nicht sicher über die beste Möglichkeit, die Tabelle zu formatieren.

Schließlich wären auch Vorschläge zur Pflege der "Dateistruktur" aller Bilder, die in verschiedene Profile hochgeladen werden, hilfreich.

Jede Hilfe wäre großartig! Vielen Dank.

Antwort

0

würde ich eine Tabelle für Benutzer Bilder mit Flags für Avatare und Profil erstellen ... (Oder erstellen Sie mehrere Tabellen für Bilder und Avatare)

CREATE TABLE users_images (
    `id` int(10) unsigned auto_increment, 
    `userid` int(10) unsigned NOT NULL, 
    `name` varchar(255) NOT NULL, -- Filename for the image 
    `isavatar` tinyint(1) DEFAULT 0, 
    `isprofile` tinyint(1) DEFAULT 0, 
    PRIMARY KEY(id) 
) ENGINE=InnoDB CHARSET=utf8; 

Es hängt davon ab, wie viele Daten Sie in speichern Dort. Das oben Genannte ermöglicht, dass eine beliebige Anzahl von Bildern einem Benutzer gehört. Persönlich würde ich wahrscheinlich eine Ordnerstruktur erstellen, die eine Benutzer-ID als Basisverzeichnis verwendet;

- Uploads 
    -user1 
    -file1.jpg 
    -user2 
    -file1.jpg 
    -file2.jpg 
    -etc 

Dann brauchen Sie nicht einen Pfad in der db angeben, können Sie es dynamisch erstellen die Nutzer mit id (ich würde die Benutzerverzeichnisse als ganze Zahlen halten auch nicht mit ‚User‘, der gerade war zeigen).

Hoffe, dass hilft, lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen.

0

Haben Sie in Erwägung gezogen, mit Gravatar (wie stackoverflow) Benutzerbilder zu speichern? Es scheint eine coole Idee zu sein! Wenn Sie interessiert sind, besuchen Sie www.gravatar.com. Gravatar steht für weltweit anerkannte Avatare. Ich würde vorschlagen, Benutzerinformationen und Bilder in separaten Tabellen zu speichern. Die Wahl ist offensichtlich, da es eine Eins-zu-Viele-Beziehung zwischen Benutzer und Bildern gibt. Sie können jedoch eine Variation verwenden, um die Leistung zu verbessern und Joins zu vermeiden, wann immer Sie Benutzerdaten anzeigen müssen.

User(userID, loginName, loginPwd) 
UserImages(imageID, userID, image,type) 

Das Bild Attribut UserImages wird ein binäres Objekt sein, das ganze Bild oder die URL zu einer Stelle in dem Dateisystem zu speichern. Im zweiten Fall benötigen Sie Code, um das Bild zu holen (falls erforderlich).Das type-Attribut nimmt Werte ‚Primärprofil‘, ‚primäre Avatar‘, ‚andere Profile‘

Wenn die Anzahl der Aufnahmen sehr groß zu erwarten ist, können Sie das Design ändern könnte als

User(userID, loginName, loginPwd, profileImageID, profileImage) 
UserImages(imageID, userID, image,type) 
folgt

SQL zu bevölkern die profileImageID und Profilbild

Update User T1 
set (profileImageID, profileImage) = (Select imageID, image 
             from UserImages T2 
             where T1.userID = T2.userID 
             and T2.type='primary profile' 
            ) 

Es ist wie eine redundante Datenhaltung in der Benutzer-Tabelle aussehen. Diese Idee wird manchmal verwendet, um die Leistung zu verbessern, indem Joins vermieden werden. Außerdem müssen Sie sicherstellen, dass keine direkten Einfügungen in der Users-Tabelle für die profilImageID- und profileImage-Spalte auftreten können, indem Sie profileImageID als FK für die userImages-Tabelle festlegen. Dies würde weiterhin dazu führen, dass profileImage für bösartige Updates geöffnet wird. Sie benötigen speziellen Code, um damit umzugehen. Sie müssen all dies tun, wenn Sie erwarten, die nächste Internet-Sensation zu sein! Alles Gute und lass uns hoffen, dass du eins wirst!