This is the general layout of the database, for Virtual Exim.

Domains table: This table contains the names of domains which are local
to the server. It also contains the defaults which are displayed to the
domain admin, when they choose to add a new user.

Users table: This contains information specific to the user.  It is used
during mail collection, delivery, and filtering.  The 'type' column
holds data on the type of account: local, alias, catch, piped


MySQL:
Database name:	vexim
    Table: domains
    CREATE DATABASE vexim;
	CREATE TABLE domains (
	  domain_id mediumint(8) unsigned NOT NULL auto_increment,
	  domain varchar(64) NOT NULL default '',
	  spamassassin bool NOT NULL default '0',
	  avscan bool NOT NULL default '0',
	  mailinglists bool NOT NULL default '0',
	  quotas int(10) unsigned NOT NULL default '0',
	  blocklists bool NOT NULL default '0',
	  uid smallint(5) unsigned NOT NULL default '65534',
	  gid smallint(5) unsigned NOT NULL default '65534',
	  complexpass bool NOT NULL default '0',
	  PRIMARY KEY  (domain_id),
	  UNIQUE KEY domain (domain),
	  KEY domain_id (domain_id),
	  KEY domains (domain)
	);

    Table: users
	CREATE TABLE users (
	  user_id int(10) unsigned NOT NULL auto_increment,
	  domain_id mediumint(8) unsigned NOT NULL,
	  localpart varchar(192) NOT NULL default '',
	  clear varchar(255) default NULL,
	  crypt varchar(48) default NULL,
	  uid smallint(5) unsigned NOT NULL default '0',
	  gid smallint(5) unsigned NOT NULL default '0',
	  smtp varchar(255) NOT NULL default '',
	  pop varchar(255) NOT NULL default '',
	  realname varchar(255) NOT NULL default '',
	  type enum('local','alias','catch', 'piped') NOT NULL default 'local',
	  admin bool NOT NULL default '0',
	  avscan bool NOT NULL default '0',
	  blocklist bool NOT NULL default '0',
	  complexpass bool NOT NULL default '0',
	  quota int(10) unsigned NOT NULL default '0',
	  sa_tag smallint(5) unsigned NOT NULL default '5',
	  sa_refuse smallint(5) unsigned NOT NULL default '10',
	  on_vacation bool NOT NULL default '0',
	  vacation varchar(255) default NULL,
	  flags varchar(16) default NULL,
	  tagline varchar(255) default NULL,
	  PRIMARY KEY  (user_id),
	  UNIQUE KEY username (localpart,domain_id),
	  KEY local (localpart)
	);


PostgreSQL:
Database name:	vexim
    Table: domains
    CREATE DATABASE vexim;
	CREATE TABLE domains (
	  domain_id INT PRIMARY KEY DEFAULT NEXTVAL('serial'),
	  domain varchar(64) UNIQUE NOT NULL,
	  spamassassin BOOLEAN NOT NULL default '0',
	  avscan BOOLEAN NOT NULL default '0',
	  mailinglists BOOLEAN NOT NULL default '0',
	  quotas int NOT NULL default '0' CHECK(quotas > -1),
	  blocklists BOOLEAN NOT NULL default '0',
	  uid int NOT NULL default '65534' CHECK(uid BETWEEN 1 AND 65535),
	  gid int NOT NULL default '65534' CHECK(uid BETWEEN 1 AND 65535),
	  complexpass BOOLEAN NOT NULL default '0'
	);

    Table: users
	CREATE TABLE users (
	  user_id INT PRIMARY KEY DEFAULT NEXTVAL('serial'),
	  domain_id int NOT NULL,
	  localpart varchar(192) NOT NULL default '',
	  clear varchar(255) default NULL,
	  crypt varchar(48) default NULL,
	  uid int NOT NULL default '65534' CHECK(uid BETWEEN 1 AND 65535),
	  gid int NOT NULL default '65534' CHECK(uid BETWEEN 1 AND 65535),
	  smtp varchar(255) NOT NULL default '',
	  pop varchar(255) NOT NULL default '',
	  realname varchar(255) NOT NULL default '',
	  type varchar(8) CHECK(type in ('local','alias','catch')) NOT NULL,
	  admin BOOLEAN NOT NULL default '0',
	  avscan BOOLEAN NOT NULL default '0',
	  blocklist BOOLEAN NOT NULL default '0',
	  complexpass BOOLEAN NOT NULL default '0',
	  quota int NOT NULL default '0',
	  sa_tag smallint NOT NULL default '5',
	  sa_refuse smallint NOT NULL default '10',
	  on_vacation BOOLEAN NOT NULL default '0',
	  vacation varchar(255) default NULL,
	  flags varchar(16) default NULL,
	  tagline varchar(255) default NULL
	);
