# TABELAS COM X CONTRAINTS

DROP TABLE IF EXISTS titulos_imagens;

DROP TABLE IF EXISTS `frases_opt`;
DROP TABLE IF EXISTS `classificacoes_tokens`;

DROP TABLE IF EXISTS `instancias_cursos`;
DROP TABLE IF EXISTS `campos_cursos`;
# TABELAS COM X CONTRAINTS

DROP TABLE IF EXISTS `enderecos_institucionais`;
DROP TABLE IF EXISTS `enderecos_cursos`;
DROP TABLE IF EXISTS `frases`;
DROP TABLE IF EXISTS `titulos`;


# TABELAS COM X CONTRAINTS

DROP TABLE IF EXISTS `localizacoes`;
DROP TABLE IF EXISTS `cursos`;
DROP TABLE IF EXISTS `tokens_em_avaliacao`;

DROP TABLE IF EXISTS `URLs`;
DROP TABLE IF EXISTS `tokens`;


# TABELAS COM X CONTRAINT

DROP TABLE IF EXISTS `cidades`;
DROP TABLE IF EXISTS `estados`;
DROP TABLE IF EXISTS `instituicoes`;
DROP TABLE IF EXISTS `tipos_instituicoes`;
DROP TABLE IF EXISTS `tipos_cursos`;
DROP TABLE IF EXISTS `segmentos`;
DROP TABLE IF EXISTS `tipos_tokens`;


# TABELAS SEM CONSTRAINTS

DROP TABLE IF EXISTS `esferas_institucionais`;
DROP TABLE IF EXISTS `paises`;
DROP TABLE IF EXISTS `tipos_elementos_sintaticos`;
DROP TABLE IF EXISTS `tipos_flexoes`;
DROP TABLE IF EXISTS `tipos_classificacoes`;
DROP TABLE IF EXISTS `paises`;
DROP TABLE IF EXISTS imagens;

CREATE TABLE imagens (
	id_chave_imagem int not null auto_increment,
	nome_imagem varchar(500),
	primary key (id_chave_imagem),
	unique(nome_imagem)
);

