Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/06/2010, 23:10
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 19.093
Antigüedad: 7 años
Puntos: 2154
Respuesta: error al crear tablas en mysql 5 modo consola

Bueno, el error es bastante simple: Estás declarado FOREIGN KEYs incorrectamente en esa y otras tablas.
Recuerda que una FK es un campo o conjunto de campos que hacen referencia a la PRIMARY KEY de otra tabla. No hacen referencia a ninguna otra cosa que no sea una PK y sólo una PK. Eso significa que no puede haber FK definidas referenciadas a la misma tabla y que pertenezcan a campos que no sean la PK de esa tabla...

En tu caso haces esto:
Código MySQL:
Ver original
  1. CREATE TABLE facturacliente
  2. (id_folio INT not null,
  3. id_c INT not null,
  4. rfc VARCHAR(35) null,
  5. tipo_hab VARCHAR(40) not null,
  6. num_hab INT not null,
  7. fecha_salida DATE not null,
  8. total DECIMAL(8,2) not null,
  9. constraint PK_fact_folio primary key (id_folio),
  10. constraint FK_fact_idc foreign key (id_c) references cliente(id_c),
  11. constraint FK_fact_RFC foreign key (rfc) references cliente(rfc), -- <-- ESTE NO ES PK EN SU TABLA
  12. constraint FK_fact_tiphab foreign key (tipo_hab) references habitacion(tipo_hab), -- <-- ESTE NO ES PK EN SU TABLA
  13. constraint FK_fact_nohab foreign key (num_hab) references habitacion(num_hab) -- <-- ESTE ESTÁ MAL DEFINIDO
  14. );
El último están mal definido porque la PK de origen es de dos campos, y por tanto la FK debe definirse sobre los dos campos al mismo tiempo, y el primero de ambos no existe en esta tabla.
Fuera de eso, las relaciones entre Hotel, Habitación, Cliente y Reserva me paree que estás mal definidas. Especialmente en lo que hace a Hotel y Habitación.

Tip final: NUMERIC no es un tipo nativo de MySQL, pero sí lo reconoce por compatibilidad. Aún así, MySQL convertirá el NUMERIC en DECIMAL, por eso lo cambié directamente.
Cualquier duda consulta el manual de referencia (11. Tipos de columna)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)