-- Simulação de estrutura para Oracle 12 (parcial, adaptar manualmente)

BEGIN
  FOR tab IN (SELECT table_name FROM user_tables) LOOP
    EXECUTE IMMEDIATE 'DROP TABLE ' || tab.table_name || ' CASCADE CONSTRAINTS';
    DBMS_OUTPUT.PUT_LINE('Tabela removida: ' || tab.table_name);
  END LOOP;
END;
/
-- CREATE TABLES

CREATE TABLE esferas_institucionais (
  id_chave_esfera_institucional NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_esfera_institucional VARCHAR2(40) NOT NULL,
  descricao CLOB,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_esfera_institucional),
  CONSTRAINT nome_esfera_institucional UNIQUE (nome_esfera_institucional)
);

CREATE TABLE tipos_instituicoes (
  id_chave_tipo_instituicao NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_tipo_instituicao VARCHAR2(255) NOT NULL,
  descricao CLOB,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  id_esfera_institucional NUMBER ,
  PRIMARY KEY (id_chave_tipo_instituicao),
  CONSTRAINT nome_tipo_instituicao UNIQUE (nome_tipo_instituicao),
  -- INDEX id_esfera_institucional (id_esfera_institucional),
  CONSTRAINT tipos_instituicoes_ibfk_1 FOREIGN KEY (id_esfera_institucional) REFERENCES esferas_institucionais (id_chave_esfera_institucional)
);

CREATE TABLE instituicoes (
  id_chave_instituicao NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_instituicao VARCHAR2(255) NOT NULL,
  sigla VARCHAR2(10) ,
  identificador VARCHAR2(10) ,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  id_tipo_instituicao NUMBER ,
  logo VARCHAR2(255) ,
  largura_logo_instituicao VARCHAR2(30) DEFAULT '20%',
  PRIMARY KEY (id_chave_instituicao),
  CONSTRAINT nome_instituicao UNIQUE (nome_instituicao),
  CONSTRAINT identificador UNIQUE (identificador),
  -- INDEX id_tipo_instituicao (id_tipo_instituicao),
  CONSTRAINT instituicoes_ibfk_1 FOREIGN KEY (id_tipo_instituicao) REFERENCES tipos_instituicoes (id_chave_tipo_instituicao)
);

CREATE TABLE arquivos_fonte (
  id_chave_arquivo_fonte NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_arquivo_fonte_SQL VARCHAR2(500) ,
  nome_arquivo_fonte_CSV VARCHAR2(500) ,
  id_instituicao NUMBER ,
  PRIMARY KEY (id_chave_arquivo_fonte),
  CONSTRAINT nome_arquivo_fonte_SQL UNIQUE (nome_arquivo_fonte_SQL),
  CONSTRAINT nome_arquivo_fonte_CSV UNIQUE (nome_arquivo_fonte_CSV),
  -- INDEX arquivos_fonte_ibfk_1 (id_instituicao),
  CONSTRAINT arquivos_fonte_ibfk_1 FOREIGN KEY (id_instituicao) REFERENCES instituicoes (id_chave_instituicao)
);

CREATE TABLE URLs (
  id_chave_url NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_url VARCHAR2(2048) ,
  nome_url_hash char(64) GENERATED ALWAYS AS (STANDARD_HASH(nome_url,'SHA256')) VIRTUAL,
  valida CHAR(1) DEFAULT 'N' CHECK (valida IN ('S', 'N')),
  id_arquivo_fonte NUMBER ,
  data_teste date ,
  comentarios CLOB,
  PRIMARY KEY (id_chave_url),
  CONSTRAINT nome_url_hash UNIQUE (nome_url_hash),
  -- INDEX URLs_ibfk_1 (id_arquivo_fonte),
  CONSTRAINT URLs_ibfk_1 FOREIGN KEY (id_arquivo_fonte) REFERENCES arquivos_fonte (id_chave_arquivo_fonte)
);

