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

Cargar informacón base de datos

Estas en el tema de Cargar informacón base de datos en el foro de Mysql en Foros del Web. Buenas tardes, estoy intentando cargar datos de ejemplo en la base de datos para un trabajo y no sé donde está el fallo. Si alguien ...
  #1 (permalink)  
Antiguo 25/05/2014, 09:28
 
Fecha de Ingreso: mayo-2014
Mensajes: 5
Antigüedad: 9 años, 11 meses
Puntos: 0
Cargar informacón base de datos

Buenas tardes, estoy intentando cargar datos de ejemplo en la base de datos para un trabajo y no sé donde está el fallo. Si alguien puede verlo y ayudarme por favor, se lo agradeceria mucho:
Código MySQL:
Ver original
  1. -- -------------------------------------------------------
  2. -- Table `mi_esquema`.`Paciente`
  3. -- -------------------------------------------------------
  4. DROP TABLE IF EXISTS `mi_esquema`.`Paciente`;
  5.  
  6. CREATE TABLE IF NOT EXISTS `mi_esquema`.`Paciente` (
  7.   `DNI` VARCHAR(9) NOT NULL ,
  8.   `Nombre` VARCHAR(50) NOT NULL ,
  9.   `Dia_ingreso` INT NULL DEFAULT NULL ,
  10.   `Mes_ingreso` INT NULL DEFAULT NULL ,
  11.   `Anno_ingreso` INT NULL DEFAULT NULL ,
  12.   `Sexo` VARCHAR(10) NOT NULL ,
  13.   `Dia_nacimiento` INT NULL DEFAULT NULL ,
  14.   `Mes_nacimiento` INT NULL DEFAULT NULL ,
  15.   `Anno_nacimiento` INT NULL DEFAULT NULL ,
  16.   PRIMARY KEY (`DNI`)
  17.   );
  18.  
  19. -- -----------------------------------------------------
  20. -- Table `mi_esquema`.`Area_medica`
  21. -- -----------------------------------------------------
  22. DROP TABLE IF EXISTS `mi_esquema`.`Area_medica` ;
  23.  
  24. CREATE TABLE IF NOT EXISTS `mi_esquema`.`Area_medica` (
  25.  `Nombre_departamento`  VARCHAR(50) NOT NULL ,
  26.  `Ubicacion`  VARCHAR(50) NOT NULL ,
  27.  `Telefono` FLOAT NOT NULL ,
  28.  `Email`  VARCHAR(50) NOT NULL ,
  29.  `DNI_medico` VARCHAR(9) NOT NULL ,
  30.  PRIMARY KEY (`Nombre_departamento`)
  31. );
  32.    
  33. -- -----------------------------------------------------
  34. -- Table `mi_esquema`.`Medico`
  35. -- -----------------------------------------------------
  36. DROP TABLE IF EXISTS `mi_esquema`.`Medico` ;
  37.  
  38. CREATE TABLE IF NOT EXISTS `mi_esquema`.`Medico` (
  39.   `DNI` VARCHAR(9) NOT NULL ,  
  40.   `Nombre` VARCHAR(50) NOT NULL ,
  41.   `Dia_nacimiento` INT NULL DEFAULT NULL ,
  42.   `Mes_nacimiento` INT NULL DEFAULT NULL ,
  43.   `Anno_nacimiento` INT NULL DEFAULT NULL ,
  44.   `Especialidad` VARCHAR(50) NOT NULL ,
  45.   `Sueldo` FLOAT NOT NULL ,
  46.   `Nombre_departamento_area_medica` VARCHAR(50) NOT NULL ,
  47.   PRIMARY KEY (`DNI`) ,
  48.   FOREIGN KEY (`Nombre_departamento_area_medica`)
  49.     REFERENCES `mi_esquema`.`Area_medica` (`Nombre_departamento`)
  50. );
  51.  
  52. ALTER TABLE `mi_esquema`.`Area_medica`
  53. ADD FOREIGN KEY (`DNI_medico`)
  54.     REFERENCES `mi_esquema`.`Medico` (`DNI`);


Datos:
Código MySQL:
Ver original
  1. INSERT INTO Paciente VALUES ('87956724P','Alicia Garcia',07,05,2014,'Femenino',30,07,1988);
  2.  
  3. INSERT INTO Area_medica VALUES ('Dermatologia','Planta 1',916822436,'[email protected]');
  4.  
  5. INSERT INTO Medico VALUES ('24368422S','Jose Alvarez',10,02,1960,'Dermatitis facial',2500,'Dermatologia');
  6.  
  7. UPDATE Area_medica SET `DNI_medico`='24368422S' WHERE Area_medica.`Nombre_departamento`='Dermatologia';

Última edición por gnzsoloyo; 25/05/2014 a las 09:46
  #2 (permalink)  
