--- trunk/schema.sql 2005/05/13 21:17:58 1 +++ trunk/schema.sql 2005/05/24 14:02:05 47 @@ -1,38 +1,72 @@ create table users ( id serial, email text not null, - full_name text not null, - date timestamp default now(), + name text default '', + date timestamp not null default now(), + active boolean not null default true, + bounce_count int not null default 0, + ext_id text, primary key(id) ); +create unique index users_email_ind on users(email); + create table lists ( id serial, name text not null, - date timestamp default now(), + from_addr text not null default '', + email text not null, + bounce_limit int not null default 3, + date timestamp not null default now(), primary key(id) ); +create unique index lists_name_ind on lists(name); +create unique index lists_email_ind on lists(email); + create table user_list ( - user_id int not null references users(id), - list_id int not null references lists(id), - date timestamp default now(), + user_id int not null references users(id) on update cascade on delete cascade, + list_id int not null references lists(id) on update cascade on delete cascade, + date timestamp not null default now(), primary key (user_id, list_id) ); create table messages ( id serial, message text not null, - date timestamp default now(), + date timestamp not null default now(), primary key(id) ); -insert into users (email, full_name) values ('dpavlin@rot13.org', 'DbP'); -insert into users (email, full_name) values ('dpavlin@gmail.com', 'DbP'); -insert into users (email, full_name) values ('xxx_doesnt_exist_xxx@gmail.com', 'fake'); +create table queue ( + message_id int not null references messages(id) on update cascade on delete cascade, + list_id int not null references lists(id) on update cascade on delete cascade, + date timestamp not null default now(), + all_sent boolean default false, + primary key(message_id, list_id) +); + +create table sent ( + message_id int not null references messages(id) on update cascade on delete cascade, + user_id int not null references users(id) on update cascade on delete cascade, + hash text not null, + date timestamp not null default now(), + primary key(message_id, user_id) +); + +create unique index sent_hash_ind on sent(hash); + +create table received ( + id serial, + user_id int references users(id), + list_id int not null references lists(id), + message_id int references messages(id), + message text not null, + bounced boolean not null default false, + date timestamp not null default now(), + primary key (id) +); -insert into lists (name) values ('Just me'); -insert into lists (name) values ('All users'); +create index received_user_id_int on received(user_id); +create index received_list_id_int on received(list_id); -insert into user_list (user_id, list_id) select users.id,1 from users limit 1; -insert into user_list (user_id, list_id) select users.id,2 from users;