Re: fk con parte de un campo

Lists: pgsql-es-ayuda
From: Oswaldo Hernández <listas(at)soft-com(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: fk con parte de un campo
Date: 2006-08-02 09:47:08
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola a todos,

Estoy intentando crear una fk con parte de un campo:

CREATE TABLE pruebas.t1
(
c1 varchar(3) NOT NULL,
CONSTRAINT pk_t1 PRIMARY KEY (c1)
)
WITHOUT OIDS;
ALTER TABLE pruebas.t1 OWNER TO postgres;

CREATE TABLE pruebas.t2
(
c2 varchar(10) NOT NULL,
CONSTRAINT pk_t2 PRIMARY KEY (c2)
)
WITHOUT OIDS;
ALTER TABLE pruebas.t2 OWNER TO postgres;

soft-com=# ALTER TABLE pruebas.t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY (substr(c2,1,3)) REFERENCES
pruebas.t1 (c1) ON UPDATE RESTRICT ON DELETE RESTRICT;

ERROR: syntax error at or near "(" en el carácter 67
LINEA 1: ...bas.t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY (substr(c2,1,3)) ...
^

¿Es realmente un error de sintaxis? ó ¿no es posible hacer una fk de esta forma?

Gracias,

--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************


From: "Linder Poclaba" <linder(dot)poclaba(at)gmail(dot)com>
To: Oswaldo Hernández <listas(at)soft-com(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: fk con parte de un campo
Date: 2006-08-02 13:36:38
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

El día 2/08/06, Oswaldo Hernández <listas(at)soft-com(dot)es> escribió:
>
> Hola a todos,
>
> Estoy intentando crear una fk con parte de un campo:
>
>
> CREATE TABLE pruebas.t1
> (
> c1 varchar(3) NOT NULL,
> CONSTRAINT pk_t1 PRIMARY KEY (c1)
> )
> WITHOUT OIDS;
> ALTER TABLE pruebas.t1 OWNER TO postgres;
>
>
> CREATE TABLE pruebas.t2
> (
> c2 varchar(10) NOT NULL,
> CONSTRAINT pk_t2 PRIMARY KEY (c2)
> )
> WITHOUT OIDS;
> ALTER TABLE pruebas.t2 OWNER TO postgres;
>
>
> soft-com=# ALTER TABLE pruebas.t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY
> (substr(c2,1,3)) REFERENCES
> pruebas.t1 (c1) ON UPDATE RESTRICT ON DELETE RESTRICT;
>
> ERROR: syntax error at or near "(" en el carácter 67
> LINEA 1: ...bas.t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY (substr(c2,1,3))
> ...
> ^
>
> ¿Es realmente un error de sintaxis?

Si es un error de sintaxis, cuando defines llaves foraneas en FOREIGN
KEY(aquí va un atributo de la tabla) ejm: FOREIGN KEY(c2) y no así una valor

ó ¿no es posible hacer una fk de esta forma?

ALTER TABLE pruebas.t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY (c2) REFERENCES
pruebas.t1 (c1) ;

algo así.

Saludos

> Gracias,
>
> --
> *****************************************
> Oswaldo Hernández
> oswaldo (@) soft-com (.) es
> *****************************************
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 1: para suscribirte y desuscribirte, visita
> http://archives.postgresql.org/pgsql-es-ayuda
>

--
Linder Poclaba Lázaro.
Desarrollador Key Optimal Solutions KEYOS.
Usa Software Libre y obtiene tú libertad.


From: "Marco Vinicio Jimenez Rojas" <viniciojr(at)gmail(dot)com>
To: "Linder Poclaba" <linder(dot)poclaba(at)gmail(dot)com>
Cc: Oswaldo Hernández <listas(at)soft-com(dot)es>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: fk con parte de un campo
Date: 2006-08-02 15:26:22
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hasta donde se una referencia foranea se hace a una columna o campo en la
tabla, si deseas hacer eso seria mejor que separe en dos columnas y asi
haces la referencia a la columna que necesitas.

2006/8/2, Linder Poclaba <linder(dot)poclaba(at)gmail(dot)com>:
>
>
>
> El día 2/08/06, Oswaldo Hernández <listas(at)soft-com(dot)es> escribió:
>
> > Hola a todos,
> >
> > Estoy intentando crear una fk con parte de un campo:
> >
> >
> > CREATE TABLE pruebas.t1
> > (
> > c1 varchar(3) NOT NULL,
> > CONSTRAINT pk_t1 PRIMARY KEY (c1)
> > )
> > WITHOUT OIDS;
> > ALTER TABLE pruebas.t1 OWNER TO postgres;
> >
> >
> > CREATE TABLE pruebas.t2
> > (
> > c2 varchar(10) NOT NULL,
> > CONSTRAINT pk_t2 PRIMARY KEY (c2)
> > )
> > WITHOUT OIDS;
> > ALTER TABLE pruebas.t2 OWNER TO postgres;
> >
> >
> > soft-com=# ALTER TABLE pruebas.t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY
> > (substr(c2,1,3)) REFERENCES
> > pruebas.t1 (c1) ON UPDATE RESTRICT ON DELETE RESTRICT;
> >
> > ERROR: syntax error at or near "(" en el carácter 67
> > LINEA 1: ...bas.t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY (substr(c2,1,3))
> > ...
> > ^
> >
> > ¿Es realmente un error de sintaxis?
>
>
> Si es un error de sintaxis, cuando defines llaves foraneas en FOREIGN
> KEY(aquí va un atributo de la tabla) ejm: FOREIGN KEY(c2) y no así una valor
>
>
> ó ¿no es posible hacer una fk de esta forma?
>
>
> ALTER TABLE pruebas.t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY (c2) REFERENCES
> pruebas.t1 (c1) ;
>
> algo así.
>
> Saludos
>
> Gracias,
> >
> > --
> > *****************************************
> > Oswaldo Hernández
> > oswaldo (@) soft-com (.) es
> > *****************************************
> >
> > ---------------------------(fin del mensaje)---------------------------
> > TIP 1: para suscribirte y desuscribirte, visita
> > http://archives.postgresql.org/pgsql-es-ayuda
> >
>
>
>
> --
> Linder Poclaba Lázaro.
> Desarrollador Key Optimal Solutions KEYOS.
> Usa Software Libre y obtiene tú libertad.
>

--
---------------------------------
Vinicio Jimenez Rojas
TI DIPCR
-----------------------
CCACR.ORG
-----------------------
MVJR


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Oswaldo Hernández <listas(at)soft-com(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: fk con parte de un campo
Date: 2006-08-02 19:32:39
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Oswaldo Hernández escribió:
> Hola a todos,
>
> Estoy intentando crear una fk con parte de un campo:
>
>
> CREATE TABLE pruebas.t1
> (
> c1 varchar(3) NOT NULL,
> CONSTRAINT pk_t1 PRIMARY KEY (c1)
> )
> WITHOUT OIDS;
> ALTER TABLE pruebas.t1 OWNER TO postgres;
>
>
> CREATE TABLE pruebas.t2
> (
> c2 varchar(10) NOT NULL,
> CONSTRAINT pk_t2 PRIMARY KEY (c2)
> )
> WITHOUT OIDS;
> ALTER TABLE pruebas.t2 OWNER TO postgres;
>
>
> soft-com=# ALTER TABLE pruebas.t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY
> (substr(c2,1,3)) REFERENCES pruebas.t1 (c1) ON UPDATE RESTRICT ON DELETE
> RESTRICT;
>
> ERROR: syntax error at or near "(" en el carácter 67
> LINEA 1: ...bas.t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY (substr(c2,1,3)) ...
> ^
>
> ¿Es realmente un error de sintaxis? ó ¿no es posible hacer una fk de esta
> forma?

Creo que la primera forma normal dice que no debes tener campos
multivaluados. Te sugiero separar c1 en varias columnas.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


From: Oswaldo Hernández <listas(at)soft-com(dot)es>
To: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: fk con parte de un campo
Date: 2006-08-03 08:38:43
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Alvaro Herrera escribió:

>
> Creo que la primera forma normal dice que no debes tener campos
> multivaluados. Te sugiero separar c1 en varias columnas.
>

Ok, Replanteare el diseño.
Gracias

--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************


From: Oswaldo Hernández <listas(at)soft-com(dot)es>
To: Marco Vinicio Jimenez Rojas <viniciojr(at)gmail(dot)com>
Cc: Linder Poclaba <linder(dot)poclaba(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: fk con parte de un campo
Date: 2006-08-03 08:38:53
Message-ID: [email protected]
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-es-ayuda

Marco Vinicio Jimenez Rojas escribió:
> Hasta donde se una referencia foranea se hace a una columna o campo en
> la tabla, si deseas hacer eso seria mejor que separe en dos columnas y
> asi haces la referencia a la columna que necesitas.
>

Ok. Dividiré el campo.
Gracias.

--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************