Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

No consigo compilar esta base de datos

Estas en el tema de No consigo compilar esta base de datos en el foro de Bases de Datos General en Foros del Web. Buenas, me gustaria que me ayudarais a resolver mis problemas porque me estoy desesperando totalemente He creado esta base de datos, pero no consigo compilarla ...
  #1 (permalink)  
Antiguo 29/01/2013, 06:10
Avatar de abeltxu  
Fecha de Ingreso: enero-2013
Ubicación: Segovia
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
No consigo compilar esta base de datos

Buenas, me gustaria que me ayudarais a resolver mis problemas porque me estoy desesperando totalemente He creado esta base de datos, pero no consigo compilarla No se mis fallos....

Espero que me podais ayudar :(
Aqui os lo dejo a ver si encontrais alguna solucion :S

Código MySQL:
Ver original
  1. CREATE DATABASE IF NOT EXISTS hotel;
  2. GRANT ALL ON hotel.* TO 'root'@'localhost' IDENTIFIED BY '';
  3. USE hotel;
  4.  
  5. DROP TABLE IF EXISTS formadepago;
  6. DROP TABLE IF EXISTS factura;
  7. DROP TABLE IF EXISTS cliente;
  8. DROP TABLE IF EXISTS habitacion;
  9. DROP TABLE IF EXISTS empleado;
  10. DROP TABLE IF EXISTS proveedor;
  11. DROP TABLE IF EXISTS factura_proveedor;
  12. DROP TABLE IF EXISTS servicio;
  13. DROP TABLE IF EXISTS es_incluido;
  14.  
  15. CREATE TABLE formadepago (
  16. Id INT(10) NOT NULL,
  17. Interés FLOAT(3,2) UNIQUE,
  18.     CONSTRAINT PK_formadepago PRIMARY KEY (Id) ) ENGINE=INNODB;
  19.    
  20. CREATE TABLE factura (
  21. Codigo_f INT(5) NOT NULL,
  22. Fecha_entrada DATE,
  23. Fecha_salida DATE,
  24. Importe_total FLOAT(6,2),
  25. Supletoria ENUM ('Si','No'),
  26. Id INT(10) NOT NULL,
  27. DNI CHAR(9) NOT NULL,
  28. Numero INT(3) NOT NULL,
  29.     CONSTRAINT PK_factura PRIMARY KEY (Codigo_f),
  30.     CONSTRAINT FK_factura_formadepago FOREIGN KEY (Id) REFERENCES formadepago(Id) ON DELETE CASCADE ON UPDATE CASCADE,
  31.     CONSTRAINT FK_factura_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI) ON DELETE CASCADE ON UPDATE CASCADE,
  32.         CONSTRAINT FK_factura_hab FOREIGN KEY (Numero) REFERENCES habitacion(Numero) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=INNODB;
  33.  
  34.        
  35. CREATE TABLE cliente (
  36. DNI CHAR(9) NOT NULL,
  37. Nombre CHAR(50),
  38. Apellidos CHAR(50),
  39. Domicilio CHAR(50),
  40. Telefono INT(9),
  41. Anterioridad ENUM ('Si','No'),
  42.     CONSTRAINT PK_cliente PRIMARY KEY (DNI) ) ENGINE=INNODB;
  43.    
  44. CREATE TABLE habitacion (
  45. Numero INT(3) NOT NULL,
  46. Superficie INT(3),
  47. Bar ENUM ('Si','No'),
  48. Terraza ENUM ('Si','No'),
  49. Baño ENUM ('Si','No'),
  50. TV ENUM ('Si','No'),
  51. Nº_camas INT(1),
  52. Fecha_reserva DATE,
  53. Estancia
  54. Fecha_salida DATE,
  55. Estado ENUM ('Libre','Ocupada'),
  56. Tipo ENUM ('Individual','Doble') NOT NULL,
  57. DNI CHAR(9) NOT NULL,
  58.     CONSTRAINT FK_habitacion_precio FOREIGN KEY (Tipo) REFERENCES precio(Tipo),
  59.     CONSTRAINT FK_habitacion_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI),
  60.     CONSTRAINT PK_habitacion PRIMARY KEY (Numero) ) ENGINE=INNODB;
  61.    
  62. CREATE TABLE precio (
  63. Tipo ENUM ('Individual','Doble') NOT NULL,
  64. CONSTRAINT PK_precio PRIMARY KEY (Tipo) ) ENGINE=INNODB;
  65. CREATE TABLE limpia (
  66. Fecha DATE,
  67. Numero INT(3) NOT NULL,
  68. Nº_registro INT(3) NOT NULL,
  69.     CONSTRAINT PK_limpia PRIMARY KEY (Fecha),
  70.     CONSTRAINT FK_limpia_habitacion FOREIGN KEY (Numero) REFERENCES habitacion(Numero),
  71.     CONSTRAINT FK_limpia_empleados FOREIGN KEY (Nº_registro) REFERENCES empleados(Nº_registro) ) ENGINE=INNODB;
  72.    
  73. CREATE TABLE  empleado (
  74. Nº_registro INT(3) NOT NULL,
  75. Nombre CHAR(50),
  76. Fecha_incorporacion DATE,
  77. Sueldo FLOAT (6,2)
  78. NIF CHAR(9) NOT NULL,
  79. Codigo_s INT(5) NOT NULL,    
  80.     CONSTRAINT PK_empleado PRIMARY KEY (Nº_registro),
  81.     CONSTRAINT FK_empleado_proveedor FOREIGN KEY (NIF) REFERENCES proveedor(NIF),
  82.     CONSTRAINT FK_empleado_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s) ) ENGINE=INNODB;
  83.    
  84. CREATE TABLE proveedor (
  85. NIF CHAR(9) NOT NULL,
  86. Nombre_comercial CHAR(50) UNIQUE,
  87. Direccion CHAR(50),
  88. Nº_registro INT(3) NOT NULL,
  89. Codigo_fp INT(5) NOT NULL,
  90.     CONSTRAINT PK_proveedor PRIMARY KEY (Nº_registro),
  91.     CONSTRAINT FK_proveedor_empleado FOREIGN KEY (Nº_registro) REFERENCES empleado(Nº_registro),
  92.     CONSTRAINT FK_proveedor_factura_proveedor FOREIGN KEY (Codigo_fp) REFERENCES factura_proveedor(Codigo_fp) ) ENGINE=INNODB;
  93.    
  94. CREATE TABLE factura_proveedor (
  95. Codigo_fp INT(5) NOT NULL,
  96. Fecha DATE,
  97. Importe FLOAT(6,2),
  98. Encargado CHAR(50),
  99. NIF CHAR(9) NOT NULL,
  100.     CONSTRAINT PK_factura_proveedor PRIMARY KEY (Codigo_fp),
  101.     CONSTRAINT FK_factura_proveedor_proveedor FOREIGN KEY (NIF) REFERENCES proveedor(NIF) ) ENGINE=INNODB;
  102.    
  103. CREATE TABLE servicio (
  104. Codigo_s VARCHAR(9),
  105. Descripcion CHAR(50) UNIQUE,
  106. Fecha DATE,
  107. Coste FLOAT(5,2),
  108. Nº_registro INT(3) NOT NULL,
  109. CONSTRAINT PK_servicio PRIMARY KEY (Codigo_s),
  110. CONSTRAINT FK_servicio_empleado FOREIGN KEY (Nº_registro) REFERENCES empleado(Nº_registro) ) ENGINE=INNODB;
  111.  
  112. CREATE TABLE usa_a (
  113. Fecha DATE NOT NULL,
  114. Codigo_s INT(5),
  115. Codigo_s_usado INT(5),
  116.     CONSTRAINT FK_usa_a_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s),
  117.     CONSTRAINT PK_usa_a PRIMARY KEY (Fecha) ) ENGINE=INNODB;
  118.  
  119. CREATE TABLE es_incluido (
  120. Codigo_f INT(5) NOT NULL,
  121. Codigo_s INT(5) NOT NULL,
  122. CONSTRAINT FK_es_incluido_factura FOREIGN KEY (Codigo_f) REFERENCES factura(Codigo_f),
  123. CONSTRAINT FK_es_incluido_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s) ) ENGINE=INNODB;



