給定一個用戶帳戶表是這樣的:
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