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

[SOLUCIONADO] MySQL Problema Crear relación de tablas

Estas en el tema de MySQL Problema Crear relación de tablas en el foro de Mysql en Foros del Web. Estoy creando una base de datos: Articulo idarticulo int(6) arcitulo varchar(45) Movimiento idarticulo int(6) (es el mismo de la tabla articulo) fecha_mov date() movimiento varchar(1) ...
  #1 (permalink)  
Antiguo 02/01/2014, 15:53
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta MySQL Problema Crear relación de tablas


Estoy creando una base de datos:
Articulo
idarticulo int(6)
arcitulo varchar(45)

Movimiento
idarticulo int(6) (es el mismo de la tabla articulo)
fecha_mov date()
movimiento varchar(1)
cantidad decimal (8,2)

Estoy usando MySQL Workbench y me bota el siguiente código y no crea la tabla movimiento.

Código MySQL:
Ver original
  1. CREATE  TABLE IF NOT EXISTS `articulo` (
  2.   `idarticulo` INT(6) NOT NULL ,
  3.   `articulo` VARCHAR(45) NULL ,
  4.   PRIMARY KEY (`idarticulo`) )
Código MySQL:
Ver original
  1. CREATE  TABLE IF NOT EXISTS `movimiento` (
  2.   `articulo_idarticulo` INT(6) NOT NULL ,
  3.   `fecha_mov` DATE NULL ,
  4.   `movimiento` VARCHAR(1) NULL ,
  5.   `cantidad` DECIMAL(8,2) NULL ,
  6.   PRIMARY KEY (`articulo_idarticulo`) ,
  7.   INDEX `fk_table1_articulo1` (`articulo_idarticulo` ASC) ,
  8.   CONSTRAINT `fk_table1_articulo1`
  9.     FOREIGN KEY (`articulo_idarticulo` )
  10.     REFERENCES `mydb`.`articulo` (`idarticulo` )

Me arroja este código:
Cita:
#1005 - Can't create table 'movimiento' (errno: 150)
__________________
Todos somos iguales. NO! a la violencia de género.

Última edición por gnzsoloyo; 02/01/2014 a las 17:07 Razón: MUY mal etiquetado. El label PHP no es multiuso. Usar los Highlights, por favor.
  #2 (permalink)  
Antiguo 02/01/2014, 16:00
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: MySQL Problema Crear relación de tablas

Bueno un error 150 dice que la creación de la tabla falló debido a una restricción de clave foránea incorrectamente formulada. Quita `mydb` de `mydb`.`articulo` o asegúrate de que esa es la base de datos correcta (cosa que no creo que sea así ya que hice las pruebas y sin eso me funcionó correctamente)

Debería quedarte algo así:

Código MySQL:
Ver original
  1. CREATE  TABLE IF NOT EXISTS `movimiento` (
  2.  
  3.   `articulo_idarticulo` INT(6) NOT NULL ,
  4.  
  5.   `fecha_mov` DATE NULL ,
  6.  
  7.   `movimiento` VARCHAR(1) NULL ,
  8.  
  9.   `cantidad` DECIMAL(8,2) NULL ,
  10.  
  11.   PRIMARY KEY (`articulo_idarticulo`) ,
  12.  
  13.   INDEX `fk_table1_articulo1` (`articulo_idarticulo` ASC) ,
  14.  
  15.   CONSTRAINT `fk_table1_articulo1`
  16.  
  17.     FOREIGN KEY (`articulo_idarticulo` )
  18.  
  19.     REFERENCES `articulo` (`idarticulo` )
  20.  
  21.  

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 02/01/2014, 16:07
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: MySQL Problema Crear relación de tablas

Cierto!!! no lo vi.
Ya lo ejecutó.
Pero se supone que en ambas tablas el campo id_articulo debería ser igual, sin embargo en la tabla movimiento lo ha creado como muestra la image: articulo_idarticulo.
No se supone que debería ser id_articulo nada más?
__________________
Todos somos iguales. NO! a la violencia de género.
  #4 (permalink)  
Antiguo 02/01/2014, 16:14
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: MySQL Problema Crear relación de tablas

Lo puedes hacer de esa manera (solo dejando idarticulo)

Pero debes de cambiar

Código MySQL:
Ver original
  1. INDEX `fk_table1_articulo1` (`articulo_idarticulo` ASC) ,
...
Código MySQL:
Ver original
  1. FOREIGN KEY (`articulo_idarticulo` )

El asunto es que ya depende de ti nombrar las llaves foráneas como mejor te parezcan. En mi caso las nombro de la misma manera que como se nombran las PK (como sugieres, solo dejar idarticulo). Aunque también he visto que dejan el nombre de la tabla seguido de la PK a la que hacen referencia (en este caso sería articulo_idarticulo). Como es mejor? Considero de que depende de ti.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 02/01/2014, 16:30
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: MySQL Problema Crear relación de tablas

Cita:
Iniciado por jonni09lo Ver Mensaje
Lo puedes hacer de esa manera (solo dejando idarticulo)

Pero debes de cambiar

Código MySQL:
Ver original
  1. INDEX `fk_table1_articulo1` (`articulo_idarticulo` ASC) ,
...
Código MySQL:
Ver original
  1. FOREIGN KEY (`articulo_idarticulo` )

El asunto es que ya depende de ti nombrar las llaves foráneas como mejor te parezcan. En mi caso las nombro de la misma manera que como se nombran las PK (como sugieres, solo dejar idarticulo). Aunque también he visto que dejan el nombre de la tabla seguido de la PK a la que hacen referencia (en este caso sería articulo_idarticulo). Como es mejor? Considero de que depende de ti.

Saludos
ok, ya entendí.
Quiero una sugerencia en el caso de mi tabla movimiento.
Movimiento guardará los ingresos y egresos al almacén del artículo.
Es necesario utilizar más PK ? o eso se puede optimizar con un select ?
__________________
Todos somos iguales. NO! a la violencia de género.
  #6 (permalink)  
Antiguo 02/01/2014, 17:04
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: MySQL Problema Crear relación de tablas

No se que alcance tenga tu aplicativo, pero creo que así como lo tienes es más que suficiente.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.

Etiquetas: null, sql, tabla, tablas
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 10:35.