Re: Consulta teoria SQL (FK a dos tablas).

From: Raúl Andrés Duque Murillo <ra_duque(at)yahoo(dot)com(dot)mx>
To: "Terry Yapt" <yapt(at)technovell(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta teoria SQL (FK a dos tablas).
Date: 2008-06-11 09:26:19
Message-ID: E8772C476EEA47FD9F1BFECDCF996657@Principal
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

--------------------------------------------------
From: "Terry Yapt" <yapt(at)technovell(dot)com>
Sent: Wednesday, June 11, 2008 5:58 PM
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: [pgsql-es-ayuda] Consulta teoria SQL (FK a dos tablas).

> 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 ?????
>

Pues algo que se me ocurre (no se si aplica para la totalidad de tus
necesidades) es que tengas una UNICA tabla de "XUnidades" (fusionas Unidades
y Grupos) y en entradas tienes una FK a esta tabla "XUnidades".
Ahora para considerar la relación entre Tornillo y Tornillos, colocas una
relación circular para representar la relación "se compone de" o "es un
grupo de".

Atentamente,

RAUL DUQUE
Bogotá, Colombia

> 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
> );
>
> ==================================================
>
> --
> TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
>
> __________ Information from ESET Smart Security, version of virus
> signature database 3178 (20080611) __________
>
> The message was checked by ESET Smart Security.
>
> http://www.eset.com
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Raúl Andrés Duque Murillo 2008-06-11 09:33:31 Re: Consultas de asignacion
Previous Message Raúl Andrés Duque Murillo 2008-06-11 07:54:30 Re: Como puedo eliminar ' de una cadena