2011-01-02 10 views
1

Was ist Ihrer Meinung nach die beste Lösung für ein DB-Schema bei der Implementierung von z. Facebook-Verbindung?db design - Anmelden mit Drittanbieter-Diensten (Facebook Connect, etc.)

Wenn ich etwas Forschung tat, fand ich einen Vorschlag, die Login-Informationen (fb_id, ...) von den Kontoinformationen zu trennen (zB Vornamen, Nachname, ...): http://facebook-developer.net/2008/08/05/optimize-your-database-tables-for-facebook-connect/

Die vorgeschlagene Lösung dieses Artikels sind drei Tabellen

CREATE TABLE accounts (
id int (11) AUTO_INCREMENT NOT NULL,
name Text,
email Text,
PRIMÄRSCHLÜSSEL id (id)
);

CREATE TABLE users (
username VARCHAR (255) NOT NULL,
password Text,
account_id int (11) NOT NULL,
PRIMARY KEY username (username)
);

CREATE TABLE facebook_users (
fb_uid Bigint (11) Standard-NULL,
email_hash VARCHAR (64) Standard-NULL,
account_id int (11) NOT NULL,
PRIMARY KEY fb_uid (fb_uid)
);

Ich sehe kein klares Argument, warum man nicht einfach alle Daten in einer Tabelle speichern könnte.

Tabelle Benutzer ( user_id, Benutzername, E-Mail , fb_id, email_hash, ... )

Eine Person hat in der Regel nur ein Facebook-Konto, so dass ich sehe keine Probleme mit Redundanz. Irgendwelche Vorschläge?

Antwort

1

Für die Wirksamkeit ist die Verwendung einer einzigen Tabelle, um alle Daten zu erhalten, korrekt. Und Sie müssen nur eine neue Spalte hinzufügen, wenn Sie einen anderen Login-Dienst hinzufügen.

Die Leistung ist jedoch schlechter als getrennte Tabellen, wenn Sie wissen möchten, ob ein Benutzer über einen Facebook-Account verfügt. Die Leistung der Anmeldung ist ebenfalls schlechter, da die Datenbank den gesamten Datensatz für "email_hash" abrufen muss.

Die Liste der Benutzerdaten weist dagegen eine bessere Leistung beim Entwurf einer einzelnen Tabelle auf, da Sie für einen solchen Bericht keine Tabellen verknüpfen müssen.