Consulta teoria SQL (FK a dos tablas).

From: Terry Yapt <yapt(at)technovell(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Consulta teoria SQL (FK a dos tablas).
Date: 2008-06-11 15:58:11
Message-ID: 484FF613.7040106@technovell.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola a todos, a ver que opinais....

Una cuestión básica, supongamos el siguiente esquema de tablas:

http://www.technovell.com/mailinglist/supuestoIIX061101.jpg

Donde un elemento de la tabla UNIDADES, puede ser un elemento UNICO (no
estar incluido en ningún grupo) o bien estar incluido dentro de un grupo.
La tabla entradas, es para las entradas de artículos. Puede entrar un
artículo UNICO (Foreign Key a Unidades) o un artículo de Grupo (foreign
Key de Grupos). Y he aquí el problema.

Dicho esquema, está incompleto, pues la tabla entradas, tendría que
tener una FK a la tabla UNIDADES _* Y *_ otra a la tabla GRUPOS.
Pues de las dos tablas nos pueden venir entradas. Pero creo que esto no
es posible, pues una de las dos FK (la que no se cumpliese) se quejaria
en el momento de efectuar la carga de datos en la tabla ENTRADAS.

Datos de ejemplo
(Tabla Grupos):
* _Tornillo*s*_

(Tabla unidades):
* Tornillo (pertenece a grupo _Tornillo*s*)._
* Clavo

(Tabla Entradas):
* Tornillo, 01/01/2008, Entrada de UN Tornillo.
* Clavo, 01/01/2008, Entrada de UN Clavo.
* _Tornillo*s*, _01/01/2008, Entrada de UN grupo de Tornillos.

Como se solucionaría, teoricamente, este problema ?????

No sé si me he explicado correctamente.

======= Por si a alguien le interesa probar algo ================
-- DROP TABLE Entradas
DROP TABLE IF EXISTS "Entradas" CASCADE;

-- CREATE TABLE Entradas
CREATE TABLE "Entradas" (
"CodigoUnidad" varchar(10) NOT NULL,
"FechaEntrada" date NOT NULL,
"Descripcion" varchar(150),
CONSTRAINT "pk_Entradas" PRIMARY KEY("CodigoUnidad","FechaEntrada")
);

-- DROP TABLE Grupos
DROP TABLE IF EXISTS "Grupos" CASCADE;

-- CREATE TABLE Grupos
CREATE TABLE "Grupos" (
"CodigoGrupo" varchar(10) NOT NULL,
"DescripcionGrupo " varchar(50),
CONSTRAINT "pk_Grupos" PRIMARY KEY("CodigoGrupo")
);

-- DROP TABLE Unidades
DROP TABLE IF EXISTS "Unidades" CASCADE;

-- CREATE TABLE Unidades
CREATE TABLE "Unidades" (
"CodigoUnidad" varchar(10) NOT NULL,
"DescripcionUnidad " varchar(50),
"PerteneceAGrupo " varchar(10),
CONSTRAINT "pk_Unidades" PRIMARY KEY("CodigoUnidad"),
CONSTRAINT "Ref_Unid_Grup" FOREIGN KEY ("PerteneceAGrupo ")
REFERENCES "Grupos"("CodigoGrupo")
MATCH SIMPLE
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE
);

==================================================

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Marcelo Retamal Vallejos 2008-06-11 16:06:43 Re: Respaldo de imagenes
Previous Message mAyErLiNg .M. 2008-06-11 15:49:29 RE: Manejo de Fechas