CREATE TABLE tipos_classificacoes (
  id_chave_tipo_classificacao NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_tipo_classificacao VARCHAR2(200) ,
  acentuada VARCHAR2(200) ,
  ordem NUMBER DEFAULT 1,
  caption_substituto VARCHAR2(200) ,
  serve_para_busca VARCHAR2(3) DEFAULT 'sim',
  mostra_caption_tamanho VARCHAR2(15) DEFAULT '16px',
  mostra_valor_tamanho VARCHAR2(15) DEFAULT '16px',
  bold_valor VARCHAR2(20) DEFAULT 'normal',
  color_valor VARCHAR2(50) DEFAULT 'white',
  border_valor VARCHAR2(50) DEFAULT 'none',
  border_radius_valor VARCHAR2(50) DEFAULT '0px',
  background_valor VARCHAR2(50) DEFAULT 'none',
  isolamento_valor VARCHAR2(400) DEFAULT '',
  padding_left_valor VARCHAR2(50) DEFAULT '0px',
  padding_right_valor VARCHAR2(50) DEFAULT '0px',
  padding_top_valor VARCHAR2(50) DEFAULT '0px',
  padding_bottom_valor VARCHAR2(50) DEFAULT '0px',
  margin_left_valor VARCHAR2(50) DEFAULT '0px',
  margin_right_valor VARCHAR2(50) DEFAULT '0px',
  margin_top_valor VARCHAR2(50) DEFAULT '0px',
  margin_bottom_valor VARCHAR2(50) DEFAULT '0px',
  caracter_depois_valor VARCHAR2(50) DEFAULT '',
  forca_quebra_linha VARCHAR2(50) DEFAULT 'nao',
  junta_caption_valor VARCHAR2(50) DEFAULT 'nao',
  limita_largura VARCHAR2(50) DEFAULT 'nao_limita',
  id_arquivo_fonte NUMBER ,
  data_insercao TIMESTAMP DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_tipo_classificacao),
  CONSTRAINT nome_tipo_classificacao UNIQUE (nome_tipo_classificacao),
  CONSTRAINT acentuadae UNIQUE (acentuada),
  -- INDEX idx_nome_tipo_classificacao (nome_tipo_classificacao),
  -- INDEX tipos_classificacoes_ibfk_1 (id_arquivo_fonte),
  CONSTRAINT tipos_classificacoes_ibfk_1 FOREIGN KEY (id_arquivo_fonte) REFERENCES arquivos_fonte (id_chave_arquivo_fonte)
);

CREATE TABLE paises (
  id_chave_pais NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_pais VARCHAR2(255) ,
  codigo_iso VARCHAR2(3) ,
  nome_pais_iso3166_2 VARCHAR2(255) NOT NULL,
  codigo_alpha2 char(2) NOT NULL,
  codigo_alpha3 char(3) NOT NULL,
  codigo_numerico char(3) NOT NULL,
  populacao_estimada NUMBER(19) ,
  area_total NUMBER(12,2) ,
  densidade_demografica NUMBER(10,2) ,
  capital VARCHAR2(100) ,
  regiao VARCHAR2(100) ,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_pais),
  CONSTRAINT nome_pais_iso3166_2 UNIQUE (nome_pais_iso3166_2),
  CONSTRAINT codigo_alpha2 UNIQUE (codigo_alpha2),
  CONSTRAINT codigo_alpha3 UNIQUE (codigo_alpha3),
  CONSTRAINT codigo_numerico UNIQUE (codigo_numerico),
  CONSTRAINT codigo_iso UNIQUE (codigo_iso)
);

CREATE TABLE estados (
  id_chave_estado NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_estado VARCHAR2(255) NOT NULL,
  categoria VARCHAR2(50) NOT NULL,
  codigo_iso3166_2 VARCHAR2(10) NOT NULL,
  codigo_estado char(2) NOT NULL,
  idioma VARCHAR2(50) NOT NULL,
  codigo_pais char(2) NOT NULL,
  sigla_estado char(2) ,
  codigo_ibge NUMBER ,
  regiao VARCHAR2(100) ,
  populacao_estimada NUMBER ,
  area_total NUMBER(10,2) ,
  densidade_demografica NUMBER(8,2) ,
  capital VARCHAR2(100) ,
  id_pais NUMBER ,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_estado),
  CONSTRAINT codigo_iso3166_2 UNIQUE (codigo_iso3166_2),
  CONSTRAINT codigo_estado UNIQUE (codigo_estado),
  CONSTRAINT codigo_ibgei UNIQUE (codigo_ibge),
  -- INDEX id_pais (id_pais),
  CONSTRAINT estados_ibfk_1 FOREIGN KEY (id_pais) REFERENCES paises (id_chave_pais)
);

