给定一个用户帐户表是这样的:
CREATE TABLE tbl_accounts(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
email_addr VARCHAR(50) NOT NULL,
passkey BLOB /* AES KEY */
) ENGINE = InnoDB;
您将需要一个邮箱表中查找取决于用户帐户&他们正在检查的文件夹中的邮件(收件箱|发件箱)。我们分开这个表,保持数据库“正常化”。
CREATE TABLE tbl_email_box(
account_id INT, /* owner|sender of mail */
FOREIGN KEY (account_id) REFERENCES tbl_accounts(id) ON DELETE SET NULL,
email_id INT,
FOREIGN KEY (email_id) REFERENCES tbl_emails(id) ON DELETE SET NULL,
folder TINYINT(1), /* 0=inbox->account=owner; 1=outbox->account=sender; */
status TINYINT(1) DEFAULT 0, /* 0=unread, 1=read */
date TIMESTAMP /* because the query executes when they check/send mail, */
/* then record is created (date=sent|received date) */
) ENGINE = InnoDB;
该表将存储实际的电子邮件数据
CREATE TABLE tbl_emails(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
subject VARCHAR(100),
message BLOB,
created TIMESTAMP
) ENGINE = InnoDB;
希望这有助于。
我现在很倾向于这种方式,我主要关心的是用户群的潜在范围非常大,我正在成千上万的用户中谈论。我只是有点担心速度,以及这种方式的查询如何在可能非常高的负载上运行。 我到目前为止所做的其他每个站点都没有超过3个用户,所有管理员都是如此,这些问题对我来说都是新的。因此,第一次就把它做对了。 – 2012-04-16 13:59:23
你可以像做一个specs表一样做,但这只会减慢查询速度,因为简单的1或0比简单的1或0以及对消息的引用要小。它也会更快,因为不需要连接。 – Manuel 2012-04-16 14:07:43
我已经从每个人那里得到了一些很棒的建议,但是我想我会用这个,对于我来说这是迄今为止最简单也是最快的,尽管@ Pierre-Olivier的建议最终可能会在更长时间内变得更有用如果项目进一步发展,请继续运行。谢谢大家! – 2012-04-16 19:50:55