CREATE TABLE URLs (
    id_chave_url INT NOT NULL AUTO_INCREMENT,
    nome_url VARCHAR(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
    nome_url_hash CHAR(64) GENERATED ALWAYS AS (SHA2(nome_url, 256)) STORED,
    valida ENUM('S', 'N') DEFAULT 'N', -- Melhor do que VARCHAR(3)
    data_teste DATE, -- Melhor do que VARCHAR(10)
    comentarios TEXT,
    PRIMARY KEY (id_chave_url),
    UNIQUE (nome_url_hash)
);

# SELECT * FROM URLs WHERE nome_url_hash = UNHEX(SHA2('https://exemplo.com', 256));
# SELECT * FROM URLs WHERE nome_url_hash = UNHEX(SHA2('https://exemplo.com', 256));
# SELECT * FROM URLs WHERE nome_url LIKE '%exemplo%';

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `esferas_institucionais` (
  `id_chave_esfera_institucional` int NOT NULL AUTO_INCREMENT,
  `nome_esfera_institucional` varchar(40) NOT NULL,
  `descricao` text,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_esfera_institucional`),
  UNIQUE KEY `nome_esfera_institucional` (`nome_esfera_institucional`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `paises` (
  `id_chave_pais` int NOT NULL AUTO_INCREMENT,
  `nome_pais` varchar(255) DEFAULT NULL,
  `codigo_iso` varchar(3),
  `nome_pais_iso3166_2` VARCHAR(255) NOT NULL UNIQUE,   
  `codigo_alpha2` CHAR(2) NOT NULL UNIQUE,             
  `codigo_alpha3` CHAR(3) NOT NULL UNIQUE,            
  `codigo_numerico` CHAR(3) NOT NULL UNIQUE,    
  `populacao_estimada` bigint DEFAULT NULL,
  `area_total` decimal(12,2) DEFAULT NULL,
  `densidade_demografica` decimal(10,2) DEFAULT NULL,
  `capital` varchar(100) ,
  `regiao` varchar(100) ,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_pais`),
  UNIQUE KEY `codigo_iso` (`codigo_iso`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;



/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `tipos_elementos_sintaticos` (
  `id_chave_tipo_elemento_sintatico` int NOT NULL AUTO_INCREMENT,
  `nome_tipo_elemento_sintatico` varchar(255) NOT NULL,
  `descricao` text NOT NULL,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_tipo_elemento_sintatico`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;


/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `tipos_flexoes` (
  `id_chave_tipo_flexao` int NOT NULL AUTO_INCREMENT,
  `nome_tipo_flexao` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `acentuada` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `data_insercao` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`id_chave_tipo_flexao`),
  UNIQUE KEY `nome_tipo_flexao` (`nome_tipo_flexao`),
  UNIQUE KEY `acentuada` (`acentuada`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `tipos_classificacoes` (
  `id_chave_tipo_classificacao` int NOT NULL AUTO_INCREMENT,
  `nome_tipo_classificacao` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `acentuada` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `ordem` int DEFAULT 1,
  `caption_substituto` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `serve_para_busca` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "sim",
  `mostra_caption_tamanho` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "16px", 
  `mostra_valor_tamanho` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "16px", 
  `bold_valor` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "normal",
  `color_valor`VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "white",
  `border_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "none",
  `border_radius_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "0px",
  `background_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "none",
  `isolamento_valor` VARCHAR(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "",
  `padding_left_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "0px",
  `padding_right_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "0px",
  `padding_top_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "0px",
  `padding_bottom_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "0px",
  `margin_left_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "0px",
  `margin_right_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "0px",
  `margin_top_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "0px",
  `margin_bottom_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "0px",
  `caracter_depois_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "",
  `forca_quebra_linha` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "nao",
  `junta_caption_valor` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "nao",
  `limita_largura` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT "nao_limita",
  `data_insercao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_tipo_classificacao`),
  UNIQUE KEY `nome_tipo_classificacao` (`nome_tipo_classificacao`),
  UNIQUE KEY `acentuada` (`acentuada`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
# nao_mostra não mostra nada... 

CREATE INDEX idx_nome_tipo_classificacao ON tipos_classificacoes (nome_tipo_classificacao);

# TABELAS COM X CONTRAINT


/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `estados` (
  `id_chave_estado` int NOT NULL AUTO_INCREMENT,
  `nome_estado` varchar(255) NOT NULL,
  `categoria` VARCHAR(50) NOT NULL,
  `codigo_iso3166_2` VARCHAR(10) NOT NULL UNIQUE,
  `codigo_estado` CHAR(2) NOT NULL UNIQUE,
  `idioma` VARCHAR(50) NOT NULL,
  `codigo_pais` CHAR(2) NOT NULL,
  `sigla_estado` char(2) ,
  `codigo_ibge` int ,
  `regiao` varchar(100) DEFAULT NULL,
  `populacao_estimada` int DEFAULT NULL,
  `area_total` decimal(10,2) DEFAULT NULL,
  `densidade_demografica` decimal(8,2) DEFAULT NULL,
  `capital` varchar(100) DEFAULT NULL,
  `id_pais` int DEFAULT NULL,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_estado`),
  KEY `id_pais` (`id_pais`),
  UNIQUE(`codigo_ibge`),
  CONSTRAINT `estados_ibfk_1` FOREIGN KEY (`id_pais`) REFERENCES `paises` (`id_chave_pais`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;


/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `cidades` (
  `id_chave_cidade` int NOT NULL AUTO_INCREMENT,
  `codigo_ibge` varchar(30) DEFAULT NULL, 
  `nome_cidade` varchar(255) NOT NULL,
  `eh_cidade` varchar(3) DEFAULT "sim",
  `cidade_sem_acentuacao` varchar(300) NOT NULL,
  `id_estado` int NOT NULL,
  `populacao` int DEFAULT NULL,
  `area_km2` decimal(10,2) DEFAULT NULL,
  `densidade_demografica` VARCHAR(200) DEFAULT NULL,
  `latitude` decimal(9,6) DEFAULT NULL,
  `longitude` decimal(9,6) DEFAULT NULL,
  `gentilico` varchar(100) DEFAULT NULL,
  `idhm` varchar(200) DEFAULT NULL,
  `idhm_decimal` varchar(200),
  `escolarizacao` varchar(200) DEFAULT NULL,
  `mortalidade_infantil` varchar(200) DEFAULT NULL,
  `pib_per_capita` varchar(200) DEFAULT NULL,
  `pib_per_capita_decimal` varchar(200) DEFAULT NULL,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_cidade`),
  UNIQUE KEY `codigo_ibge` (`codigo_ibge`),
  KEY `id_estado` (`id_estado`),
  CONSTRAINT `cidades_ibfk_1` FOREIGN KEY (`id_estado`) REFERENCES `estados` (`codigo_ibge`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

CREATE INDEX idx_lat_long ON cidades (latitude, longitude);

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `tipos_instituicoes` (
  `id_chave_tipo_instituicao` int NOT NULL AUTO_INCREMENT,
  `nome_tipo_instituicao` varchar(255) NOT NULL,
  `descricao` text,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `id_esfera_institucional` int DEFAULT NULL,
  PRIMARY KEY (`id_chave_tipo_instituicao`),
  UNIQUE KEY `nome_tipo_instituicao` (`nome_tipo_instituicao`),
  KEY `id_esfera_institucional` (`id_esfera_institucional`),
  CONSTRAINT `tipos_instituicoes_ibfk_1` FOREIGN KEY (`id_esfera_institucional`) REFERENCES `esferas_institucionais` (`id_chave_esfera_institucional`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;


/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `instituicoes` (
  `id_chave_instituicao` int NOT NULL AUTO_INCREMENT,
  `nome_instituicao` varchar(255) NOT NULL,
  `sigla` varchar(10) DEFAULT NULL,
  `identificador` varchar(10) DEFAULT NULL UNIQUE,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `id_tipo_instituicao` int DEFAULT NULL,
  `logo` varchar(255) DEFAULT NULL,
  `largura_logo_instituicao` VARCHAR(30) DEFAULT "20%",
  PRIMARY KEY (`id_chave_instituicao`),
  UNIQUE KEY `nome_instituicao` (`nome_instituicao`),
  KEY `id_tipo_instituicao` (`id_tipo_instituicao`),
  CONSTRAINT `instituicoes_ibfk_1` FOREIGN KEY (`id_tipo_instituicao`) REFERENCES `tipos_instituicoes` (`id_chave_tipo_instituicao`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;



/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `tipos_cursos` (
  `id_chave_tipo_curso` int NOT NULL AUTO_INCREMENT,
  `nome_tipo_curso` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_tipo_curso`),
  UNIQUE (`nome_tipo_curso`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;


/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `segmentos` (
  `id_chave_segmento` int NOT NULL AUTO_INCREMENT,
  `nome_segmento` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_segmento`),
  UNIQUE (`nome_segmento`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `cursos` (
  `id_chave_curso` int NOT NULL AUTO_INCREMENT,
  `nome_curso` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `id_tipo_curso` int DEFAULT NULL,
   `id_instituicao` INT DEFAULT NULL,
   `id_cidade` INT DEFAULT NULL,
   `id_url` INT DEFAULT NULL,
  `data_insercao` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`id_chave_curso`),
  UNIQUE KEY `nome_curso` (`nome_curso`), 
  CONSTRAINT titulos_ibfk_3 FOREIGN KEY (id_instituicao) REFERENCES instituicoes (id_chave_instituicao),
  CONSTRAINT `cursos_ibfk_2` FOREIGN KEY (`id_tipo_curso`) REFERENCES `tipos_cursos` (`id_chave_tipo_curso`),
  CONSTRAINT `cursos_cidades` FOREIGN KEY (`id_cidade`) REFERENCES `cidades` (`id_chave_cidade`),
  CONSTRAINT `cursos_url` FOREIGN KEY (`id_url`) REFERENCES `URLs` (`id_chave_url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;


/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `tipos_tokens` (
  `id_chave_tipo_token` int NOT NULL AUTO_INCREMENT,
  `nome_tipo_token` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `acentuada` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `tipo_token_pai` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `data_insercao` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`id_chave_tipo_token`),
  UNIQUE KEY `nome_tipo_token` (`nome_tipo_token`),
  KEY `tipo_token_pai` (`tipo_token_pai`),
  CONSTRAINT `tipos_tokens_ibfk_1` FOREIGN KEY (`tipo_token_pai`) REFERENCES `tipos_tokens` (`nome_tipo_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

create table classificacoes_tokens (
	id_chave_classificacao_token int not null auto_increment,
	nome_token varchar(200) not null,
	id_tipo_token int not null,
	caracter_antes varchar(10) default "",
	caracter_depois varchar(10) default " ",
	data_insercao timestamp null default current_timestamp,
	primary key (id_chave_classificacao_token),
	unique key nome_token (nome_token), # o correto seria cria um índice com nome_token e id_tipo_token, mas o sistema não consegue discrimiar a função sintática do token e não teria como fazer uma busca pelos dois campos
	constraint classificacoes_tokens_ibfk_1 foreign key (id_tipo_token) references tipos_tokens (id_chave_tipo_token)
) engine=InnoDB default charset=utf8mb4 collate=utf8mb4_general_ci;
ALTER TABLE classificacoes_tokens MODIFY nome_token VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL; #para deixar a tabela sensível a acentuação

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `localizacoes` (
  `id_chave_localizacao` int NOT NULL AUTO_INCREMENT,
  `latitude` decimal(9,6) NOT NULL,
  `longitude` decimal(9,6) NOT NULL,
  `bounding_box_lat_min` decimal(9,6) DEFAULT NULL,
  `bounding_box_lat_max` decimal(9,6) DEFAULT NULL,
  `bounding_box_long_min` decimal(9,6) DEFAULT NULL,
  `bounding_box_long_max` decimal(9,6) DEFAULT NULL,
  `display_name` text NOT NULL,
  `road` varchar(255) DEFAULT NULL,
  `neighbourhood` varchar(255) DEFAULT NULL,
  `suburb` varchar(255) DEFAULT NULL,
  `city` varchar(255) DEFAULT NULL,
  `state` varchar(255) DEFAULT NULL,
  `postcode` varchar(20) DEFAULT NULL,
  `country` varchar(255) DEFAULT NULL,
  `country_code` varchar(2) DEFAULT NULL,
  `id_cidade` int DEFAULT NULL,
  `id_estado` int DEFAULT NULL,
  `id_pais` int DEFAULT NULL,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_localizacao`),
  KEY `id_cidade` (`id_cidade`),
  KEY `id_estado` (`id_estado`),
  KEY `id_pais` (`id_pais`),
  CONSTRAINT `localizacoes_ibfk_1` FOREIGN KEY (`id_cidade`) REFERENCES `cidades` (`id_chave_cidade`),
  CONSTRAINT `localizacoes_ibfk_2` FOREIGN KEY (`id_estado`) REFERENCES `estados` (`id_chave_estado`),
  CONSTRAINT `localizacoes_ibfk_3` FOREIGN KEY (`id_pais`) REFERENCES `paises` (`id_chave_pais`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;



# TABELAS COM X CONTRAINTS

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `enderecos_institucionais` (
  `id_chave_endereco_institucional` int NOT NULL AUTO_INCREMENT,
  `id_instituicao` int DEFAULT NULL,
  `id_localizacao` int NOT NULL,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_endereco_institucional`),
  KEY `id_instituicao` (`id_instituicao`),
  KEY `id_localizacao` (`id_localizacao`),
  CONSTRAINT `enderecos_institucionais_ibfk_1` FOREIGN KEY (`id_instituicao`) REFERENCES `instituicoes` (`id_chave_instituicao`),
  CONSTRAINT `enderecos_institucionais_ibfk_2` FOREIGN KEY (`id_localizacao`) REFERENCES `localizacoes` (`id_chave_localizacao`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `enderecos_cursos` (
  `id_chave_endereco_curso` int NOT NULL AUTO_INCREMENT,
  `id_instituicao` int DEFAULT NULL,
  `id_localizacao` int NOT NULL,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_endereco_curso`),
  KEY `id_instituicao` (`id_instituicao`),
  KEY `id_localizacao` (`id_localizacao`),
  CONSTRAINT `enderecos_cursos_ibfk_1` FOREIGN KEY (`id_instituicao`) REFERENCES `instituicoes` (`id_chave_instituicao`),
  CONSTRAINT `enderecos_cursos_ibfk_2` FOREIGN KEY (`id_localizacao`) REFERENCES `localizacoes` (`id_chave_localizacao`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;



# TABELAS COM X CONTRAINTS

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `tokens` (
  `id_chave_token` int NOT NULL AUTO_INCREMENT,
  `nome_token` varchar(200) NOT NULL,
  `acentuada` varchar(200) DEFAULT NULL,
  `id_tipo_token` int DEFAULT NULL,
  `id_raiz` int DEFAULT NULL,
  `id_tipo_flexao` int DEFAULT NULL,
  `data_insercao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_token`),
  UNIQUE KEY `acentuada` (`acentuada`,`id_tipo_token`),
  KEY `id_tipo_token` (`id_tipo_token`),
  KEY `id_raiz` (`id_raiz`),
  KEY `id_tipo_flexao` (`id_tipo_flexao`),
  CONSTRAINT `fk_raiz_token` FOREIGN KEY (`id_raiz`) REFERENCES `tokens` (`id_chave_token`),
  CONSTRAINT `fk_tipo_flexao` FOREIGN KEY (`id_tipo_flexao`) REFERENCES `tipos_flexoes` (`id_chave_tipo_flexao`),
  CONSTRAINT `fk_tipo_token` FOREIGN KEY (`id_tipo_token`) REFERENCES `tipos_tokens` (`id_chave_tipo_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
ALTER TABLE tokens MODIFY acentuada VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL; #para deixar a tabela sensível a acentuação
#ALTER TABLE tokens MODIFY nome_token VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; -- importante para permitir diferenciar acentuação, como crase, que dá tokens diferentes. No select é preciso mudar a collation para uma que não diferencia acentuação

-- SELECT * FROM tokens WHERE nome_token COLLATE utf8mb4_unicode_ci LIKE '%autogestão%';
-- SELECT * FROM tokens WHERE nome_token COLLATE utf8mb4_general_ci = 'à autogestão';

CREATE TABLE titulos (
	id_chave_titulo INT NOT NULL AUTO_INCREMENT,
	nome_titulo VARCHAR(255) NOT NULL,
	id_tipo_elemento_sintatico INT DEFAULT NULL,
	data_insercao TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (id_chave_titulo),
	UNIQUE KEY nome_titulo (nome_titulo),
	CONSTRAINT titulos_ibfk_2 FOREIGN KEY (id_tipo_elemento_sintatico) REFERENCES tipos_elementos_sintaticos (id_chave_tipo_elemento_sintatico)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

CREATE TABLE titulos_imagens (
	id_chave_titulo_imagem int not null auto_increment,
	nome_titulo_imagem varchar(500),
	id_imagem int,
	id_titulo int,
	CONSTRAINT imagem_titulo FOREIGN KEY (id_imagem) REFERENCES imagens(id_chave_imagem),
	CONSTRAINT titulo_imagem FOREIGN KEY (id_titulo) REFERENCES titulos(id_chave_titulo),
	PRIMARY KEY (id_chave_titulo_imagem),
        UNIQUE(id_imagem, id_titulo)
);


/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `frases` (
  `id_chave_frase` int NOT NULL AUTO_INCREMENT,
  `nome_frase` varchar(255) DEFAULT NULL,
  `id_token` int DEFAULT NULL,
  `ordem` int DEFAULT NULL,
  `id_titulo` int DEFAULT NULL,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_frase`),
  UNIQUE KEY `id_token` (`nome_frase`),
  CONSTRAINT `frases_ibfk_1` FOREIGN KEY (`id_token`) REFERENCES `tokens` (`id_chave_token`),
  CONSTRAINT `frases_ibfk_3` FOREIGN KEY (`id_titulo`) REFERENCES `titulos` (`id_chave_titulo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

CREATE INDEX idx_id_titulo ON frases (id_titulo);

# TABLES COM X CONTRAINTS

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `instancias_cursos` (
  `id_chave_instancia_curso` int NOT NULL AUTO_INCREMENT,
  `id_localizacao` int DEFAULT NULL,
  `id_curso` int DEFAULT NULL,
  `latitude` decimal(10,8) DEFAULT NULL,
  `longitude` decimal(11,8) DEFAULT NULL,
  `data_instancia_curso` date NOT NULL,
  `hora_instancia_curso` time NOT NULL,
  `descricao` text,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_instancia_curso`),
  KEY `id_localizacao` (`id_localizacao`),
  KEY `id_curso` (`id_curso`),
  CONSTRAINT `instancias_cursos_ibfk_3` FOREIGN KEY (`id_localizacao`) REFERENCES `localizacoes` (`id_chave_localizacao`),
  CONSTRAINT `instancias_cursos_ibfk_4` FOREIGN KEY (`id_curso`) REFERENCES `cursos` (`id_chave_curso`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `campos_cursos` (
  `id_chave_campo_curso` int NOT NULL AUTO_INCREMENT,
  `nome_campo_curso` varchar(255) NOT NULL,
  `id_curso` int DEFAULT NULL,
  `id_titulo` int DEFAULT NULL,
  `id_tipo_classificacao` INT DEFAULT NULL,
  `descricao` text,
  `data_insercao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_chave_campo_curso`),
  UNIQUE KEY `nome_campo_curso` (`nome_campo_curso`),
  CONSTRAINT `campos_cursos_ibfk_2` FOREIGN KEY (`id_curso`) REFERENCES `cursos` (`id_chave_curso`),
  CONSTRAINT campos_cursos_ibfk1 FOREIGN KEY (id_tipo_classificacao) REFERENCES tipos_classificacoes (id_chave_tipo_classificacao),
  CONSTRAINT `campos_cursos_ibfk_3` FOREIGN KEY (`id_titulo`) REFERENCES `titulos` (`id_chave_titulo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
CREATE INDEX idx_curso_tipo_classificacao ON campos_cursos (id_curso, id_tipo_classificacao);
CREATE INDEX idx_id_titulo ON campos_cursos (id_titulo);


-- Criação da tabela frases_opt para MySQL
CREATE TABLE frases_opt (
    id_chave_frase_opt INT AUTO_INCREMENT PRIMARY KEY,
    id_titulo INT UNIQUE,
    titulo TEXT,
    CONSTRAINT fk_frases_opt_titulos FOREIGN KEY (id_titulo) REFERENCES titulos(id_chave_titulo)
);