CREATE TABLE cidades (
  id_chave_cidade NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  codigo_ibge VARCHAR2(30) ,
  nome_cidade VARCHAR2(255) NOT NULL,
  eh_cidade VARCHAR2(3) DEFAULT 'sim',
  cidade_sem_acentuacao VARCHAR2(300) NOT NULL,
  id_estado NUMBER NOT NULL,
  populacao NUMBER ,
  area_km2 NUMBER(10,2) ,
  densidade_demografica VARCHAR2(200) ,
  latitude NUMBER(9,6) ,
  longitude NUMBER(9,6) ,
  gentilico VARCHAR2(100) ,
  idhm VARCHAR2(200) ,
  idhm_decimal VARCHAR2(200) ,
  escolarizacao VARCHAR2(200) ,
  mortalidade_infantil VARCHAR2(200) ,
  pib_per_capita VARCHAR2(200) ,
  pib_per_capita_decimal VARCHAR2(200) ,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_cidade),
  CONSTRAINT codigo_ibgez UNIQUE (codigo_ibge),
  -- INDEX id_estado (id_estado),
  -- INDEX idx_lat_long (latitude,longitude),
  CONSTRAINT cidades_ibfk_1 FOREIGN KEY (id_estado) REFERENCES estados (codigo_ibge)
);

CREATE TABLE tipos_cursos (
  id_chave_tipo_curso NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_tipo_curso VARCHAR2(250) NOT NULL,
  id_arquivo_fonte NUMBER ,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_tipo_curso),
  CONSTRAINT nome_tipo_curso UNIQUE (nome_tipo_curso),
  -- INDEX tipos_cursos_ibfk_1 (id_arquivo_fonte),
  CONSTRAINT tipos_cursos_ibfk_1 FOREIGN KEY (id_arquivo_fonte) REFERENCES arquivos_fonte (id_chave_arquivo_fonte)
);

CREATE TABLE cursos (
  id_chave_curso NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_curso VARCHAR2(200) ,
  id_tipo_curso NUMBER ,
  id_instituicao NUMBER ,
  id_cidade NUMBER ,
  id_url NUMBER ,
  id_arquivo_fonte NUMBER ,
  data_insercao TIMESTAMP(6) DEFAULT SYSTIMESTAMP(6),
  PRIMARY KEY (id_chave_curso),
  CONSTRAINT nome_curso UNIQUE (nome_curso),
  -- INDEX instituicoes_ibfk_3 (id_instituicao),
  -- INDEX cursos_ibfk_2 (id_tipo_curso),
  -- INDEX cursos_cidades (id_cidade),
  -- INDEX cursos_url (id_url),
  -- INDEX cursos_arquivos_fonte (id_arquivo_fonte),
  CONSTRAINT cursos_arquivos_fonte FOREIGN KEY (id_arquivo_fonte) REFERENCES arquivos_fonte (id_chave_arquivo_fonte),
  CONSTRAINT cursos_cidades FOREIGN KEY (id_cidade) REFERENCES cidades (id_chave_cidade),
  CONSTRAINT cursos_ibfk_2 FOREIGN KEY (id_tipo_curso) REFERENCES tipos_cursos (id_chave_tipo_curso),
  CONSTRAINT cursos_url FOREIGN KEY (id_url) REFERENCES URLs (id_chave_url),
  CONSTRAINT instituicoes_ibfk_3 FOREIGN KEY (id_instituicao) REFERENCES instituicoes (id_chave_instituicao)
);

