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

[SOLUCIONADO] Prolema con mysql foreign key

Estas en el tema de Prolema con mysql foreign key en el foro de Bases de Datos General en Foros del Web. Hola buenas tardes soy estudiante de analista de sistema y comenze a cursar la materia bases de datos me dieron un trabajo pratico el cual ...
  #1 (permalink)  
Antiguo 27/09/2015, 13:07
 
Fecha de Ingreso: septiembre-2015
Mensajes: 9
Antigüedad: 8 años, 7 meses
Puntos: 0
Prolema con mysql foreign key

Hola buenas tardes soy estudiante de analista de sistema y comenze a cursar la materia bases de datos me dieron un trabajo pratico el cual es crear una base de datos con las siguientes tablas
PERSONA (DNI, nombre, apellido, domicilio)
AUTO (patente, marca, modelo, anio)
ACCIDENTE (idacc, fecha, descripción, montodanio)
PROPIETARIO (DNI, patente, fchcompra, fchventa)
AUXACC (patente, idacc,conductor)
yo creo las tablas y coloco las foreign key

Código SQL:
Ver original
  1. CREATE TABLE `persona` (
  2.   `dni` VARCHAR(20) NOT NULL,
  3.   `nombre` VARCHAR(50) DEFAULT NULL,
  4.   `apellido` VARCHAR(50) DEFAULT NULL,
  5.   `domicilio` VARCHAR(100) DEFAULT NULL,
  6.   PRIMARY KEY (`dni`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 PACK_KEYS=0;[/PHP]
  8.  
  9. [PHP]CREATE TABLE `propietario` (
  10.   `dni` VARCHAR(20) NOT NULL,
  11.   `patente` VARCHAR(20) NOT NULL,
  12.   `fcompra` DATE DEFAULT '0000-00-00',
  13.   `fventa` DATE DEFAULT '0000-00-00',
  14.   KEY `dni` (`dni`),
  15.   KEY `patente` (`patente`),
  16.   CONSTRAINT `propietario_fk1` FOREIGN KEY (`dni`) REFERENCES `persona` (`dni`) ON DELETE CASCADE ON UPDATE CASCADE,
  17.   CONSTRAINT `propietario_fk2` FOREIGN KEY (`patente`) REFERENCES `auto` (`patente`) ON DELETE CASCADE ON UPDATE CASCADE
  18. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 PACK_KEYS=0;

Código SQL:
Ver original
  1. CREATE TABLE `auto` (
  2.   `patente` VARCHAR(20) NOT NULL,
  3.   `modelo` VARCHAR(50) DEFAULT NULL,
  4.   `marca` VARCHAR(50) DEFAULT NULL,
  5.   `anio` VARCHAR(20) DEFAULT NULL,
  6.   PRIMARY KEY (`patente`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 PACK_KEYS=0;

Código SQL:
Ver original
  1. CREATE TABLE `auxacc` (
  2.   `patente` VARCHAR(20) NOT NULL,
  3.   `idacc` INT(11) NOT NULL AUTO_INCREMENT,
  4.   `conductor` VARCHAR(50) DEFAULT NULL,
  5.   PRIMARY KEY (`idacc`),
  6.   UNIQUE KEY `auxacc_idx1` (`conductor`) USING BTREE,
  7.   KEY `patente` (`patente`),
  8.   CONSTRAINT `auxacc_fk1` FOREIGN KEY (`patente`) REFERENCES `auto` (`patente`) ON DELETE CASCADE ON UPDATE CASCADE,
  9.   CONSTRAINT `auxacc_fk2` FOREIGN KEY (`idacc`) REFERENCES `accidente` (`idacc`) ON DELETE CASCADE ON UPDATE CASCADE
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 PACK_KEYS=0;

Código SQL:
Ver original
  1. CREATE TABLE `accidente` (
  2.   `idacc` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `fecha` datetime DEFAULT NULL,
  4.   `descripcion` VARCHAR(100) DEFAULT NULL,
  5.   `montodanio` VARCHAR(20) DEFAULT NULL,
  6.   PRIMARY KEY (`idacc`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 PACK_KEYS=0;


hasta este punto voy bien cargo datos a las tablas de persona y auto, cuando quiero consultar en la tabla propietario por ejemplo el dni me salta vacio, deberia de mostrarme los dni de las personas que viajan a esta tabla. La verdad nose si en el codigo hice algo mal o no si me pudieran ayudar gracias

pd: las partes que me salen de PACK_KEYS=0 me lo agrega solo el mysql.
utilizo el sql manager

desde ya muchas gracias

Última edición por gnzsoloyo; 28/09/2015 a las 13:11 Razón: MUY mal qetiquetado. Usar hilgight "SQL", por favor.
  #2 (permalink)  
Antiguo 27/09/2015, 13:33
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Prolema con mysql foreign key

EL que tengas un FK no quiere decir que te va a cargar los datos automaticamente, lo que hace una FK es revisar que el dato exista primero en la tabla padre antes de poder insertarlo en la padre hija. En tu logica como mysql va a saber automaticamente a que propietario corresponde cada auto???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 27/09/2015, 15:38
 
Fecha de Ingreso: septiembre-2015
Mensajes: 9
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Prolema con mysql foreign key

claro yo pense que la fk hacia eso ya que mi profesor llevaba datos de una tabla a otra atrabes de las claves sin necesidad de volverlos a cargar pero la verdad nose si utilizaba algun metodo mas o no. por ejemplo cuando nos dio este ejercicio
el con solo cargar el dni en personas luego automaticamente se cargaban en propietario. cargaba atraves de un insert into persona values('datos');
bueno en fin.. me podrias orientar en este tema ?
deberia entonce cargar los datos para cada tabla de nuevo o como hago para que suceda lo que dije arriba
  #4 (permalink)  
Antiguo 27/09/2015, 16:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Prolema con mysql foreign key

Quizas tenia un trigger para hacerlo de forma Automagica, que cuando se cargara un auto se cargaran automaticamente los datos relacionados, pero no es algo que se haga de manera automatica sin programar nada, lo que deberias de hacer es cargar manualmente todos los valores

insert into persona values....
insert into autos values...

y al final

insert into propietario values....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 27/09/2015, 16:26
 
Fecha de Ingreso: septiembre-2015
Mensajes: 9
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Prolema con mysql foreign key

ah bueno muchas gracias :D ya que estamos me podrias ayudar a realizar estas 2 consultas
1)Mostrar para cada auto la cantidad de propietarios que tuvo (en esta utilizo un count, cuando realizo la consulta me devuelve la cantidad total de autos y no la que le corresponde a cada propietario)
2)Encontrar todos los propietarios cuyos montos de daños de accidentes superan el promedio del total de accidentes registrados.
  #6 (permalink)  
Antiguo 27/09/2015, 16:56
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Prolema con mysql foreign key

1.-es un count con un group by propietario :)
2.-Para la segunda como relaciones la tabla accidentes con las demas tablas???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 27/09/2015, 17:14
 
Fecha de Ingreso: septiembre-2015
Mensajes: 9
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Prolema con mysql foreign key

ah gracias ahora compruebo el codigo
para la segunda la tabla accidente y auto estan relacionadas con auxacc
personas esta relacionada con propietario y esta a su ves con auto
  #8 (permalink)  
Antiguo 27/09/2015, 17:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Prolema con mysql foreign key

Código SQL:
Ver original
  1. SELECT total, patente, dni FROM(
  2. SELECT SUM(montodanio) total, patente FROM auto AS t1
  3. LEFT JOIN auxacc AS t2 ON (t1.patente=t2.patente)
  4. LEFT JOIN accidente AS t3 ON (t1.idacc=t3.idacc)
  5. ) AS total
  6. LEFT JOIN propietario AS t4 ON (t4.patente=total.patente)
  7. WHERE total>=(SELECT avg(montodanio) FROM accidente )

Seria algo asi :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 27/09/2015, 18:08
 
Fecha de Ingreso: septiembre-2015
Mensajes: 9
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Prolema con mysql foreign key

che no anda esa secuencia me dice Column 'patente' in field list is ambiguous (por el 'patente de la fila montodanio) total,patente' y luego me dice
Unknown column 't1.idacc' in 'on clause'
  #10 (permalink)  
Antiguo 27/09/2015, 18:30
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Prolema con mysql foreign key

primero es un query gue igual y no funciona porque no use los campos que tu tienes en tu tabla ahora prueba esta consulta :)

Código SQL:
Ver original
  1. SELECT total, patente, dni FROM(
  2. SELECT SUM(montodanio) total, t1.patente FROM auto AS t1
  3. LEFT JOIN auxacc AS t2 ON (t1.patente=t2.patente)
  4. LEFT JOIN accidente AS t3 ON (t2.idacc=t3.idacc)
  5. ) AS total
  6. LEFT JOIN propietario AS t4 ON (t4.patente=total.patente)
  7. WHERE total>=(SELECT avg(montodanio) FROM accidente )
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 27/09/2015, 23:34
 
Fecha de Ingreso: septiembre-2015
Mensajes: 9
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Prolema con mysql foreign key

Gracias de verdad me fue de mucha ayuda si me ando alfinal gracias :)
podria hacerte una ultima consulta nomas y ya estamos Perdon por tantas preguntas

tengo que Mostrar los autos que registraron accidentes con un monto superior a $ 2000.

Código SQL:
Ver original
  1. SELECT DISTINCT patente,montodanio FROM auto,accidente WHERE montodanio>2000 GROUP BY patente;
[/PHP] lo escribo de esta forma pero no me muestra en si los autos correspondientes con un monto minimo de $2000
es decir tengo estos 3 vehiculos
toyota 2500
fiat 1500
ford 3000
cuando me da la consulta me deberia salir solo 2 vehiculos y sus patentes con el monto
pero me sale lo siguiente
toyota 2500
toyota 3000
ford 2500
ford 3000

y si altero la parte de group by a montodanio por ej
me sale toyota 3000
ford 3000
intente poner el DISTINCT para que no me repita datos pero igual sigue el prolema
(tengo bastante inconveniente con 2 tablas a la vez.talves escribo mal el codigo por que cuando debo mostrar de 1 sola me va todo bien )

gracias amigo por todo de verdad me fue de mucha ayuda :)

Última edición por gnzsoloyo; 28/09/2015 a las 13:13 Razón: MUY mal qetiquetado. Usar highlight "SQL", por favor.
  #12 (permalink)  
Antiguo 28/09/2015, 12:49
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Prolema con mysql foreign key

Lo que pasa es que estas haciendo un producto cruzado al usar los joins implicitos(
select * from tabla1,tabla2) y no estas poniendo sobre que columnas se debe de hacer la relacion te recomiendo usar joins explicitos(select * from tabla1 as t1 left join tabla2 on......)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 03/10/2015, 06:53
 
Fecha de Ingreso: septiembre-2015
Mensajes: 9
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Prolema con mysql foreign key

Gracias kpo me fue de mucha ayuda

Etiquetas: key, mysql, sql, tabla
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 16:58.