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