P.D.Esta base de datos la he hecho con el SQLyog

Última edición por gnzsoloyo; 29/01/2013 a las 06:42 Razón: Código SQL no etiquetado...
  #2 (permalink)  
Antiguo 29/01/2013, 10:30
Avatar de 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: No consigo compilar esta base de datos

Por lo pronto, verifica en ese script que ninguna FK se esté creando antes de que se haya creado la tabla a la que hace referencia.
Por ejemplo la tabla LIMPIA se crea antes que EMPLEADO, pero lleva la FK de la segunda... que aún no existe.
Ese tipo de cosas genera un error de ejecución.

Otra cosa es que te asegures que no haya caracteres extendidos (letras acentuadas, símbolos, etc), porque el SQL no se lleva bien con ellos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 29/01/2013, 11:19
Avatar de abeltxu  
Fecha de Ingreso: enero-2013
Ubicación: Segovia
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: No consigo compilar esta base de datos

Otra cosa que necesitaba es realizar triggers o procedimientos, y no tengo ni la menor idea de como realizarlos.

Necesito un trigger que haga lo siguiente: La base de datos es de un hotel, necesito un trigger que haga que el atributo "estado" dentro de la tabla habitacion, sea libre u ocupada. Por lo tanto cuando la habitacion este ocupada, no este libre y viceversa.


Necesito hace otro trigger que haga lo siguiente:
Al elegir la forma de pago, se agregue un impuesto.
Ejemplo: si yo elijo pagar con targeta, tendre que pagar un 5% mas de valor añadido
si yo elijo pagar con talón tendre que pagar un 7% mas de valor añadido
y si pago en efectivo pues aplicar un 3% de valor añadido

Y otro trigger parecido al primero es que cuando yo eliga una habitacion "individual", no pueda ser "doble"
A ver si podeis ayudarme con los triggers

Intentare cambiar el orden, a ver si asi funciona... Si no ya respondo por aqui :)
Muchas gracias!!
  #4 (permalink)  
Antiguo 29/01/2013, 11:39
Avatar de abeltxu  
Fecha de Ingreso: enero-2013
Ubicación: Segovia
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: No consigo compilar esta base de datos

Quedaria asi ahora:

