> I too am not familiar with the 2.0 schema yet.. And I do think that
> some of the stuff that has changed since 1.0 were totally useless.
> I'm going to get digging to see wether this is true or not.
> 
> I might also propose a whole new schema, but I do not expect it to
> be used by others than me.

Ok, I've looked it over again..

I see no use for the dbmail_physmessage table. It can as far as I can
see be merged into dbmail_messages with only very minor fixes.

Advantages:
-Simplified schema
-Decreased storage size for database
-Increased speed

Disadvantages:
-none?

I also found an index that was not needed due to duplicates in a
multi-column index. (dbmail_messageblks_physmessage_idx)

I added indexing on deleted_flag and internal_date. This is useful
for webmail atleast.

And why do we have answered_flag, deleted_flag and so on in
dbmail_mailboxes?

I also think we lack some more indexes, but I have to do some
research before I put it in the diff.

Please take a look and comment.

-=Dead2=-
--- create_tables.pgsql 2004-09-06 16:05:57.000000000 +0200
+++ create_tables.new.pgsql     2004-11-01 11:41:33.935758496 +0100
@@ -51,12 +51,6 @@
    mailbox_idnr INT8 DEFAULT nextval('dbmail_mailbox_idnr_seq'),
    owner_idnr INT8 REFERENCES dbmail_users(user_idnr) ON DELETE CASCADE,
    name VARCHAR(100) NOT NULL,
-   seen_flag INT2 DEFAULT '0' NOT NULL,
-   answered_flag INT2 DEFAULT '0' NOT NULL,
-   deleted_flag INT2 DEFAULT '0' NOT NULL,
-   flagged_flag INT2 DEFAULT '0' NOT NULL,
-   recent_flag INT2 DEFAULT '0' NOT NULL,
-   draft_flag INT2 DEFAULT '0' NOT NULL,
    no_inferiors INT2 DEFAULT '0' NOT NULL,
    no_select INT2 DEFAULT '0' NOT NULL,
    permission INT2 DEFAULT '2' NOT NULL,
@@ -90,22 +84,11 @@
     PRIMARY KEY (user_id, mailbox_id)
 );
 
-CREATE SEQUENCE dbmail_physmessage_id_seq;
-CREATE TABLE dbmail_physmessage (
-   id INT8 DEFAULT nextval('dbmail_physmessage_id_seq'),
-   messagesize INT8 DEFAULT '0' NOT NULL,   
-   rfcsize INT8 DEFAULT '0' NOT NULL,
-   internal_date TIMESTAMP WITHOUT TIME ZONE,
-   PRIMARY KEY(id)
-);
-
 CREATE SEQUENCE dbmail_message_idnr_seq;
 CREATE TABLE dbmail_messages (
    message_idnr INT8 DEFAULT nextval('dbmail_message_idnr_seq'),
    mailbox_idnr INT8 REFERENCES dbmail_mailboxes(mailbox_idnr)
        ON DELETE CASCADE,
-   physmessage_id INT8 REFERENCES dbmail_physmessage(id)
-       ON DELETE CASCADE,
    seen_flag INT2 DEFAULT '0' NOT NULL,
    answered_flag INT2 DEFAULT '0' NOT NULL,
    deleted_flag INT2 DEFAULT '0' NOT NULL,
@@ -114,31 +97,32 @@
    draft_flag INT2 DEFAULT '0' NOT NULL,
    unique_id varchar(70) NOT NULL,
    status INT2 DEFAULT '0' NOT NULL,
+   messagesize INT8 DEFAULT '0' NOT NULL,   
+   rfcsize INT8 DEFAULT '0' NOT NULL,
+   internal_date TIMESTAMP WITHOUT TIME ZONE,
    PRIMARY KEY (message_idnr)
 );
 CREATE INDEX dbmail_messages_mailbox_idx ON dbmail_messages(mailbox_idnr);
-CREATE INDEX dbmail_messages_physmessage_idx 
-       ON dbmail_messages(physmessage_id);
 CREATE INDEX dbmail_messages_seen_flag_idx ON dbmail_messages(seen_flag);
+CREATE INDEX dbmail_messages_deleted_flag_idx ON dbmail_messages(deleted_flag);
 CREATE INDEX dbmail_messages_unique_id_idx ON dbmail_messages(unique_id);
 CREATE INDEX dbmail_messages_status_idx ON dbmail_messages(status);
+CREATE INDEX dbmail_messages_internal_date_idx ON 
dbmail_messages(internal_date);
 CREATE INDEX dbmail_messages_status_notdeleted_idx 
        ON dbmail_messages(status) WHERE status < '2';
 
 CREATE SEQUENCE dbmail_messageblk_idnr_seq;
 CREATE TABLE dbmail_messageblks (
    messageblk_idnr INT8 DEFAULT nextval('dbmail_messageblk_idnr_seq'),
-   physmessage_id INT8 REFERENCES dbmail_physmessage(id)
+   message_id INT8 REFERENCES dbmail_messages(message_idnr)
        ON DELETE CASCADE,
    messageblk TEXT NOT NULL,
    blocksize INT8 DEFAULT '0' NOT NULL,
    is_header INT2 DEFAULT '0' NOT NULL,
    PRIMARY KEY (messageblk_idnr)
 );
-CREATE INDEX dbmail_messageblks_physmessage_idx 
-       ON dbmail_messageblks(physmessage_id);
-CREATE INDEX dbmail_messageblks_physmessage_is_header_idx 
-       ON dbmail_messageblks(physmessage_id, is_header);
+CREATE INDEX dbmail_messageblks_message_is_header_idx 
+       ON dbmail_messageblks(message_id, is_header);
 
 CREATE TABLE dbmail_auto_notifications (
    user_idnr INT8 REFERENCES dbmail_users(user_idnr) ON DELETE CASCADE,

Reply via email to