Hola Jorge

Pruebe con esto:


create table predio(
    tipo integer not null,
    nom varchar(40),
    apto char(6),
    constraint ck_tipo_predio_de_1_a_5 check(tipo >= 1 and tipo<=5),
    constraint ck_other check (case when tipo in (1,2) then  nom is null
and apto is null
          when tipo in (3) then nom is not null
          when tipo in (4,5) then apto is not null and nom is not null end)
);

2016-02-25 14:33 GMT-05:00 Jorge Lobo Arteaga <jorgelo...@hotmail.com>:

> Buenas tardes,
>
>
> Tengo una tabla así
>
>
> create table predio(
>
>     tipo integer not null,
>
>     nom varchar(40),
>
>     apto char(6),
>
>     constraint ck_tipo_predio_de_1_a_5 check(tipo >= 1 and tipo<=5)
>
> );
>
>
> 'nom' y 'apto' no son NOT NULL debido a que la obligatoriedad de dichos
> campos dependen del valor del campo 'tipo',
>
> teniendo en cuenta las siguientes condiciones.
>
>
> El campo 'tipo' almacena los tipos de predios así: 1-Casa, 2-Casa lote,
> 3-Apartamento, 4-Edificio, 5-Conjunto cerrado.
>
> El campo 'nom' almacena el nombre del predio, solo si el tipo de predio es
> 3, 4 o 5. Caso contrario será NULL.
>
> El campo 'apto' almacena el número de apartamento o vivienda, solo si el
> tipo de predio es 4 o 5. Caso contrario será NULL.
>
> Los campos 'nom' y 'apto' serán NULL, solo si tipo de predio es 1 o 2.
>
>
> No he podido hacer que las restricciones de tablas funcionen usando
> CHECK.  He insistido bastante, pero creo que solo se va a poder
>
> usando TRIGGERS.
>
>
> Gracias por su apoyo.
>
>
>
>
>
>
>


-- 
Cordialmente,

Ing. Hellmuth I. Vargas S.
Esp. Telemática y Negocios por Internet
Oracle Database 10g Administrator Certified Associate
EnterpriseDB Certified PostgreSQL 9.3 Associate

Responder a