--- 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;