CREATE TABLE tipos_elementos_sintaticos (
  id_chave_tipo_elemento_sintatico NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_tipo_elemento_sintatico VARCHAR2(255) NOT NULL,
  descricao CLOB NOT NULL,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_tipo_elemento_sintatico)
);

CREATE TABLE titulos (
  id_chave_titulo NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_titulo VARCHAR2(255) NOT NULL,
  id_tipo_elemento_sintatico NUMBER ,
  id_arquivo_fonte NUMBER ,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_titulo),
  CONSTRAINT nome_titulo UNIQUE (nome_titulo),
  -- INDEX titulos_ibfk_2 (id_tipo_elemento_sintatico),
  -- INDEX titulos_ibfk_3 (id_arquivo_fonte),
  CONSTRAINT titulos_ibfk_2 FOREIGN KEY (id_tipo_elemento_sintatico) REFERENCES tipos_elementos_sintaticos (id_chave_tipo_elemento_sintatico),
  CONSTRAINT titulos_ibfk_3 FOREIGN KEY (id_arquivo_fonte) REFERENCES arquivos_fonte (id_chave_arquivo_fonte)
);

CREATE TABLE campos_cursos (
  id_chave_campo_curso NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_campo_curso VARCHAR2(255) NOT NULL,
  id_curso NUMBER ,
  id_titulo NUMBER ,
  id_tipo_classificacao NUMBER ,
  descricao CLOB,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  id_arquivo_fonte NUMBER ,
  PRIMARY KEY (id_chave_campo_curso),
  CONSTRAINT nome_campo_curso UNIQUE (nome_campo_curso),
  -- INDEX campos_cursos_ibfk1 (id_tipo_classificacao),
  -- INDEX campos_cursos_ibfk_4 (id_arquivo_fonte),
  -- INDEX idx_curso_tipo_classificacao (id_curso,id_tipo_classificacao),
  -- INDEX idx_id_titulo (id_titulo),
  CONSTRAINT campos_cursos_ibfk1 FOREIGN KEY (id_tipo_classificacao) REFERENCES tipos_classificacoes (id_chave_tipo_classificacao),
  CONSTRAINT campos_cursos_ibfk_2 FOREIGN KEY (id_curso) REFERENCES cursos (id_chave_curso),
  CONSTRAINT campos_cursos_ibfk_3 FOREIGN KEY (id_titulo) REFERENCES titulos (id_chave_titulo),
  CONSTRAINT campos_cursos_ibfk_4 FOREIGN KEY (id_arquivo_fonte) REFERENCES arquivos_fonte (id_chave_arquivo_fonte)
);

CREATE TABLE tipos_tokens (
  id_chave_tipo_token NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_tipo_token VARCHAR2(200) ,
  acentuada VARCHAR2(200) ,
  tipo_token_pai VARCHAR2(200) ,
  data_insercao TIMESTAMP(6) DEFAULT SYSTIMESTAMP(6),
  PRIMARY KEY (id_chave_tipo_token),
  CONSTRAINT nome_tipo_token UNIQUE (nome_tipo_token),
  -- INDEX tipo_token_pai (tipo_token_pai),
  CONSTRAINT tipos_tokens_ibfk_1 FOREIGN KEY (tipo_token_pai) REFERENCES tipos_tokens (nome_tipo_token)
);

CREATE TABLE classificacoes_tokens (
  id_chave_classificacao_token NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_token VARCHAR2(200) NOT NULL,
  id_tipo_token NUMBER NOT NULL,
  caracter_antes VARCHAR2(10) DEFAULT '',
  caracter_depois VARCHAR2(10) DEFAULT ' ',
  id_arquivo_fonte NUMBER ,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_classificacao_token),
  CONSTRAINT nome_token UNIQUE (nome_token),
  -- INDEX classificacoes_tokens_ibfk_1 (id_tipo_token),
  -- INDEX classificacoes_tokens_ibfk_2 (id_arquivo_fonte),
  CONSTRAINT classificacoes_tokens_ibfk_1 FOREIGN KEY (id_tipo_token) REFERENCES tipos_tokens (id_chave_tipo_token),
  CONSTRAINT classificacoes_tokens_ibfk_2 FOREIGN KEY (id_arquivo_fonte) REFERENCES arquivos_fonte (id_chave_arquivo_fonte)
);

