CREATE TABLE accounts ( id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, username TEXT NOT NULL, password TEXT -- NULL for locked accounts ); CREATE TABLE mailboxes ( id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, account_id INTEGER NOT NULL, FOREIGN KEY(account_id) REFERENCES accounts(id), name TEXT NOT NULL, UNIQUE(account_id, name) ); CREATE TABLE addresses ( address TEXT PRIMARY KEY NOT NULL, mailbox_id INTEGER NOT NULL, FOREIGN KEY(mailbox_id) REFERENCES mailboxes(id) ); CREATE TABLE mail ( id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, mailbox_id INTEGER NOT NULL, FOREIGN KEY(mailbox_id) REFERENCES mailboxes(id), data bytea );