2010-12-14 14 views
0

Quelle est la meilleure façon de stocker des données dans ce scénario:MySQL Stockage de données illimité au sein de la ligne

id

stocke table COMPTE, nom d'utilisateur, mot de passe et un grand ensemble de données comprenant plusieurs lignes. Exemple: plusieurs sessions stockées avec la date et d'autres informations. Ce que je fais maintenant est de créer une nouvelle table appelée sessions_id # pour chaque utilisateur, mais il doit y avoir un moyen plus efficace.

Répondre

2

Vous devez pouvoir créer une seule table de sessions avec une référence de clé étrangère dans la table de comptes. La table de session aurait des colonnes pour une identité, puis l'ID de l'utilisateur, puis les données relatives à la session (date, contexte, etc.)

0

Vous avez raison de penser qu'il existe un meilleur moyen. Ce dont vous avez besoin, c'est le "relationnel" dans les bases de données relationnelles.

Vous n'avez besoin que d'une table pour les sessions. Cette table contient des colonnes pour les données de session, probablement un identifiant unique (utilisez l'auto-incrémentation) et le plus important de tous, un champ où vous stockez l'ID de l'utilisateur auquel la session appartient. Ceci est appelé une relation un-à-plusieurs, car un utilisateur peut avoir plusieurs sessions, mais chaque session est couplée à un seul utilisateur. Si vous utilisez MyISAM comme moteur de base de données, vous devrez suivre les ID manuellement, mais si vous choisissez InnoDB comme moteur, vous pouvez utiliser des clés étrangères.

Vous pouvez en savoir plus sur les clés étrangères dans la documentation MySQL: http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

0

Au lieu de créer une nouvelle table pour les sessions de chaque utilisateur, créez une session de table qui organise des séances pour tous les utilisateurs à la fois. Cela satisfait un principe de conception de base de données appelé "normalisation" que vous devriez lire. Il est plus évolutif que de créer une nouvelle table chaque fois qu'un nouvel utilisateur s'inscrit.

CREATE TABLE SESSION (
    SessionID INT NOT NULL, 
    AccountID INT NOT NULL, 
    StartDate DATETIME, 
    PRIMARY KEY (SessionID), 
    CONSTRAINT Constr_SESSION_AccountID_fk 
     FOREIGN KEY SESSION_AccountID_fk REFERENCES ACCOUNT (AccountID) 
     ON DELETE RESTRICT ON UPDATE RESTRICT 
)