Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group