CREATE TABLE localizacoes (
  id_chave_localizacao NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  latitude NUMBER(9,6) NOT NULL,
  longitude NUMBER(9,6) NOT NULL,
  bounding_box_lat_min NUMBER(9,6) ,
  bounding_box_lat_max NUMBER(9,6) ,
  bounding_box_long_min NUMBER(9,6) ,
  bounding_box_long_max NUMBER(9,6) ,
  display_name CLOB NOT NULL,
  road VARCHAR2(255) ,
  neighbourhood VARCHAR2(255) ,
  suburb VARCHAR2(255) ,
  city VARCHAR2(255) ,
  state VARCHAR2(255) ,
  postcode VARCHAR2(20) ,
  country VARCHAR2(255) ,
  country_code VARCHAR2(2) ,
  id_cidade NUMBER ,
  id_estado NUMBER ,
  id_pais NUMBER ,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_localizacao),
  -- INDEX id_cidade (id_cidade),
  -- INDEX id_estado (id_estado),
  -- INDEX 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)
);

CREATE TABLE enderecos_cursos (
  id_chave_endereco_curso NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  id_instituicao NUMBER ,
  id_localizacao NUMBER NOT NULL,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_endereco_curso),
  -- INDEX id_instituicao (id_instituicao),
  -- INDEX 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)
);

CREATE TABLE enderecos_institucionais (
  id_chave_endereco_institucional NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  id_instituicao NUMBER ,
  id_localizacao NUMBER NOT NULL,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_endereco_institucional),
  -- INDEX id_instituicao (id_instituicao),
  -- INDEX 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)
);

CREATE TABLE familias (
  id_chave_familia NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  codigo_familia VARCHAR2(10) ,
  nome_familia VARCHAR2(255) ,
  PRIMARY KEY (id_chave_familia),
  CONSTRAINT codigo_familia UNIQUE (codigo_familia),
  CONSTRAINT nome_familia UNIQUE (nome_familia)
);

CREATE TABLE tipos_flexoes (
  id_chave_tipo_flexao NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_tipo_flexao VARCHAR2(200) ,
  acentuada VARCHAR2(200) ,
  data_insercao TIMESTAMP(6) DEFAULT SYSTIMESTAMP(6),
  PRIMARY KEY (id_chave_tipo_flexao),
  CONSTRAINT nome_tipo_flexao UNIQUE (nome_tipo_flexao),
  CONSTRAINT acentuadaj UNIQUE (acentuada)
);

CREATE TABLE tokens (
  id_chave_token NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_token VARCHAR2(200) NOT NULL,
  acentuada VARCHAR2(200) NOT NULL,
  id_tipo_token NUMBER ,
  id_tipo_token_spaCy NUMBER ,
  id_raiz NUMBER ,
  id_tipo_flexao NUMBER ,
  data_insercao TIMESTAMP DEFAULT SYSTIMESTAMP,
  caracter_antes VARCHAR2(10) DEFAULT '',
  caracter_depois VARCHAR2(10) DEFAULT ' ',
  id_arquivo_fonte NUMBER ,
  PRIMARY KEY (id_chave_token),
  CONSTRAINT acentuadaz UNIQUE (acentuada,id_tipo_token_spaCy),
  -- INDEX id_tipo_token (id_tipo_token),
  -- INDEX id_raiz (id_raiz),
  -- INDEX id_tipo_flexao (id_tipo_flexao),
  -- INDEX fk_tipo_token_spacy (id_tipo_token_spaCy),
  -- INDEX fk_arquivo_fonte (id_arquivo_fonte),
  CONSTRAINT fk_arquivo_fonte FOREIGN KEY (id_arquivo_fonte) REFERENCES arquivos_fonte (id_chave_arquivo_fonte),
  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),
  CONSTRAINT fk_tipo_token_spacy FOREIGN KEY (id_tipo_token_spaCy) REFERENCES tipos_tokens (id_chave_tipo_token)
);