Código MySQL:
Ver original
  1. CREATE DATABASE IF NOT EXISTS hotel;
  2. GRANT ALL ON hotel.* TO 'root'@'localhost' IDENTIFIED BY '';
  3. USE hotel;
  4.  
  5. DROP TABLE IF EXISTS formadepago;
  6. DROP TABLE IF EXISTS factura;
  7. DROP TABLE IF EXISTS cliente;
  8. DROP TABLE IF EXISTS habitacion;
  9. DROP TABLE IF EXISTS empleado;
  10. DROP TABLE IF EXISTS proveedor;
  11. DROP TABLE IF EXISTS factura_proveedor;
  12. DROP TABLE IF EXISTS servicio;
  13. DROP TABLE IF EXISTS es_incluido;
  14.  
  15. CREATE TABLE formadepago (
  16. Id INT(10) NOT NULL,
  17. Interés FLOAT(3,2) UNIQUE,
  18.     CONSTRAINT PK_formadepago PRIMARY KEY (Id) ) ENGINE=INNODB;
  19.    
  20. CREATE TABLE cliente (
  21. DNI CHAR(9) NOT NULL,
  22. Nombre CHAR(50),
  23. Apellidos CHAR(50),
  24. Domicilio CHAR(50),
  25. Telefono INT(9),
  26. Anterioridad ENUM ('Si','No'),
  27.     CONSTRAINT PK_cliente PRIMARY KEY (DNI) ) ENGINE=INNODB;
  28.    
  29. CREATE TABLE precio (
  30. Tipo ENUM ('Individual','Doble') NOT NULL,
  31. CONSTRAINT PK_precio PRIMARY KEY (Tipo) ) ENGINE=INNODB;
  32.  
  33. CREATE TABLE habitacion (
  34. Numero INT(3) NOT NULL,
  35. Superficie INT(3),
  36. Bar ENUM ('Si','No'),
  37. Terraza ENUM ('Si','No'),
  38. Baño ENUM ('Si','No'),
  39. TV ENUM ('Si','No'),
  40. Nº_camas INT(1),
  41. Fecha_reserva DATE,
  42. Estancia
  43. Fecha_salida DATE,
  44. Estado ENUM ('Libre','Ocupada') NOT NULL,
  45. Tipo ENUM ('Individual','Doble') NOT NULL,
  46. DNI CHAR(9) NOT NULL,
  47.     CONSTRAINT FK_habitacion_precio FOREIGN KEY (Tipo) REFERENCES precio(Tipo),
  48.     CONSTRAINT FK_habitacion_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI),
  49.     CONSTRAINT PK_habitacion PRIMARY KEY (Numero) ) ENGINE=INNODB;
  50.  
  51. CREATE TABLE factura (
  52. Codigo_f INT(5) NOT NULL,
  53. Fecha_entrada DATE,
  54. Fecha_salida DATE,
  55. Importe_total FLOAT(6,2),
  56. Supletoria ENUM ('Si','No'),
  57. Id INT(10) NOT NULL,
  58. DNI CHAR(9) NOT NULL,
  59. Numero INT(3) NOT NULL,
  60.     CONSTRAINT PK_factura PRIMARY KEY (Codigo_f),
  61.     CONSTRAINT FK_factura_formadepago FOREIGN KEY (Id) REFERENCES formadepago(Id) ON DELETE CASCADE ON UPDATE CASCADE,
  62.     CONSTRAINT FK_factura_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI) ON DELETE CASCADE ON UPDATE CASCADE,
  63.         CONSTRAINT FK_factura_hab FOREIGN KEY (Numero) REFERENCES habitacion(Numero) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=INNODB;
  64.  
  65. CREATE TABLE proveedor (
  66. NIF CHAR(9) NOT NULL,
  67. Nombre_comercial CHAR(50) UNIQUE,
  68. Direccion CHAR(50),
  69. Nº_registro INT(3) NOT NULL,
  70. Codigo_fp INT(5) NOT NULL,
  71.     CONSTRAINT PK_proveedor PRIMARY KEY (Nº_registro),
  72.     CONSTRAINT FK_proveedor_empleado FOREIGN KEY (Nº_registro) REFERENCES empleado(Nº_registro),
  73.     CONSTRAINT FK_proveedor_factura_proveedor FOREIGN KEY (Codigo_fp) REFERENCES factura_proveedor(Codigo_fp) ) ENGINE=INNODB;
  74.  
  75. CREATE TABLE factura_proveedor (
  76. Codigo_fp INT(5) NOT NULL,
  77. Fecha DATE,
  78. Importe FLOAT(6,2),
  79. Encargado CHAR(50),
  80. NIF CHAR(9) NOT NULL,
  81.     CONSTRAINT PK_factura_proveedor PRIMARY KEY (Codigo_fp),
  82.     CONSTRAINT FK_factura_proveedor_proveedor FOREIGN KEY (NIF) REFERENCES proveedor(NIF) ) ENGINE=INNODB;
  83.  
  84. CREATE TABLE servicio (
  85. Codigo_s VARCHAR(9),
  86. Descripcion CHAR(50) UNIQUE,
  87. Fecha DATE,
  88. Coste FLOAT(5,2),
  89. Nº_registro INT(3) NOT NULL,
  90. CONSTRAINT PK_servicio PRIMARY KEY (Codigo_s),
  91. CONSTRAINT FK_servicio_empleado FOREIGN KEY (Nº_registro) REFERENCES empleado(Nº_registro) ) ENGINE=INNODB;
  92.  
  93. CREATE TABLE empleado (
  94. Nº_registro INT(3) NOT NULL,
  95. Nombre CHAR(50),
  96. Fecha_incorporacion DATE,
  97. Sueldo FLOAT (6,2)
  98. NIF CHAR(9) NOT NULL,
  99. Codigo_s INT(5) NOT NULL,  
  100.     CONSTRAINT PK_empleado PRIMARY KEY (Nº_registro),
  101.     CONSTRAINT FK_empleado_proveedor FOREIGN KEY (NIF) REFERENCES proveedor(NIF),
  102.     CONSTRAINT FK_empleado_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s) ) ENGINE=INNODB;
  103.    
  104. CREATE TABLE limpia (
  105. Fecha DATE,
  106. Numero INT(3) NOT NULL,
  107. Nº_registro INT(3) NOT NULL,
  108.     CONSTRAINT PK_limpia PRIMARY KEY (Fecha),
  109.     CONSTRAINT FK_limpia_habitacion FOREIGN KEY (Numero) REFERENCES habitacion(Numero),
  110.     CONSTRAINT FK_limpia_empleados FOREIGN KEY (Nº_registro) REFERENCES empleados(Nº_registro) ) ENGINE=INNODB;
  111.    
  112. CREATE TABLE usa_a (
  113. Fecha DATE NOT NULL,
  114. Codigo_s INT(5),
  115. Codigo_s_usado INT(5),
  116.     CONSTRAINT FK_usa_a_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s),
  117.     CONSTRAINT PK_usa_a PRIMARY KEY (Fecha) ) ENGINE=INNODB;
  118.    
  119. CREATE TABLE es_incluido (
  120. Codigo_f INT(5) NOT NULL,
  121. Codigo_s INT(5) NOT NULL,
  122. CONSTRAINT FK_es_incluido_factura FOREIGN KEY (Codigo_f) REFERENCES factura(Codigo_f),
  123. CONSTRAINT FK_es_incluido_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s) ) ENGINE=INNODB;





Bueno, hemos mejorado en algo, tienes razon, el orden de las tablas afecta...

Ahora bien... el primer error que me da al ejecutarlo es este:

---------------------------------------------------
1 row(s) affected, 1 warning(s)

Execution Time : 0 sec
Transfer Time : 0.001 sec
Total Time : 0.002 sec

Note Code : 1007
Can't create database 'hotel'; database exists
---------------------------------------------------

Y al compilar el archivo sql me detecta este siguiente error...