Antiguo 25/05/2014, 09:58
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, 4 meses
Puntos: 2658
Respuesta: Cargar informacón base de datos

Tienes al menos dos problemas:
1) Estás estableciendo una dependencia circular entre Area_Media y Médico. La KF de area_medica no debe estar en Medico, ni la de médico en area_médica. O es uno o es lo otro, pero no ambos a la vez.
2) Te falta una tabla. Si un medico puede estar en N áreas, y cada área puede tener N médicos, eso es una relación N:M y requeire de una tabla Médico_Area que contenga como PK las FK de cada una.
Por eso no puedes realizar inserciones: Las dependencias circulares son situaciones imposibles.
Además, el script está mal, porque toda tabla base debe crearse antes que cualquiera de las tablas donde sus PK sean FK. Y Médico se está creando al final, con lo que correr el script genera errores de ejecución
.
__________________
¿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 25/05/2014, 10:45
 
Fecha de Ingreso: mayo-2014
Mensajes: 5
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Cargar informacón base de datos

Hola,

Gracias por tu rápida respuesta. A continuación el script entero que tengo, al ejecutarlo no me da fallos, es cuando meto los datos en un txt e intento que los dos archivos funcionen:
Código MySQL:
Ver original
  1. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  2. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  3. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
  4.  
  5. DROP SCHEMA IF EXISTS `mi_esquema` ;
  6. CREATE SCHEMA IF NOT EXISTS `mi_esquema` DEFAULT CHARACTER SET utf8 ;
  7. USE `mi_esquema` ;
  8.  
  9. -- -------------------------------------------------------
  10. -- Table `mi_esquema`.`Paciente`
  11. -- -------------------------------------------------------
  12. DROP TABLE IF EXISTS `mi_esquema`.`Paciente`;
  13.  
  14. CREATE TABLE IF NOT EXISTS `mi_esquema`.`Paciente` (
  15.   `DNI` VARCHAR(9) NOT NULL ,
  16.   `Nombre` VARCHAR(50) NOT NULL ,
  17.   `Dia_ingreso` INT NULL DEFAULT NULL ,
  18.   `Mes_ingreso` INT NULL DEFAULT NULL ,
  19.   `Anno_ingreso` INT NULL DEFAULT NULL ,
  20.   `Sexo` VARCHAR(10) NOT NULL ,
  21.   `Dia_nacimiento` INT NULL DEFAULT NULL ,
  22.   `Mes_nacimiento` INT NULL DEFAULT NULL ,
  23.   `Anno_nacimiento` INT NULL DEFAULT NULL ,
  24.   PRIMARY KEY (`DNI`)
  25.   );
  26.  
  27. -- -----------------------------------------------------
  28. -- Table `mi_esquema`.`Area_medica`
  29. -- -----------------------------------------------------
  30. DROP TABLE IF EXISTS `mi_esquema`.`Area_medica` ;
  31.  
  32. CREATE TABLE IF NOT EXISTS `mi_esquema`.`Area_medica` (
  33.  `Nombre_departamento`  VARCHAR(50) NOT NULL ,
  34.  `Ubicacion`  VARCHAR(50) NOT NULL ,
  35.  `Telefono` FLOAT NOT NULL ,
  36.  `Email`  VARCHAR(50) NOT NULL ,
  37.  `DNI_medico` VARCHAR(9) NOT NULL ,
  38.  PRIMARY KEY (`Nombre_departamento`)
  39. );
  40.    
  41. -- -----------------------------------------------------
  42. -- Table `mi_esquema`.`Medico`
  43. -- -----------------------------------------------------
  44. DROP TABLE IF EXISTS `mi_esquema`.`Medico` ;
  45.  
  46. CREATE TABLE IF NOT EXISTS `mi_esquema`.`Medico` (
  47.   `DNI` VARCHAR(9) NOT NULL ,  
  48.   `Nombre` VARCHAR(50) NOT NULL ,
  49.   `Dia_nacimiento` INT NULL DEFAULT NULL ,
  50.   `Mes_nacimiento` INT NULL DEFAULT NULL ,
  51.   `Anno_nacimiento` INT NULL DEFAULT NULL ,
  52.   `Especialidad` VARCHAR(50) NOT NULL ,
  53.   `Sueldo` FLOAT NOT NULL ,
  54.   `Nombre_departamento_area_medica` VARCHAR(50) NOT NULL ,
  55.   PRIMARY KEY (`DNI`) ,
  56.  
  57. );
  58.  
  59. ALTER TABLE `mi_esquema`.`Area_medica`
  60. ADD FOREIGN KEY (`DNI_medico`)
  61.     REFERENCES `mi_esquema`.`Medico` (`DNI`);
  62.    
  63. -- -------------------------------------------------------
  64. -- Table `mi_esquema`.`Prueba`
  65. -- -------------------------------------------------------
  66. DROP TABLE IF EXISTS `mi_esquema`.`Prueba`;
  67.  
  68. CREATE TABLE IF NOT EXISTS `mi_esquema`.`Prueba` (
  69.   `Nombre_prueba` VARCHAR(50) NOT NULL ,
  70.   `Tipo` VARCHAR(50) NOT NULL ,
  71.   `Dia_realizacion` INT NULL DEFAULT NULL ,  
  72.   `Mes_realizacion` INT NULL DEFAULT NULL ,
  73.   `Anno_realizacion` INT NULL DEFAULT NULL ,
  74.   `DNI_paciente` VARCHAR(9) NOT NULL ,
  75.   `DNI_medico` VARCHAR(9) NOT NULL ,
  76.   PRIMARY KEY (`Nombre_prueba`)
  77.  );
  78.  
  79. ALTER TABLE `mi_esquema`.`Prueba`
  80. ADD FOREIGN KEY (`DNI_paciente`)
  81. REFERENCES `mi_esquema`.`Paciente` (`DNI`);
  82.    
  83. ALTER TABLE `mi_esquema`.`Prueba`
  84. ADD FOREIGN KEY (`DNI_medico`)
  85. REFERENCES `mi_esquema`.`Medico` (`DNI`);
  86.    
  87. -- -------------------------------------------------------
  88. -- Table `mi_esquema`.`Realiza`
  89. -- -------------------------------------------------------
  90. DROP TABLE IF EXISTS `mi_esquema`.`Realiza`;
  91.  
  92. CREATE TABLE IF NOT EXISTS `mi_esquema`.`Realiza` (
  93.   `DNI_medico` VARCHAR(9) NOT NULL ,
  94.   `Nombre_prueba` VARCHAR(50) NOT NULL ,
  95.    PRIMARY KEY (`DNI_medico`) ,
  96.   FOREIGN KEY (`DNI_medico`)
  97.     REFERENCES `mi_esquema`.`Medico` (`DNI`),
  98.   FOREIGN KEY (`Nombre_prueba`)
  99.     REFERENCES `mi_esquema`.`Prueba` (`Nombre_prueba`)
  100.  
  101. );
  102.  
  103. USE `mi_esquema` ;
  104.  
  105. SET SQL_MODE=@OLD_SQL_MODE;
  106. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  107. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Última edición por gnzsoloyo; 25/05/2014 a las 11:00
  #4 (permalink)  
