create table `product` (
  `id` bigint(20) not null auto_increment,
  primary key(`id`),
  `brand` varchar(64) not null,
  `name` varchar(64) not null,
  `invoice` varchar(256) not null,
  `serial` varchar(64) not null,
  unique `uniq_serial`(`serial`),
  `createtime` bigint(20) not null,
  `discardtime` bigint(20) default null
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `product_info` (
  `id` bigint(20) not null auto_increment,
  primary key(`id`),
  `product` bigint(20) not null,
  key `key_product`(`product`),
  constraint `pi_f_product`
    foreign key(`product`) references `product`(`id`),
  `field` varchar(64) not null,
  unique `uniq_product_field`(`product`, `field`),
  `data` varchar(64) not null default ''
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `product_tag` (
  `id` bigint(20) not null auto_increment,
  primary key(`id`),
  `product` bigint(20) not null,
  constraint `pt_f_product`
    foreign key(`product`) references `product`(`id`),
  `tag` varchar(64) not null,
  unique `uniq_product_tag`(`product`,`tag`)
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `template` (
  `id` bigint(20) not null auto_increment,
  primary key(`id`),
  `name` varchar(64) not null,
  unique key `key_name`(`name`)
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `template_info` (
  `id` bigint(20) not null auto_increment,
  primary key(`id`),
  `template` bigint(20) not null,
  key `key_template`(`template`),
  constraint `tf_f_template`
    foreign key(`template`) references `template`(`id`),
  `field` varchar(64) not null,
  unique `uniq_template_field`(`template`, `field`)
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `template_tag` (
  `id` bigint(20) not null auto_increment,
  primary key(`id`),
  `template` bigint(20) not null,
  constraint `tt_f_template`
    foreign key(`template`) references `template`(`id`),
  `tag` varchar(64) not null,
  unique `uniq_template_tag`(`template`, `tag`)
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `user` (
  `id` bigint(20) not null auto_increment,
  primary key(`id`),
  `name` varchar(64) not null,
  unique `uniq_name`(`name`),
  `notes` varchar(64) not null default ''
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `event` (
  `id` bigint(20) not null auto_increment,
  primary key(`id`),
  `type` varchar(64),
  `product` bigint(20) not null,
  constraint `e_f_product`
    foreign key(`product`) references `product`(`id`),
  `starttime` bigint(20) not null,
  `returntime` bigint(20) default null
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `loan` (
  `event` bigint(20) not null,
  primary key(`event`),
  constraint `l_f_event`
    foreign key(`event`) references `event`(`id`),
  `user` bigint(20) not null,
  constraint `l_f_user`
    foreign key(`user`) references `user`(`id`),
  `endtime` bigint(20) not null
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `service` (
  `event` bigint(20) not null,
  primary key(`event`),
  constraint `s_f_event`
    foreign key(`event`) references `event`(`id`)
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `inventory` (
  `id` bigint(20) not null auto_increment,
  primary key(`id`),
  `starttime` bigint(20) not null,
  `endtime` bigint(20) default null
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `inventory_product` (
  `id` bigint(20) not null auto_increment,
  primary key(`id`),
  `inventory` bigint(20) not null,
  constraint `i_f_inventory`
    foreign key(`inventory`) references `inventory`(`id`),
  `product` bigint(20) not null,
  constraint `i_f_product`
    foreign key(`product`) references `product`(`id`),
  unique `uniq_inventory_product`(`inventory`, `product`),
  `regtime` bigint(20) not null
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `attachment` (
  `id` bigint(20) not null auto_increment,
  primary key (`id`),
  `product` bigint(20) not null,
  key `a_f_product` (`product`),
  constraint `a_f_product`
    foreign key (`product`) references `product` (`id`),
  `filename` varchar(64) not null,
  `uploadtime` bigint(20) not null,
  `deletetime` bigint(20) default null
);

create table `kvs` (
  `key` varchar(64) not null,
  primary key(`key`),
  `value` varchar(64) not null default ''
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `pending_receipt` (
  `user` bigint(20) not null,
  primary key (`user`),
  constraint `pr_f_user`
    foreign key(`user`) references `user`(`id`),
  `send_time` bigint(20) not null,
  `since_time` bigint(20) not null
) character set utf8mb4,
  collate utf8mb4_unicode_ci;

create table `loan_extension` (
  `loan` bigint(20) not null,
  constraint `le_f_loan`
    foreign key(`loan`) references `loan`(`event`),
  `extend_time` bigint(20) not null,
  primary key (`loan`, `extend_time`),
  `old_end` bigint(20) not null,
  `new_end` bigint(20) not null
) character set utf8mb4,
  collate utf8mb4_unicode_ci;