CREATE TABLE frases (
  id_chave_frase NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_frase VARCHAR2(255) ,
  id_token NUMBER ,
  ordem NUMBER ,
  id_titulo NUMBER ,
  id_arquivo_fonte NUMBER ,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_frase),
  CONSTRAINT id_tokenq UNIQUE (nome_frase),
  -- INDEX frases_ibfk_1 (id_token),
  -- INDEX frases_ibfk_4 (id_arquivo_fonte),
  -- INDEX idx_id_titulo (id_titulo),
  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),
  CONSTRAINT frases_ibfk_4 FOREIGN KEY (id_arquivo_fonte) REFERENCES arquivos_fonte (id_chave_arquivo_fonte)
);

CREATE TABLE frases_opt (
  id_chave_frase_opt NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  id_titulo NUMBER ,
  id_arquivo_fonte NUMBER ,
  titulo CLOB,
  PRIMARY KEY (id_chave_frase_opt),
  CONSTRAINT id_titulo UNIQUE (id_titulo),
  -- INDEX fk_frases_opt_arquivos_fonte (id_arquivo_fonte),
  CONSTRAINT fk_frases_opt_arquivos_fonte FOREIGN KEY (id_arquivo_fonte) REFERENCES arquivos_fonte (id_chave_arquivo_fonte),
  CONSTRAINT fk_frases_opt_titulos FOREIGN KEY (id_titulo) REFERENCES titulos (id_chave_titulo)
);

CREATE TABLE grandes_grupos (
  id_chave_grande_grupo NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  codigo_grande_grupo NUMBER ,
  nome_grande_grupo VARCHAR2(255) ,
  PRIMARY KEY (id_chave_grande_grupo),
  CONSTRAINT codigo_grande_grupo UNIQUE (codigo_grande_grupo),
  CONSTRAINT nome_grande_grupo UNIQUE (nome_grande_grupo)
);

CREATE TABLE tipos_arquivos (
  id_chave_tipo_arquivo NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_tipo_arquivo VARCHAR2(255) NOT NULL,
  extensao VARCHAR2(10) ,
  descricao CLOB,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_tipo_arquivo),
  CONSTRAINT nome_tipo_arquivo UNIQUE (nome_tipo_arquivo)
);

CREATE TABLE imagens (
  id_chave_imagem NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_imagem VARCHAR2(500) ,
  nome_imagem_tratada VARCHAR2(500) ,
  id_tipo_arquivo NUMBER ,
  PRIMARY KEY (id_chave_imagem),
  CONSTRAINT nome_imagem UNIQUE (nome_imagem),
  -- INDEX imagens_ibfk_1 (id_tipo_arquivo),
  CONSTRAINT imagens_ibfk_1 FOREIGN KEY (id_tipo_arquivo) REFERENCES tipos_arquivos (id_chave_tipo_arquivo)
);

CREATE TABLE instancias_cursos (
  id_chave_instancia_curso NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  id_localizacao NUMBER ,
  id_curso NUMBER ,
  latitude NUMBER(10,8) ,
  longitude NUMBER(11,8) ,
  data_instancia_curso date NOT NULL,
  hora_instancia_curso VARCHAR2(8) NOT NULL,
  descricao CLOB,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_instancia_curso),
  -- INDEX id_localizacao (id_localizacao),
  -- INDEX 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)
);

CREATE TABLE sub_grupos_principais (
  id_chave_sub_grupo_principal NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  codigo_justaposto VARCHAR2(10) ,
  id_codigo_grande_grupo NUMBER ,
  codigo_sub_grupo_principal NUMBER ,
  nome_sub_grupo_principal VARCHAR2(255) ,
  PRIMARY KEY (id_chave_sub_grupo_principal),
  CONSTRAINT codigo_justapostov UNIQUE (codigo_justaposto),
  CONSTRAINT nome_sub_grupo_principal UNIQUE (nome_sub_grupo_principal),
  -- INDEX fk_grande_grupo (id_codigo_grande_grupo),
  CONSTRAINT fk_grande_grupo FOREIGN KEY (id_codigo_grande_grupo) REFERENCES grandes_grupos (id_chave_grande_grupo)
);