---------------------------------------------------
Query:
CREATE TABLE habitacion (
Numero INT(3) NOT NULL,
Superficie INT(3),
Bar ENUM ('Si','No'),
Terraza ENUM ('Si','No'),
Baño ENUM ('Si','No'),
TV ENUM ('Si','No'),
Nº_camas INT(1),
Fecha_reserva DATE,
Estancia
Fecha_salida DATE,
Estado ENUM ('Libre','Ocupada') NOT NULL,
Tipo ENUM ('Individual','Doble') NOT NULL,
DNI CHAR(9) NOT NULL,
CONSTRAINT FK_habitacion_precio FOREIGN KEY (Tipo) REFERENCES precio(Tipo),
CONSTRAINT FK_habitacion_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI),
CONSTRAINT PK_habitacion PRIMARY KEY (Numero) ) ENGINE=INNODB

Error occured at:2013-01-29 18:35:58
Line no.:52
Error Code: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Fecha_salida DATE,
Estado ENUM ('Libre','Ocupada') NOT NULL,
Tipo ENUM ('Individ' at line 11
---------------------------------------------------

Muchas gracias de nuevo :)
  #5 (permalink)  
Antiguo 29/01/2013, 11:49
Avatar de 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: No consigo compilar esta base de datos

Ahora haz lo que te dije: quita todos los caracteres extendidos o símbolos que hayas usado en los nombres de columnas, tablas, constraint y demás.
de entrada, veo un campo "Baño" y otro "Nº_camas". Eso está mal. Tienden a generar errores de ejecución.
Es preferible que uses el alfabeto inglés básico, y sólo el "_" como adicional. Nada más.

Tendrás que regenerar el script para ello.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 29/01/2013, 12:18
Avatar de abeltxu  
Fecha de Ingreso: enero-2013
Ubicación: Segovia
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: No consigo compilar esta base de datos

Código MySQL:
Ver original
  1. CREATE DATABASE IF NOT EXISTS hotel;
  2. GRANT ALL ON hotel.* TO 'root'@'localhost' IDENTIFIED BY '';
  3. USE hotel;
  4.  
  5. DROP TABLE IF EXISTS formadepago;
  6. DROP TABLE IF EXISTS factura;
  7. DROP TABLE IF EXISTS cliente;
  8. DROP TABLE IF EXISTS habitacion;
  9. DROP TABLE IF EXISTS empleado;
  10. DROP TABLE IF EXISTS proveedor;
  11. DROP TABLE IF EXISTS factura_proveedor;
  12. DROP TABLE IF EXISTS servicio;
  13. DROP TABLE IF EXISTS es_incluido;
  14.  
  15. CREATE TABLE formadepago (
  16. Id INT(10) NOT NULL,
  17. Interes FLOAT(3,2) UNIQUE,
  18.     CONSTRAINT PK_formadepago PRIMARY KEY (Id) ) ENGINE=INNODB;
  19.    
  20. CREATE TABLE cliente (
  21. DNI CHAR(9) NOT NULL,
  22. Nombre CHAR(50),
  23. Apellidos CHAR(50),
  24. Domicilio CHAR(50),
  25. Telefono INT(9),
  26. Anterioridad ENUM ('Si','No'),
  27.     CONSTRAINT PK_cliente PRIMARY KEY (DNI) ) ENGINE=INNODB;
  28.    
  29. CREATE TABLE precio (
  30. Tipo ENUM ('Individual','Doble') NOT NULL,
  31. CONSTRAINT PK_precio PRIMARY KEY (Tipo) ) ENGINE=INNODB;
  32.  
  33. CREATE TABLE habitacion (
  34. Numero INT(3) NOT NULL,
  35. Superficie INT(3),
  36. Bar ENUM ('Si','No'),
  37. Terraza ENUM ('Si','No'),
  38. Banio ENUM ('Si','No'),
  39. TV ENUM ('Si','No'),
  40. N_camas INT(1),
  41. Fecha_reserva DATE,
  42. /*Estancia*/
  43. Fecha_salida DATE,
  44. Estado ENUM ('Libre','Ocupada') NOT NULL,
  45. Tipo ENUM ('Individual','Doble') NOT NULL,
  46. DNI CHAR(9) NOT NULL,
  47.     CONSTRAINT FK_habitacion_precio FOREIGN KEY (Tipo) REFERENCES precio(Tipo),
  48.     CONSTRAINT FK_habitacion_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI),
  49.     CONSTRAINT PK_habitacion PRIMARY KEY (Numero) ) ENGINE=INNODB;
  50.  
  51. CREATE TABLE factura (
  52. Codigo_f INT(5) NOT NULL,
  53. Fecha_entrada DATE,
  54. Fecha_salida DATE,
  55. Importe_total FLOAT(6,2),
  56. Supletoria ENUM ('Si','No'),
  57. Id INT(10) NOT NULL,
  58. DNI CHAR(9) NOT NULL,
  59. Numero INT(3) NOT NULL,
  60.     CONSTRAINT PK_factura PRIMARY KEY (Codigo_f),
  61.     CONSTRAINT FK_factura_formadepago FOREIGN KEY (Id) REFERENCES formadepago(Id) ON DELETE CASCADE ON UPDATE CASCADE,
  62.     CONSTRAINT FK_factura_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI) ON DELETE CASCADE ON UPDATE CASCADE,
  63.         CONSTRAINT FK_factura_hab FOREIGN KEY (Numero) REFERENCES habitacion(Numero) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=INNODB;
  64.  
  65. CREATE TABLE proveedor (
  66. NIF CHAR(9) NOT NULL,
  67. Nombre_comercial CHAR(50) UNIQUE,
  68. Direccion CHAR(50),
  69. N_registro INT(3) NOT NULL,
  70. Codigo_fp INT(5) NOT NULL,
  71.     CONSTRAINT PK_proveedor PRIMARY KEY (N_registro),
  72.     CONSTRAINT FK_proveedor_empleado FOREIGN KEY (N_registro) REFERENCES empleado(N_registro),
  73.     CONSTRAINT FK_proveedor_factura_proveedor FOREIGN KEY (Codigo_fp) REFERENCES factura_proveedor(Codigo_fp) ) ENGINE=INNODB;
  74.  
  75. CREATE TABLE factura_proveedor (
  76. Codigo_fp INT(5) NOT NULL,
  77. Fecha DATE,
  78. Importe FLOAT(6,2),
  79. Encargado CHAR(50),
  80. NIF CHAR(9) NOT NULL,
  81.     CONSTRAINT PK_factura_proveedor PRIMARY KEY (Codigo_fp),
  82.     CONSTRAINT FK_factura_proveedor_proveedor FOREIGN KEY (NIF) REFERENCES proveedor(NIF) ) ENGINE=INNODB;
  83.  
  84. CREATE TABLE servicio (
  85. Codigo_s VARCHAR(9),
  86. Descripcion CHAR(50) UNIQUE,
  87. Fecha DATE,
  88. Coste FLOAT(5,2),
  89. N_registro INT(3) NOT NULL,
  90. CONSTRAINT PK_servicio PRIMARY KEY (Codigo_s),
  91. CONSTRAINT FK_servicio_empleado FOREIGN KEY (N_registro) REFERENCES empleado(N_registro) ) ENGINE=INNODB;
  92.  
  93. CREATE TABLE empleado (
  94. N_registro INT(3) NOT NULL,
  95. Nombre CHAR(50),
  96. Fecha_incorporacion DATE,
  97. Sueldo FLOAT (6,2)
  98. NIF CHAR(9) NOT NULL,
  99. Codigo_s INT(5) NOT NULL,  
  100.     CONSTRAINT PK_empleado PRIMARY KEY (N_registro),
  101.     CONSTRAINT FK_empleado_proveedor FOREIGN KEY (NIF) REFERENCES proveedor(NIF),
  102.     CONSTRAINT FK_empleado_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s) ) ENGINE=INNODB;
  103.    
  104. CREATE TABLE limpia (
  105. Fecha DATE,
  106. Numero INT(3) NOT NULL,
  107. N_registro INT(3) NOT NULL,
  108.     CONSTRAINT PK_limpia PRIMARY KEY (Fecha),
  109.     CONSTRAINT FK_limpia_habitacion FOREIGN KEY (Numero) REFERENCES habitacion(Numero),
  110.     CONSTRAINT FK_limpia_empleados FOREIGN KEY (N_registro) REFERENCES empleados(N_registro) ) ENGINE=INNODB;
  111.    
  112. CREATE TABLE usa_a (
  113. Fecha DATE NOT NULL,
  114. Codigo_s INT(5),
  115. Codigo_s_usado INT(5),
  116.     CONSTRAINT FK_usa_a_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s),
  117.     CONSTRAINT PK_usa_a PRIMARY KEY (Fecha) ) ENGINE=INNODB;
  118.    
  119. CREATE TABLE es_incluido (
  120. Codigo_f INT(5) NOT NULL,
  121. Codigo_s INT(5) NOT NULL,
  122. CONSTRAINT FK_es_incluido_factura FOREIGN KEY (Codigo_f) REFERENCES factura(Codigo_f),
  123. CONSTRAINT FK_es_incluido_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s) ) ENGINE=INNODB;