Antiguo 25/05/2014, 11:00
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, 4 meses
Puntos: 2658
Respuesta: Cargar informacón base de datos

Perdón, pero... ¿entendiste a qué refiero con "dependencia circular"?


PD: Por favor, usa el Highlight "SQL" del editor de mensajes. Para eso está puesto...

Por otro lado, trata de ser más especifico: ¿Devuelve errores? ¿Cómo se supone que los estás intentando correr y a qué te refieres con lo de ponerlos en un txt?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 25/05/2014, 11:06
 
Fecha de Ingreso: mayo-2014
Mensajes: 5
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Cargar informacón base de datos

Si, pero lo siento, no tengo mucha idea y he quitado de la tabla medico " `Nombre_departamento_area_medica` VARCHAR(50) NOT NULL ," y su FK y me da fallos.
No quiero molestar más, gracias!!
  #6 (permalink)  
Antiguo 25/05/2014, 15:43
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, 4 meses
Puntos: 2658
Respuesta: Cargar informacón base de datos

Sigues teniendo un error de diseño, y el script pasó a tener un error de sincronización.
Vamos por partes:
1) Toda tabla base, es decir esas tablas que no poseen ni poseerán claves foráneas (FK), pero que luego se referencian desde otras tablas, se deben crear primero.
2) Una tabla que contiene una FK referenciando a otra tabla, siempre se debe crear después de la tabla referenciada.
3) Toda relación de cardinalidad N:M requiere obligatoriamente una tabla nueva que administre esa relación.

Tu script viola todos estos conceptos.

- La tabla de area_media se está creando antes de la de médicos, por lo que no se puede indicar la FK en ese momento.
- No existe una tabla que relacione áreas con médicos.
- El modelo como lo estás planteando requiere que un médico sólo pueda relacionarse con una única área, pero que pueda haber médicos sin áreas relacionadas.

Creo que lo que te esta fallando es el entendimiento del modelo relacionar y sus dependencias, o bien estás tomando un script de una base y tratando de adaptarlo a tus necesidades, sin definicr correctamente las relaciones.
Mi consejo es que uses una buena herramienta de diseño, como por ejemplo el MySQL Workbench, hagas el diagrama de la base, y recién entonces lo exportes como script.

Nota: Por cierto. Tu script si genera errores de ejecución. Ya lo comprobé corriéndolo en mi PC. Está mal armado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: null
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 00:20.