MySQL在行中存储无限数据

时间:2010-12-14 12:28:15

标签: mysql

在此方案中存储数据的最佳方法是什么:

ACCOUNT表存储id,username,password和包含多行的大量数据。示例:存储了包含日期和其他信息的多个会话。

我现在正在做的是为每个用户创建一个名为sessions_id#的新表,但必须有一种更有效的方法。

3 个答案:

答案 0 :(得分:2)

您应该能够创建一个具有返回帐户表的外键引用的会话表。会话表将包含用于标识的列,然后是用户的ID,然后是与会话相关的数据(日期,上下文等)

答案 1 :(得分:0)

你认为有更好的方法是正确的。你需要的是"关系"在关系数据库中。

会话只需要一张桌子。此表包含会话数据的列,可能是唯一ID(使用自动增量),最重要的是,一个字段用于存储会话所属用户的ID。

这称为一对多关系,因为一个用户可以有多个会话,但每个会话只与一个用户配对。

如果您使用MyISAM作为数据库引擎,则需要手动跟踪ID,但如果选择InnoDB作为引擎,则可以使用外键。

您可以在MySQL文档中阅读有关外键的更多信息: http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

答案 2 :(得分:0)

不是为每个用户的会话创建一个新表,而是创建一个表SESSION,它一次为所有用户保存会话。这满足了您应该阅读的称为“规范化”的数据库设计原则。它比每次新用户注册时创建新表更具可扩展性。

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
)