He corregido ya esos caracteres que me dijiste...
Pero tengo dudas...
-¿Donde pongo el NOT NULL?
-¿Para que sirve el "constraint"? ¿Es obligatorio ponerlo en las claves primarias y ajenas?
-¿Es necesario poner "ON DELETE CASCADE ON UPDATE CASCADE" en todos los FK?
  #7 (permalink)  
Antiguo 29/01/2013, 13:37
Avatar de 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: No consigo compilar esta base de datos

NOT NULL debe ir en todo aquel atributo (campo) que sea mandatorio, es decir obligatorio. Es la forma de imponer una restricción a un campo para que no pueda faltar el dato.
Por otro lado, NOT NULL es obligatorio en las PK y en aquellas FK que representen relaciones necesarias, por ejemplo el numero de factura en la tabla de detalle de factura.

CONSTRAINT se usa para indicar el nombre que el sistema debe darle al objeto que administra la restricción de PK o FK que se declara.
No es obligatorio, pero si no lo pones, MySQL creará la constraint con un nombre generado por el sistema, que tu no conocerás a menos que sepas cómo encontrarlo.
Indicarlo permite asegurarse su denominación, pero se debe tener cuidado de no poner dos constraint diferentes con el mismo nombre, o se generará un error de ejecución, porque cada una que se indica genera un archivo en el sistema, y no pueden existir dos archivos del mismo nombre en la misma carpeta...
Por otro lado, hay que tener cuidado con el uso de mayúsculas y minúsculas, porque como son archivos, si el SO es sensible a mayúsculas/minúsculas (como Linux), puede traer problemas luego, cuando se redactan las consultas.
Esto último también es válido para los nombres de columnas, tablas, indices y demás objetos.
Por convención, se usar mayúsculas para los nombres de columnas y minúsculas para las tablas.

ON DELETE CASCADE ON UPDATE CASCADE se usa al crear las FK en aquellos casos donde no exista una restricción de borrado o actualización. Se usa para no tener que indicar que la tabla secundaria se borre si se elimina un objeto de la tabla referida, por ejemplo.
Pero es algo peligroso, porque elimina todos los registros de la cadena de dependencias, lo que puede causar desastres si se usa imprudentemente. Conviene usarlo sí y sólo si es necesario. No hay una regla fija. Depende del diseño del sistema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 29/01/2013, 14:22
Avatar de abeltxu  
Fecha de Ingreso: enero-2013
Ubicación: Segovia
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: No consigo compilar esta base de datos

En primer lugar quiero agradecerte la ayuda que me estas ofreciendo, soy estudiante de ingenieria informatica en España, y soy nuevo en muchos ambitos... Nos obligan a aprender todo muy rapido... y ando bastante pobre en ideas...

Por otro lado, intentare ayudar en lo que pueda en el foro, la verdad que la rapidez de contestacion ha sido un lujo...


Y por ultimo y tristemente, mi base de datos sigue sin compilar
  #9 (permalink)  
Antiguo 29/01/2013, 14:24
Avatar de 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: No consigo compilar esta base de datos