CREATE TABLE sub_grupos (
  id_chave_sub_grupo NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  codigo_justaposto VARCHAR2(10) ,
  id_codigo_grande_grupo NUMBER ,
  id_codigo_sub_grupo_principal NUMBER ,
  codigo_sub_grupo NUMBER ,
  nome_sub_grupo VARCHAR2(255) ,
  PRIMARY KEY (id_chave_sub_grupo),
  CONSTRAINT codigo_justapostoz UNIQUE (codigo_justaposto),
  CONSTRAINT nome_sub_grupo UNIQUE (nome_sub_grupo),
  -- INDEX fk_grande_grupo_sub_principal (id_codigo_grande_grupo),
  -- INDEX fk_sub_grupo_principal (id_codigo_sub_grupo_principal),
  CONSTRAINT fk_grande_grupo_sub_principal FOREIGN KEY (id_codigo_grande_grupo) REFERENCES grandes_grupos (id_chave_grande_grupo),
  CONSTRAINT fk_sub_grupo_principal FOREIGN KEY (id_codigo_sub_grupo_principal) REFERENCES sub_grupos_principais (id_chave_sub_grupo_principal)
);

CREATE TABLE ocupacoes (
  id_chave_ocupacao NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  codigo_justaposto VARCHAR2(10) ,
  id_codigo_grande_grupo NUMBER ,
  id_codigo_sub_grupo_principal NUMBER ,
  id_codigo_sub_grupo NUMBER ,
  id_codigo_familia NUMBER ,
  codigo_ocupacao VARCHAR2(10) ,
  nome_ocupacao VARCHAR2(255) ,
  PRIMARY KEY (id_chave_ocupacao),
  CONSTRAINT codigo_justapostok UNIQUE (codigo_justaposto),
  CONSTRAINT nome_ocupacao UNIQUE (nome_ocupacao),
  -- INDEX fk_grande_grupo_ocu (id_codigo_grande_grupo),
  -- INDEX fk_sub_grupo_principal_ocu (id_codigo_sub_grupo_principal),
  -- INDEX fk_sub_grupo_ocu (id_codigo_sub_grupo),
  -- INDEX fk_familia_ocu (id_codigo_familia),
  CONSTRAINT fk_familia_ocu FOREIGN KEY (id_codigo_familia) REFERENCES familias (id_chave_familia),
  CONSTRAINT fk_grande_grupo_ocu FOREIGN KEY (id_codigo_grande_grupo) REFERENCES grandes_grupos (id_chave_grande_grupo),
  CONSTRAINT fk_sub_grupo_ocu FOREIGN KEY (id_codigo_sub_grupo) REFERENCES sub_grupos (id_chave_sub_grupo),
  CONSTRAINT fk_sub_grupo_principal_ocu FOREIGN KEY (id_codigo_sub_grupo_principal) REFERENCES sub_grupos_principais (id_chave_sub_grupo_principal)
);

