--- trunk/schema.sql	2005/05/13 21:17:58	1
+++ trunk/schema.sql	2005/05/15 16:32:36	17
@@ -2,37 +2,71 @@
 	id	serial,
 	email	text not null,
 	full_name text not null,
-	date	timestamp default now(),
+	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 table lists (
 	id	serial,
 	name	text not null,
-	date	timestamp default now(),
+	email	text not null,
+	bounce_limit int not null default 3,
+	date	timestamp not null default now(),
 	primary key(id)
 );
 
+create index lists_name_ind on lists(name);
+
 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)
 );
 
+create index messages_md5_ind on messages(md5);
+
+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,
+	date	timestamp not null default now(),
+	primary key(message_id, user_id)
+);
+
+create table received (
+	id serial,
+	user_id	int not null references users(id) on update cascade on delete cascade,
+	message	text not null,
+	bounced	boolean not null default false,
+	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');
 
-insert into lists (name) values ('Just me');
-insert into lists (name) values ('All users');
+insert into lists (name, email) values ('Just me','my-alter-ego@rot13.org');
+insert into lists (name, email) values ('All users','announce@example.com');
 
 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;