¿Qué error te devuelve?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 29/01/2013, 14:54
Avatar de abeltxu  
Fecha de Ingreso: enero-2013
Ubicación: Segovia
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: No consigo compilar esta base de datos

Me devuelve este error al compilarlo
Query:
DROP TABLE IF EXISTS formadepago

Error occured at:2013-01-29 21:45:57
Line no.:5
Error Code: 1217 - Cannot delete or update a parent row: a foreign key constraint fails



Siendo el codigo actual:
Código MySQL:
Ver original
  1. CREATE DATABASE IF NOT EXISTS hotel;
  2. GRANT ALL ON hotel.* TO 'root'@'localhost' IDENTIFIED BY '';
  3. USE hotel;
  4.  
  5. DROP TABLE IF EXISTS formadepago;
  6. DROP TABLE IF EXISTS factura;
  7. DROP TABLE IF EXISTS cliente;
  8. DROP TABLE IF EXISTS habitacion;
  9. DROP TABLE IF EXISTS empleado;
  10. DROP TABLE IF EXISTS proveedor;
  11. DROP TABLE IF EXISTS factura_proveedor;
  12. DROP TABLE IF EXISTS servicio;
  13. DROP TABLE IF EXISTS es_incluido;
  14.  
  15. CREATE TABLE formadepago (
  16. Id INT(10) NOT NULL,
  17. Interes FLOAT(3,2) UNIQUE,
  18.     CONSTRAINT PK_formadepago PRIMARY KEY (Id) ) ENGINE=INNODB;
  19.    
  20. CREATE TABLE cliente (
  21. DNI CHAR(9) NOT NULL,
  22. Nombre CHAR(50),
  23. Apellidos CHAR(50),
  24. Domicilio CHAR(50),
  25. Telefono INT(9),
  26. Anterioridad ENUM ('Si','No'),
  27.     CONSTRAINT PK_cliente PRIMARY KEY (DNI) ) ENGINE=INNODB;
  28.    
  29. CREATE TABLE precio (
  30. Tipo ENUM ('Individual','Doble') NOT NULL,
  31. CONSTRAINT PK_precio PRIMARY KEY (Tipo) ) ENGINE=INNODB;
  32.  
  33. CREATE TABLE habitacion (
  34. Numero INT(3) NOT NULL,
  35. Superficie INT(3),
  36. Bar ENUM ('Si','No'),
  37. Terraza ENUM ('Si','No'),
  38. Banio ENUM ('Si','No'),
  39. TV ENUM ('Si','No'),
  40. N_camas INT(1),
  41. Fecha_reserva DATE,
  42. /*Estancia*/
  43. Fecha_salida DATE,
  44. Estado ENUM ('Libre','Ocupada') NOT NULL,
  45. Tipo ENUM ('Individual','Doble') NOT NULL,
  46. DNI CHAR(9) NOT NULL,
  47.     CONSTRAINT FK_habitacion_precio FOREIGN KEY (Tipo) REFERENCES precio(Tipo),
  48.     CONSTRAINT FK_habitacion_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI),
  49.     CONSTRAINT PK_habitacion PRIMARY KEY (Numero) ) ENGINE=INNODB;
  50.  
  51. CREATE TABLE factura (
  52. Codigo_f INT(5) NOT NULL,
  53. Fecha_entrada DATE,
  54. Fecha_salida DATE,
  55. Importe_total FLOAT(6,2),
  56. Supletoria ENUM ('Si','No'),
  57. Id INT(10) NOT NULL,
  58. DNI CHAR(9) NOT NULL,
  59. Numero INT(3) NOT NULL,
  60.     CONSTRAINT PK_factura PRIMARY KEY (Codigo_f),
  61.     CONSTRAINT FK_factura_formadepago FOREIGN KEY (Id) REFERENCES formadepago(Id) ON DELETE CASCADE ON UPDATE CASCADE,
  62.     CONSTRAINT FK_factura_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI) ON DELETE CASCADE ON UPDATE CASCADE,
  63.         CONSTRAINT FK_factura_hab FOREIGN KEY (Numero) REFERENCES habitacion(Numero) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=INNODB;
  64.  
  65. CREATE TABLE proveedor (
  66. NIF CHAR(9) NOT NULL,
  67. Nombre_comercial CHAR(50) UNIQUE,
  68. Direccion CHAR(50),
  69. N_registro INT(3) NOT NULL,
  70. Codigo_fp INT(5) NOT NULL,
  71.     CONSTRAINT PK_proveedor PRIMARY KEY (N_registro),
  72.     CONSTRAINT FK_proveedor_empleado FOREIGN KEY (N_registro) REFERENCES empleado(N_registro),
  73.     CONSTRAINT FK_proveedor_factura_proveedor FOREIGN KEY (Codigo_fp) REFERENCES factura_proveedor(Codigo_fp) ) ENGINE=INNODB;
  74.  
  75. CREATE TABLE factura_proveedor (
  76. Codigo_fp INT(5) NOT NULL,
  77. Fecha DATE,
  78. Importe FLOAT(6,2),
  79. Encargado CHAR(50),
  80. NIF CHAR(9) NOT NULL,
  81.     CONSTRAINT PK_factura_proveedor PRIMARY KEY (Codigo_fp),
  82.     CONSTRAINT FK_factura_proveedor_proveedor FOREIGN KEY (NIF) REFERENCES proveedor(NIF) ) ENGINE=INNODB;
  83.  
  84. CREATE TABLE servicio (
  85. Codigo_s VARCHAR(9),
  86. Descripcion CHAR(50) UNIQUE,
  87. Fecha DATE,
  88. Coste FLOAT(5,2),
  89. N_registro INT(3) NOT NULL,
  90. CONSTRAINT PK_servicio PRIMARY KEY (Codigo_s),
  91. CONSTRAINT FK_servicio_empleado FOREIGN KEY (N_registro) REFERENCES empleado(N_registro) ) ENGINE=INNODB;
  92.  
  93. CREATE TABLE empleado (
  94. N_registro INT(3) NOT NULL,
  95. Nombre CHAR(50),
  96. Fecha_incorporacion DATE,
  97. Sueldo FLOAT (6,2)
  98. NIF CHAR(9) NOT NULL,
  99. Codigo_s INT(5) NOT NULL,  
  100.     CONSTRAINT PK_empleado PRIMARY KEY (N_registro),
  101.     CONSTRAINT FK_empleado_proveedor FOREIGN KEY (NIF) REFERENCES proveedor(NIF),
  102.     CONSTRAINT FK_empleado_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s) ) ENGINE=INNODB;
  103.    
  104. CREATE TABLE limpia (
  105. Fecha DATE,
  106. Numero INT(3) NOT NULL,
  107. N_registro INT(3) NOT NULL,
  108.     CONSTRAINT PK_limpia PRIMARY KEY (Fecha),
  109.     CONSTRAINT FK_limpia_habitacion FOREIGN KEY (Numero) REFERENCES habitacion(Numero),
  110.     CONSTRAINT FK_limpia_empleados FOREIGN KEY (N_registro) REFERENCES empleados(N_registro) ) ENGINE=INNODB;
  111.    
  112. CREATE TABLE usa_a (
  113. Fecha DATE NOT NULL,
  114. Codigo_s INT(5),
  115. Codigo_s_usado INT(5),
  116.     CONSTRAINT FK_usa_a_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s),
  117.     CONSTRAINT PK_usa_a PRIMARY KEY (Fecha) ) ENGINE=INNODB;
  118.    
  119. CREATE TABLE es_incluido (
  120. Codigo_f INT(5) NOT NULL,
  121. Codigo_s INT(5) NOT NULL,
  122. CONSTRAINT FK_es_incluido_factura FOREIGN KEY (Codigo_f) REFERENCES factura(Codigo_f),
  123. CONSTRAINT FK_es_incluido_servicio FOREIGN KEY (Codigo_s) REFERENCES servicio(Codigo_s) ) ENGINE=INNODB;
  #11 (permalink)  
