CREATE TABLE zip_codes (
    id               bigint NOT NULL,
    pais_id          bigint NOT NULL,
    zip_code         bigint NOT NULL,
    estado_id        bigint NOT NULL,
    cidade_id        bigint NOT NULL,
    bairro_id        bigint NOT NULL,
    logradouro_id    bigint NOT NULL,
    tipo_controle    SMALLINT,
    numero_inicial   INTEGER,
    numer_final      INTEGER,
    lado             SMALLINT,
    numero_par_impar SMALLINT,
    dne_codigo       INTEGER
);

ALTER TABLE zip_codes
    ADD CHECK ( tipo_controle IN ( 1, 2, 3, 4 ) );

ALTER TABLE zip_codes
    ADD CHECK ( lado IN ( 1, 2 ) );

ALTER TABLE zip_codes
    ADD CHECK ( numero_par_impar IN ( 1, 2 ) );

COMMENT ON COLUMN zip_codes.zip_code IS
    'Numero do Cep';

COMMENT ON COLUMN zip_codes.estado_id IS
    'Id do estado';

COMMENT ON COLUMN zip_codes.cidade_id IS
    'Id da Cidade';

COMMENT ON COLUMN zip_codes.bairro_id IS
    'Id do Bairro';

COMMENT ON COLUMN zip_codes.logradouro_id IS
    'Id do Logradouro';

COMMENT ON COLUMN zip_codes.tipo_controle IS
    'Tipo de controle do cep
1-Não utiliza
2-Numero(Inicial e Final)
3-Lado(Direito ou Esquerdo)
4-Numero(Par ou Ímpar)';

COMMENT ON COLUMN zip_codes.numero_inicial IS
    'Número Incial	';

COMMENT ON COLUMN zip_codes.numer_final IS
    'Número final';

COMMENT ON COLUMN zip_codes.lado IS
    'Lado(Direito ou Esquerdo)';

COMMENT ON COLUMN zip_codes.numero_par_impar IS
    'Numero(Par ou Ímpar)';

COMMENT ON COLUMN zip_codes.dne_codigo IS
    'Código do CEP no DNE';