CREATE TABLE pessoa_enderecos (
    id                bigint
        CONSTRAINT nnc_pessoa_enderecos_id NOT NULL,
    pessoa_id         bigint
        CONSTRAINT nnc_pessoa_enderecos_pessoa_id NOT NULL,
    tipo              SMALLINT
        CONSTRAINT nnc_pessoa_enderecos_tipo NOT NULL,
    preferencial      SMALLINT DEFAULT 0,
    pais_id           bigint
        CONSTRAINT nnc_pessoa_enderecos_pais_id NOT NULL,
    zip_code          bigint
        CONSTRAINT nnc_pessoa_enderecos_zip_code NOT NULL,
    estado_id         bigint
        CONSTRAINT nnc_pessoa_enderecos_estado_id NOT NULL,
    cidade_id         bigint
        CONSTRAINT nnc_pessoa_enderecos_cidade_id NOT NULL,
    bairro_id         bigint
        CONSTRAINT nnc_pessoa_enderecos_bairro_id NOT NULL,
    logradouro_id     bigint
        CONSTRAINT nnc_pessoa_enderecos_logradouro_id NOT NULL,
    numero            bigint,
    complemento       VARCHAR2(255),
    referencia        VARCHAR2(100),
    situacao          SMALLINT DEFAULT 1,
    coordenada_id     bigint,
    cidade_bairros_id bigint NOT NULL
);

COMMENT ON COLUMN pessoa_enderecos.tipo IS
    'Tipo do Endereço
1-Residencial
2-Comercial
3-Entrega
4-Cobrança';

COMMENT ON COLUMN pessoa_enderecos.coordenada_id IS
    'Id da coordenada geográfica';
CREATE UNIQUE INDEX pessoa_enderecos_idx_pref_tipo ON pessoa_enderecos 
    ( 
     ( pessoa_id asc,
tipo asc,
preferencial asc ) where preferencial = 1
    ) 
;