Antiguo 29/01/2013, 17:45
Avatar de 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: No consigo compilar esta base de datos

Cita:
Cannot delete or update a parent row: a foreign key constraint fails
Eso significaría que tienes datos en esas tablas, y no te permite borrarla porque hay una tabla dependiente que tiene registros referidos a ella...
Es el efectivo cumplimiento de las restricciones de FK

¿Es así? ¿Tienes datos en esas tablas?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 29/01/2013, 18:50
Avatar de 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: No consigo compilar esta base de datos

Bueno, después de una revisión exhaustiva, y gracias al corrector sintáctico del MySQL Workbench, junto con su log de ejecuciones, pude depurar al menos en general el script creado por tu aplicación, que lamento decirlo, es pura basura.

Hay varios y múltiples errores de construcción en el script y otros varios más a nivel conceptual de BBDD, que te deallo acá:

1) Había una coma menos en una tabla, lo que sin duda generaba un error sintáctico.

2) Los DROP TABLE IF EXISTS al inicio estaban todos en orden incorrecto. Cuando tienes tablas con FK el orden de borrado es exactamente el inverso al de creación, para evitar errores por dependencias de FK (se debe eliminar la tabla dependiente primero).

3) Había una incorrecta definición de las FK. Una FK es un campo o conjunto de campos que referencia a la clave primaria de otra tabla. En tu caso estabas creando FK que apuntaban a campos no PK.

4) Por extensión, MySQL permite crear FK hacia campos no PK siempre y cuando los campos referidos sean UNIQUE en su tabla, con lo que se transformarían en claves candidatas (CC), cumpliendo con la unicidad de valor. Pero los campos apuntados ni siquiera eran UNIQUE.

5) Existían dependencias circulares, que son de construcción y cumplimiento imposible. Eso es un defecto de diseño grave, que hace que una tabla A tenga la FK de la tabla B y la tabla B la FK de la tabla A. Eso es un error gravísimo de diseño.

6) Había tablas que contenían FKs innecesarias, lo que sugiere que las relaciones están mal definidas, por una definición defectuosa de Entidades y Relaciones a nivel lógico.

7) Existe evidencia de posibles relaciones N:N que requerirían tablas adicionales (exigencia del modelo E-R), y no están, por lo cual se les ha implementado soluciones incorrectas.

