The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
begin work;

create table languages (
  id serial not null,
  lang char(2) not null,
  language varchar(255) not null,
  abbrev char(5) not null,
  primary key (id)
);

insert into languages (lang, language, abbrev) values ('en','English','en');
insert into languages (lang, language, abbrev) values ('de','Deutsch','de');
insert into languages (lang, language, abbrev) values ('dk','Dansk','da');
insert into languages (lang, language, abbrev) values ('it','Italiano','it');
insert into languages (lang, language, abbrev) values ('fr','Français','fr');
insert into languages (lang, language, abbrev) values ('se','Svenska','sv');
insert into languages (lang, language, abbrev) values ('br','Portuguese Brazil','pt-BR');

create table users (
  id serial not null,
  username varchar(20) not null,
  password varchar(20) not null,
  email varchar(255) not null,
  lang int not null,
  primary key (id),
  foreign key (lang) references languages(id)
);

create table domains (
  id serial not null,
  domain varchar(255) not null,
  owner integer not null,
  primary key (id),
  foreign key (owner) references users (id)
);

create table soa (
  domain integer not null,
  auth_ns varchar(255) not null, -- also the nameserver where the updates should go to
  email varchar(255) not null,
  serial int not null,
  refresh int not null,
  retry int not null,
  expire int not null,
  default_ttl int not null,
  rec_lock int default '0' null,
  foreign key (domain) references domains (id)
);

-- rec_count is MAX count of each type
create table rec_count (
  domain integer not null,
  A_count integer not null,
  AAAA_count integer not null,
  CNAME_count integer not null,
  MX_count integer not null,
  NS_count integer not null,
  PTR_count integer not null,
  TXT_count integer not null,
  foreign key (domain) references domains (id)
);

create table records_A (
  id serial not null,
  domain integer not null,
  name varchar(255) not null,
  address varchar(16) not null,
  ttl int not null,
  rec_lock int default 0 null,
  primary key (id),
  foreign key (domain) references domains (id)
);

create table records_AAAA (
  id serial not null,
  domain integer not null,
  name varchar(255) not null,
  address varchar(39) not null,
  ttl int not null,
  rec_lock int default 0 null,
  primary key (id),
  foreign key (domain) references domains (id)
);

create table records_CNAME (
  id serial not null,
  domain integer not null,
  name varchar(255) not null,
  cname varchar(255) not null,
  ttl int not null,
  rec_lock int default 0 null,
  primary key (id),
  foreign key (domain) references domains (id)
);

create table records_MX (
  id serial not null,
  domain integer not null,
  name varchar(255) not null,
  exchanger varchar(255) not null,
  preference int not null,
  ttl int not null,
  rec_lock int default 0 null,
  primary key (id),
  foreign key (domain) references domains (id)
);

create table records_NS (
  id serial not null,
  domain integer not null,
  name varchar(255) not null,
  nsdname varchar(255) not null,
  ttl int not null,
  rec_lock int default 0 null,
  primary key (id),
  foreign key (domain) references domains (id)
);

create table records_PTR (
  id serial not null,
  domain integer not null,
  name varchar(255) not null,
  ptrdname varchar(255) not null,
  ttl int not null,
  rec_lock int default 0 null,
  primary key (id),
  foreign key (domain) references domains (id)
);

create table records_TXT (
  id serial not null,
  domain integer not null,
  name varchar(255) not null,
  txtdata varchar(255) not null,
  ttl int not null,
  rec_lock int default 0 null,
  primary key (id),
  foreign key (domain) references domains (id)
);

create table tickets (
  ticket_hash char(32) not null default '',
  ts int not null default '0',
  primary key (ticket_hash)
);

create table ticketsecrets (
  sec_version int default NULL,
  sec_data text NOT NULL
);

insert into ticketsecrets values (1,'dnszone');

commit work;