在此方案中存储数据的最佳方法是什么:
ACCOUNT表存储id,username,password和包含多行的大量数据。示例:存储了包含日期和其他信息的多个会话。
我现在正在做的是为每个用户创建一个名为sessions_id#的新表,但必须有一种更有效的方法。
答案 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
)