problema con constrain

Eddy Diaz
18 de Julio del 2005
Necesito hacer una relacion entre dos tablas de la siguiente manera:

CREATE TABLE usuario (
Id_Usuario integer NOT NULL ,
Usuario varchar(30) NOT NULL ,
Password varchar(30) NOT NULL ,
Nombre integer default NULL,
Apellido varchar(30) NOT NULL ,
Direccion varchar(50) NOT NULL ,
Telefono varchar(20) default NULL,
Email varchar(50) NOT NULL ,
Perfil varchar(10) NOT NULL ,
Estilo varchar(20) default NULL,
CONSTRAINT Usuario_PK PRIMARY KEY (Id_Usuario,Usuario)
) ;

CREATE TABLE anotaciones (
Id_Anotacion integer NOT NULL ,
Id_Usuario integer NOT NULL ,
Fecha date NOT NULL,
Hora timestamp NOT NULL,
Descripcion varchar(200) NOT NULL ,
Id_Tipo_Anotacion integer NOT NULL ,
CONSTRAINT Anotaciones_PK PRIMARY KEY (Id_Anotacion,Id_Usuario),
CONSTRAINT Anotaciones_FK FOREIGN KEY (Id_Usuario) REFERENCES usuario(Id_Usuario)
) ;

pero me genera un error porque la llave de la tabla usuario es compuesta.

alguien sabe si se puede hacer de alguna otra forma o simplemente hacer la llave simple.

Christopher Pauquez
18 de Julio del 2005
Me da la impresión de que esa columna Usuario Varchar(30) no debería formar parte de la PK de la tabla USUARIO. Es suficiente con el ID_USUARIO.


Adrian
18 de Julio del 2005
Crea una restricción de tipo UNIQUE en la columna usuario.id_usuario y te dejará crear la fk.

jc3000
18 de Julio del 2005
NO.
Las FK's tienen que engancharse a la PK ENTERA

Hector Barrera
18 de Julio del 2005
Hola, para conectar la Fk debes hacerlo a las dos columnas de la PK de la tabla papa, es decir en la tabla hijo debes incluir las dos columnas llave de la tabla papa, asi:
Id_Usuario integer NOT NULL ,
Usuario varchar(30) NOT NULL ,

con lo cual la linea del constraint del fk, quedara asi:

CONSTRAINT Anotaciones_FK FOREIGN KEY (Id_Usuario, Usuario) REFERENCES usuario(Id_Usuario,Usuario)

Adicionalmente es preferible que utilices nombre diferentes en las tablas papa e hijo, para que al realizar tus consultas te omitas los alias, que te quitaran algo de tiempo.

Cordial Saludo

Hector Barrera