create table Users
(
    id         int auto_increment primary key,
    username   varchar(50)  not null,
    email      varchar(255) not null,
    password   varchar(255) not null,
    created_at datetime     not null,
    last_login datetime     null,

    constraint email unique (email),
    constraint username unique (username)
);

create table Notes
(
    uuid       binary(16)  not null primary key,
    title      varchar(50) not null,
    user_id    int         not null,
    updated_at datetime    null,

    constraint Notes_fk_user foreign key (user_id) references Users (id) on delete cascade
);

create table Chapters
(
    id        int auto_increment primary key,
    number    int         not null,
    title     varchar(50) not null,
    content   text        not null,
    note_uuid binary(16)  not null,
    constraint Chapters_fk_note foreign key (note_uuid) references Notes (uuid) on delete cascade
);

create index note_uuid on Chapters (note_uuid);

create index user_id on Notes (user_id);

create table Tags
(
    id        int auto_increment primary key,
    name      varchar(50) not null,
    note_uuid binary(16)  not null,
    constraint Tags_fk_note foreign key (note_uuid) references Notes (uuid) on delete cascade
);

create index note_uuid on Tags (note_uuid);