CREATE TABLE perfis_ocupacionais (
  id_chave_perfil_ocupacional NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  COD_GRANDE_GRUPO NUMBER ,
  COD_SUBGRUPO_PRINCIPAL VARCHAR2(255) ,
  COD_SUBGRUPO VARCHAR2(255) ,
  COD_FAMILIA VARCHAR2(255) ,
  COD_OCUPACAO VARCHAR2(255) ,
  SGL_GRANDE_AREA VARCHAR2(255) ,
  NOME_GRANDE_AREA VARCHAR2(255) ,
  COD_ATIVIDADE VARCHAR2(255) ,
  NOME_ATIVIDADE VARCHAR2(255) ,
  PRIMARY KEY (id_chave_perfil_ocupacional),
  -- INDEX fk_ocupacao_sinonimo_perfil (COD_OCUPACAO),
  -- INDEX fk_familia_sinonimo_perfil (COD_FAMILIA),
  -- INDEX fk_sub_grupo_sinonimo_perfil (COD_SUBGRUPO),
  -- INDEX fk_sub_grupo_principal_sinonimo_perfil (COD_SUBGRUPO_PRINCIPAL),
  -- INDEX fk_grande_grupo_sinonimo_perfil (COD_GRANDE_GRUPO),
  CONSTRAINT fk_familia_sinonimo_perfil FOREIGN KEY (COD_FAMILIA) REFERENCES familias (codigo_familia),
  CONSTRAINT fk_grande_grupo_sinonimo_perfil FOREIGN KEY (COD_GRANDE_GRUPO) REFERENCES grandes_grupos (codigo_grande_grupo),
  CONSTRAINT fk_ocupacao_sinonimo_perfil FOREIGN KEY (COD_OCUPACAO) REFERENCES ocupacoes (codigo_justaposto),
  CONSTRAINT fk_sub_grupo_principal_sinonimo_perfil FOREIGN KEY (COD_SUBGRUPO_PRINCIPAL) REFERENCES sub_grupos_principais (codigo_justaposto),
  CONSTRAINT fk_sub_grupo_sinonimo_perfil FOREIGN KEY (COD_SUBGRUPO) REFERENCES sub_grupos (codigo_justaposto)
);

CREATE TABLE segmentos (
  id_chave_segmento NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_segmento VARCHAR2(500) NOT NULL,
  data_insercao timestamp DEFAULT SYSTIMESTAMP,
  PRIMARY KEY (id_chave_segmento),
  CONSTRAINT nome_segmento UNIQUE (nome_segmento)
);

CREATE TABLE sinonimos (
  id_chave_sinonimo NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_sinonimo VARCHAR2(255) ,
  id_ocupacao NUMBER ,
  PRIMARY KEY (id_chave_sinonimo),
  -- INDEX fk_ocupacao_sinonimo (id_ocupacao),
  CONSTRAINT fk_ocupacao_sinonimo FOREIGN KEY (id_ocupacao) REFERENCES ocupacoes (id_chave_ocupacao)
);

CREATE TABLE tokens_imagens (
  id_chave_token_imagem NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  nome_token_imagem VARCHAR2(500) ,
  id_imagem NUMBER ,
  id_token NUMBER ,
  PRIMARY KEY (id_chave_token_imagem),
  CONSTRAINT id_imagem UNIQUE (id_imagem,id_token),
  -- INDEX token_imagem (id_token),
  CONSTRAINT imagem_token FOREIGN KEY (id_imagem) REFERENCES imagens (id_chave_imagem),
  CONSTRAINT token_imagem FOREIGN KEY (id_token) REFERENCES tokens (id_chave_token)
);

CREATE TABLE tokens_ocupacoes (
  id_chave_token_ocupacao NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  id_token NUMBER ,
  id_ocupacao NUMBER ,
  conta NUMBER ,
  PRIMARY KEY (id_chave_token_ocupacao),
  CONSTRAINT id_tokena UNIQUE (id_token,id_ocupacao),
  -- INDEX fk_ocupacao_token (id_ocupacao),
  CONSTRAINT fk_ocupacao_token FOREIGN KEY (id_ocupacao) REFERENCES ocupacoes (id_chave_ocupacao),
  CONSTRAINT fk_token_ocupacao FOREIGN KEY (id_token) REFERENCES tokens (id_chave_token)
);

CREATE TABLE tokens_relevantes (
  id_chave_token_relevante NUMBER  GENERATED BY DEFAULT AS IDENTITY,
  ids_referencias CLOB,
  nomes_referencias CLOB,
  nome_token VARCHAR2(255) ,
  acentuada VARCHAR2(255) ,
  id_tipo_token NUMBER ,
  id_tipo_token_spaCy NUMBER ,
  id_token NUMBER ,
  conta NUMBER ,
  origem VARCHAR2(50) ,
  PRIMARY KEY (id_chave_token_relevante)
);

