create database db_petshop_auquimia;

use db_petshop_auquimia;

create table tb_tipo_funcionario (
cd_tipo_funcionario int primary key auto_increment,
nm_tipo_funcionario varchar(45) not null
);

create table tb_tipo_produto (
cd_tipo_produto int primary key auto_increment,
nm_tipo_produto varchar(45) not null
);

alter table tb_tipo_produto change
nm_tipo_produto nm_tipo_produto varchar(45);

create table tb_tipo_servico (
cd_tipo_servico int primary key auto_increment,
nm_tipo_servico varchar(45) not null
);

create table tb_especie (
cd_especie int primary key auto_increment,
nm_especie varchar(45) not null
);

create table tb_cliente (
cd_cliente int primary key auto_increment,
nm_cliente varchar(60) not null,
dt_nascimento date not null,
nm_email varchar(45) not null unique,
cd_senha varchar(64) not null,
st_cliente char(1) not null default "1",
dt_registro_cliente datetime not null default current_timestamp
);

alter table tb_cliente add
constraint email_unico_cliente unique(nm_email);

-- alter table tb_cliente drop index email_unico_cliente;

create table tb_carrinho (
cd_carrinho int primary key auto_increment,
dt_carrinho datetime not null default current_timestamp,
id_cliente int,
st_carrinho char(1) not null default '1',
foreign key (id_cliente) references tb_cliente (cd_cliente)
);

create table tb_produto (
cd_produto int primary key auto_increment,
nm_produto varchar(45) not null,
ds_produto text not null,
vl_produto decimal(6,2) not null,
id_tipo_produto int not null,
foreign key (id_tipo_produto) references tb_tipo_produto (cd_tipo_produto)
);

create table tb_servico(
cd_servico int auto_increment,
nm_servico varchar(45) not null,
ds_servico text not null,
id_tipo_servico int not null, 
primary key (cd_servico),
foreign key (id_tipo_servico) references tb_tipo_servico (cd_tipo_servico)
);

create table tb_funcionario (
cd_funcionario int primary key auto_increment,
nm_funcionario varchar(60) not null,
dt_nascimento date not null,
nm_email varchar(45) not null unique,
cd_senha varchar(64) not null,
st_funcionario char(1) not null default "1",
dt_registro_funcionario datetime not null default current_timestamp,
id_tipo_funcionario int not null,
foreign key (id_tipo_funcionario) 
references tb_tipo_funcionario (cd_tipo_funcionario)
);

create table tb_produto_carrinho (
cd_item int auto_increment,
id_produto int not null,
id_carrinho int not null,
qt_produto int not null,
vl_produto decimal(6,2),
primary key (cd_item),
foreign key (id_produto) references tb_produto (cd_produto),
foreign key (id_carrinho) references tb_carrinho (cd_carrinho)
);

alter table tb_produto_carrinho change
vl_produto vl_produto decimal(6,2) not null;

create table tb_animal (
cd_animal int primary key auto_increment,
nm_animal varchar(45), 
nm_porte char(1) not null,
qt_peso decimal (6,3),
ds_animal text,
id_especie int not null,
id_cliente int not null,
foreign key (id_especie) references tb_especie (cd_especie),
foreign key (id_cliente) references tb_cliente (cd_cliente)
);

create table tb_agenda (
cd_agenda int primary key auto_increment,
dt_agenda date not null,
hr_agenda time not null,
id_servico int not null,
foreign key (id_servico) references tb_servico (cd_servico),
id_funcionario int, 
foreign key (id_funcionario) references tb_funcionario (cd_funcionario),
id_animal int not null,
foreign key (id_animal) references tb_animal (cd_animal),
st_agenda char(1) not null default "1",
dt_registro_agenda datetime not null default current_timestamp
);