Uso de Reglas

From: "Zuleima Lara" <zlara(at)interactivedata(dot)com(dot)ve>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Uso de Reglas
Date: 2006-03-24 23:10:12
Message-ID: 038401c64f98$2982f770$2cee90c1@sky
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Buenas Tardes!

Tengo un Sistema que trabaja con niveles de actores, y cada uno de ellos tiene acciones sobre otros actores (Dependiendo del Nivel). Si uno de los actores pertenece a un nivel y no tiene niveles superiores que puedan ejercer acciones sobre ellos; debo registrar las acciones sin indicar quien pudo haberla ejecutado, y si posee otros niveles debo indicar la relacion de actores, ademas de quien ejecuta las acciones. Adicionalmente a todo esto, existe el siguiente inconveniente, si un actor se encuentra en un nivel y en principio no tiene niveles superiores, no se registraria quien ejecuta las acciones, pero al momento de que este mismo actor posea un nivel mas arriba, debo habilitar e indicar quien realizo la transaccion.

Ejemplo:

Nivel 1.- Compuesto por Distribuidores
Nivel 2.- Compuesto por Proveedores y los Distribuidores. (El Proveedor es superior al Distribuidor -> El Proveedor ejecuta acciones sobre el Distribuidor)

Estoy diseñando la Base de Datos y me encuentro con el siguiente problema:

Las Tablas de las acciones estan vinculadas a los Distribuidores, indicando a quien se le efectuara la accion; y adicionalmente vinculada con los Proveedores, para poder indicar quien realizo la accion (Caso: Nivel 2).

Si me encuentro en un Nivel 2, es NECESARIO quien ejecuta; pero si estoy en un Nivel 1 NO SE DEBE INDICAR. Por lo que mi duda es si Uds. consideran un buen diseño que yo coloque como clave foranea la relacion de arriba, solo que no la colocaria necesaria.

Le muestro unas tablas para ver si es mas comprensible mi planteamiento:

CREATE TABLE Distribuidores
(
id_distribuidor numeric not null,
nombreD text not null,
apellido text not null,
nivel numeric not null,
constraint PK_DISTRIBUIDOR primary key (id_distribuidor)
);

CREATE TABLE Proveedores
(
id_proveedor numeric not null,
nombreP text not null,
apellido text not null,
constraint PK_PROVEEDOR primary key (id_proveedor)
);

create table LOGINGRESODIST (
CODINGRSDIST SERIAL not null,
id_proveedor numeric null,
id_distribuidor numeric not null,
FECHA DATE not null,
HORA TIME not null,
constraint codIngrsDist primary key (CODINGRSDIST)
);

alter table LOGINGRESODIST
add constraint FK_LOGINGREDTS foreign key (id_proveedor)
references Proveedores ( id_proveedor)
on delete restrict on update restrict;

alter table LOGINGRESODIST
add constraint FK_LOGINGREDT foreign key (id_distribuidor)
references Distribuidores (id_distribuidor)
on delete restrict on update restrict;

La tabla "LOGINGRESODIST" indica una accion, que indica cuando son ingreados los distribuidores, y ademas con el campo "id_proveedor" indica quien ingreso los datos, siendo este ultimo no necesario para el caso del Nivel 1. Esta tabla es solo una de las varias acciones que se pueden realizar.

Ahora pues bien, Uds. consideran que yo podria mediante "reglas" realizar la restriccion de que si es el Nivel 2, entonces pueda rechazar las inserciones cuando no sea suministrado el "id_proveedor", o existe otra manera de hacer lo que necesito?.

De antemano Muchas Gracias!!!!!

Zuleima Lara.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Carlos Rivas 2006-03-24 23:41:47 USO de BETWEEN !
Previous Message JOHN ALEXANDER DUARTE MORENO 2006-03-24 22:09:56 error en pg_hba SSL off, Error al migrar datos via provedor