On Mon, 19 Aug 2002, 31 wrote:

> Intento hacer una tabla con dos columnas de clave primaria que a su vez 
> son claves foraneas, y me contesta esto
> 
> psql:plantas.sql:28: ERROR:  number of key attributes in referenced 
> table must be equal to foreign key
>         Illegal FOREIGN KEY definition references "clons"
> 
> y no consigo entender porque me da este error, os pego el archivo de 
> creaci�n de las tablas a ver si alguien ve alguna forma de solucionarlo
> 
> create table nais (
>         nome varchar(15) primary key,
>         procedencia varchar(30),
>         precio money,
>         dxerminaci�n date,
>         tipo varchar(40)
> );
> create table clons (
>         nome varchar(15) references nais,
>         dclon date,
>         dtrasplante date,
>         dcolleita date,
>         comentarios varchar(40),
>         primary key(nome, dclon)
> );
> create table podas (
>         nome varchar(15) references clons,
>         dclon date references clons,
>         dpoda date
> );

A mi me parece que intentas definir una clave foranea nome varchar(15),
sobre una clave primaria (varchar(15), date).

Supongo que lo  m�s sencillo ser�a usar claves primarias de tipo SERIAL.
Equivale a usar secuencias. De esa manera obtienes una clave num�rica
facilmente referenciable desde otras tablas mediante un int4.

Si adem�s de esto deseas evitar duplicidados puedes usar
create unique index (nome, dclon)

Bueno todo esto son ideas que deber�an ayudarte. Una soluci�n ser�a
la siguiente aunque puede haber otras formas de hacerlo a mi me gusta
relacionar claves de tablas distintas mediante simples claves num�ricas
(Solo 4 bytes).

 
 create table nais (
         nais_key       SERIAL,
         nome varchar(15),
         procedencia varchar(30),
         precio money,
         dxerminaci�n date,
         tipo varchar(40),
         unique index (nome),
         primary key (nais_key)
 );
 create table clons (
         clon_key       SERIAL,
         nais   int4 references nais,
         dclon date,
         dtrasplante date,
         dcolleita date,
         comentarios varchar(40),
         unique index (nais, dclon),
         primary key (clon_key)
 );
 create table podas (
         podas_key      SERIAL,
         clons int4 references clons,
         dpoda date,
         unique index (nome),
         primary key (podas_key)
 );



Un saludo

Antonio Castro

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        /\     /\      Ciberdroide Inform�tica (Tienda de Linux)
          \\W//            <<< http://www.ciberdroide.com >>>
         _|0 0|_                                                    
+-oOOO--(___o___)--OOOo----------------------------------------------------+ 
|  . . . . U U . . . . Antonio Castro Snurmacher  [EMAIL PROTECTED]  |  
|  . . . . . . . . . .                                                     | 
+()()()----------()()()----------------------------------------------------+
| *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** |
| <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>>            |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+


Responder a