Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/05/2010, 10:53
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Me da error 1005 al crear una tabla y no puedo solucionarlo

Tenías dos errores:
1) Había un espacio entremedio de un nombre de campo en una FK.
2) Estabas definiendo una PK multicampo en ARTICULO, que no la necesita tan larga, y luego en COMPRA declarabas una FK hacia ARTICULO usando un sólo campo. Una FK es un campo o conjunto de campos que apunta a una PK de otra tabla. A toda la PK; si la misma tiene más de un campo, todos ellos deben estar reflejados en la tabla que la use de FK.
Código MySQL:
Ver original
  1. CREATE DATABASE proyecto;
  2. use proyecto;
  3.  
  4. /* TABLAS */
  5.  
  6. create table componente
  7. (
  8. nombrecomponente varchar(30) PRIMARY KEY
  9.  
  10. create table categoria
  11. (
  12. nombrecategoria varchar(30) PRIMARY KEY
  13.  
  14. create table articulo
  15. (
  16. nomarticulo varchar(30) NOT NULL,
  17. nombrecomponente varchar(30) NOT NULL,
  18. nombrecategoria varchar(30) NOT NULL,
  19. marca varchar(25) NOT NULL,
  20. precio float(9) NOT NULL,
  21. descripcion varchar(250) NOT NULL,
  22. primary key (nomarticulo),
  23. foreign key (nombrecomponente) references componente (nombrecomponente),
  24. foreign key (nombrecategoria) references categoria (nombrecategoria)
  25.  
  26. CREATE TABLE usuario
  27. (
  28. login varchar(30) primary key,
  29. privilegio varchar(15)NOT NULL
  30.  
  31. create table compra
  32. (
  33. fecha datetime,
  34. nomarticulo varchar(30),
  35. login varchar(30),
  36. primary key(nomarticulo,login,fecha),
  37. foreign key(nomarticulo) references articulo(nomarticulo),
  38. foreign key(login) references usuario(login)
  39.  
  40. /* INSERCION */
  41.  
  42. INSERT INTO usuario VALUES('admin','xd','si');
  43. INSERT INTO usuario VALUES('user','xd','no');
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)