Depurando todo, y eliminando algunas cosa de de ciertas tablas (sólo las FK indebidas) quedaría mas o menos así:
Código MySQL:
Ver original
  1. CREATE DATABASE IF NOT EXISTS hotel;
  2. USE hotel;
  3.  
  4. DROP TABLE IF EXISTS es_incluido;
  5.  
  6. DROP TABLE IF EXISTS proveedor;
  7. DROP TABLE IF EXISTS factura_proveedor;
  8. DROP TABLE IF EXISTS servicio;
  9.  
  10. DROP TABLE IF EXISTS factura;
  11. DROP TABLE IF EXISTS formadepago;
  12. DROP TABLE IF EXISTS habitacion;
  13. DROP TABLE IF EXISTS cliente;
  14. DROP TABLE IF EXISTS empleado;
  15.  
  16.  
  17. CREATE TABLE formadepago (
  18. Id INT(10) NOT NULL,
  19. Interes FLOAT(3,2) UNIQUE,
  20.     CONSTRAINT PK_formadepago PRIMARY KEY (Id) ) ENGINE=INNODB;
  21.    
  22. CREATE TABLE cliente (
  23. DNI CHAR(9) NOT NULL,
  24. Nombre CHAR(50),
  25. Apellidos CHAR(50),
  26. Domicilio CHAR(50),
  27. Telefono INT(9),
  28. Anterioridad ENUM ('Si','No'),
  29.     CONSTRAINT PK_cliente PRIMARY KEY (DNI) ) ENGINE=INNODB;
  30.    
  31. CREATE TABLE precio (
  32. Tipo ENUM ('Individual','Doble') NOT NULL,
  33. CONSTRAINT PK_precio PRIMARY KEY (Tipo) ) ENGINE=INNODB;
  34.  
  35. CREATE TABLE habitacion (
  36. Numero INT(3) NOT NULL,
  37. Superficie INT(3),
  38. Bar ENUM ('Si','No'),
  39. Terraza ENUM ('Si','No'),
  40. Banio ENUM ('Si','No'),
  41. TV ENUM ('Si','No'),
  42. N_camas INT(1),
  43. Fecha_reserva DATE,
  44. /*Estancia*/
  45. Fecha_salida DATE,
  46. Estado ENUM ('Libre','Ocupada') NOT NULL,
  47. Tipo ENUM ('Individual','Doble') NOT NULL,
  48. DNI CHAR(9) NOT NULL,
  49.     CONSTRAINT FK_habitacion_precio FOREIGN KEY (Tipo) REFERENCES precio(Tipo),
  50.     CONSTRAINT FK_habitacion_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI),
  51.     CONSTRAINT PK_habitacion PRIMARY KEY (Numero) ) ENGINE=INNODB;
  52.  
  53. CREATE TABLE factura (
  54. Codigo_f INT(5) NOT NULL,
  55. Fecha_entrada DATE,
  56. Fecha_salida DATE,
  57. Importe_total FLOAT(6,2),
  58. Supletoria ENUM ('Si','No'),
  59. Id INT(10) NOT NULL,
  60. DNI CHAR(9) NOT NULL,
  61. Numero INT(3) NOT NULL,
  62.     CONSTRAINT PK_factura PRIMARY KEY (Codigo_f),
  63.     CONSTRAINT FK_factura_formadepago FOREIGN KEY (Id) REFERENCES formadepago(Id) ON DELETE CASCADE ON UPDATE CASCADE,
  64.     CONSTRAINT FK_factura_cliente FOREIGN KEY (DNI) REFERENCES cliente(DNI) ON DELETE CASCADE ON UPDATE CASCADE,
  65.         CONSTRAINT FK_factura_hab FOREIGN KEY (Numero) REFERENCES habitacion(Numero) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=INNODB;
  66.  
  67.  CREATE TABLE empleado (
  68. N_registro INT(3) NOT NULL,
  69. Nombre CHAR(50),
  70. Fecha_incorporacion DATE,
  71. Sueldo FLOAT (6,2),
  72. NIF CHAR(9) NOT NULL,
  73. Codigo_s INT(5) NOT NULL,  
  74.     CONSTRAINT PK_empleado PRIMARY KEY (N_registro) ) ENGINE=INNODB;
  75.    
  76. CREATE TABLE proveedor (
  77. NIF CHAR(9) NOT NULL,
  78. Nombre_comercial CHAR(50) UNIQUE,
  79. Direccion CHAR(50),
  80. N_registro INT(3) NOT NULL,
  81. Codigo_fp INT(5) NOT NULL,
  82.     CONSTRAINT PK_proveedor PRIMARY KEY (N_registro),
  83.     CONSTRAINT FK_proveedor_empleado FOREIGN KEY (N_registro) REFERENCES empleado(N_registro)) ENGINE=INNODB;
  84.  
  85. CREATE TABLE factura_proveedor (
  86. Codigo_fp INT(5) NOT NULL,
  87. Fecha DATE,
  88. Importe FLOAT(6,2),
  89. Encargado CHAR(50),
  90. NIF CHAR(9) NOT NULL,
  91.     CONSTRAINT PK_factura_proveedor PRIMARY KEY (Codigo_fp) ) ENGINE=INNODB;
  92.  
  93. CREATE TABLE servicio (
  94. Codigo_s VARCHAR(9),
  95. Descripcion CHAR(50) UNIQUE,
  96. Fecha DATE,
  97. Coste FLOAT(5,2),
  98. N_registro INT(3) NOT NULL,
  99. CONSTRAINT PK_servicio PRIMARY KEY (Codigo_s),
  100. CONSTRAINT FK_servicio_empleado FOREIGN KEY (N_registro) REFERENCES empleado(N_registro) ) ENGINE=INNODB;
  101.  
  102.  
  103. CREATE TABLE limpia (
  104. Fecha DATE,
  105. Numero INT(3) NOT NULL,
  106. N_registro INT(3) NOT NULL,
  107.     CONSTRAINT PK_limpia PRIMARY KEY (Fecha),
  108.     CONSTRAINT FK_limpia_habitacion FOREIGN KEY (Numero) REFERENCES habitacion(Numero),
  109.     CONSTRAINT FK_limpia_empleados FOREIGN KEY (N_registro) REFERENCES empleado(N_registro) ) ENGINE=INNODB;
  110.    
  111. CREATE TABLE usa_a (
  112. Fecha DATE NOT NULL,
  113. Codigo_s INT(5),
  114. Codigo_s_usado INT(5),
  115.     CONSTRAINT PK_usa_a PRIMARY KEY (Fecha) ) ENGINE=INNODB;
  116.    
  117. CREATE TABLE es_incluido (
  118. Codigo_f INT(5) NOT NULL,
  119. Codigo_s INT(5) NOT NULL,
  120. PRIMARY KEY(Codigo_f,Codigo_s)) ENGINE=INNODB;

Como te digo, esta no es la solución. Aún no hice que se reconstruyera el diagrama para analizar mejor el diseño global, pero ese script no producirá errores.

Luego de que lo revise todo, te comento el resto.

Saludos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 30/01/2013, 01:01
Avatar de abeltxu  
Fecha de Ingreso: enero-2013
Ubicación: Segovia
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: No consigo compilar esta base de datos

Te he enviado el M/ER y el ER para que lo eches un ojo :)
  #14 (permalink)  
Antiguo 31/01/2013, 15:37
Avatar de abeltxu  
Fecha de Ingreso: enero-2013
Ubicación: Segovia
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: No consigo compilar esta base de datos

A ver si alguien me puede responder a mi duda que es la siguiente:
En el codigo MySQL que he creado, hay una tabla que contiene un atributo llamado "estancia". No se como crear una funcion que me haga una diferencia de la fecha de salida menos la fecha de entrada y se asigne a la estancia. Me estoy volviendo loco con esta practica xD
Tambien me gustaria que saber que opciones de modificado y borrado en las Foreign Keys que tengo :S Busco explicaciones pero no lo entiendo...
Muchas gracias!! :)

Última edición por abeltxu; 31/01/2013 a las 15:47

Etiquetas: compilar, fecha, registro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:41.