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

Fallo de novato

Estas en el tema de Fallo de novato en el foro de Mysql en Foros del Web. Tengo esta sentencia SQL para crear las tablas de una BD en NetBeans. Cuando la ejecuto me salen estos errores: Código de error 1005, estado ...
  #1 (permalink)  
Antiguo 18/03/2009, 14:25
 
Fecha de Ingreso: agosto-2004
Mensajes: 85
Antigüedad: 19 años, 7 meses
Puntos: 0
Fallo de novato

Tengo esta sentencia SQL para crear las tablas de una BD en NetBeans.
Cuando la ejecuto me salen estos errores:

Código de error 1005, estado SQLHY000: Can't create table 'tienda.clientes' (errno: 150)
Línea 28, columna 1

Código de error 1005, estado SQLHY000: Can't create table 'tienda.productos' (errno: 150)
Línea 44, columna 1


La sentencia es:




USE `Tienda`;

-- -----------------------------------------------------
-- Table `Tienda`.`Ventas`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Tienda`.`Ventas` (
`idVenta` INT NOT NULL ,
`idProducto` INT NOT NULL ,
`PasswordCliente` VARCHAR(25) NOT NULL ,
`Unidades` INT NOT NULL ,
`CantidadTotal` INT NOT NULL ,
`FechaVenta` DATETIME NULL ,
PRIMARY KEY (`idVenta`, `idProducto`) );


-- -----------------------------------------------------
-- Table `Tienda`.`Clientes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Tienda`.`Clientes` (
`Password` VARCHAR(25) NOT NULL ,
`Usuario` VARCHAR(45) NOT NULL ,
`Email` VARCHAR(45) NOT NULL ,
`Telefono` VARCHAR(15) NULL ,
CONSTRAINT `ClientesVentas`
FOREIGN KEY (`Password` )
REFERENCES `Tienda`.`Ventas` (`PasswordCliente` ));


-- -----------------------------------------------------
-- Table `Tienda`.`Productos`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Tienda`.`Productos` (
`idProducto` INT NOT NULL AUTO_INCREMENT ,
`idSeccion` INT NOT NULL ,
`Productos` VARCHAR(45) NOT NULL ,
`Precio` INT NOT NULL ,
`Descripcion` VARCHAR(150) NULL,
PRIMARY KEY (`idProducto`),
CONSTRAINT `ProductosVentas`
FOREIGN KEY (`idProducto` )
REFERENCES `Tienda`.`Ventas` (`idProducto` )
ON DELETE NO ACTION
ON UPDATE NO ACTION );



-- -----------------------------------------------------
-- Table `Tienda`.`Seccion`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Tienda`.`Seccion` (
`idSeccion` INT NOT NULL AUTO_INCREMENT ,
`Seccion` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`idSeccion`) ,
CONSTRAINT `SeccionProductos`
FOREIGN KEY (`idSeccion` )
REFERENCES `Tienda`.`Productos` (`idSeccion` )
ON DELETE NO ACTION
ON UPDATE NO ACTION);



Me podeis ayudar?? Gracias
  #2 (permalink)  
Antiguo 18/03/2009, 16:57
 
Fecha de Ingreso: febrero-2009
Ubicación: cancun!
Mensajes: 898
Antigüedad: 15 años, 2 meses
Puntos: 15
Respuesta: Fallo de novato

mira encontre esto podria ser tu caso con las llaves saludos!!

http://support.navicat.com/?_a=knowl...ndetails&_i=67
  #3 (permalink)  
Antiguo 19/03/2009, 05:16
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: Fallo de novato

1. La tabla CLIENTES usa una FK a PASSWORD (no es bueno usar palabras reservadas para nombres de campos) en VENTAS, pero ese campo no es ni PK ni tiene índice UNIQUE, además de ser ilógico que el PASSWORD esté definido como originado en VENTAS y no en CLIENTES
2. PRODUCTOS declara que su PK es FK de VENTAS, cuando debe ser al revés, VENTAS debe usar como FK la PK de PRODUCTOS...
3. SECCION declara que su PK es FK de VENTAS, cuando debe ser al revés, VENTAS debe usar como FK la PK de SECCION ...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 19/03/2009, 09:40
 
Fecha de Ingreso: agosto-2004
Mensajes: 85
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Fallo de novato

Claro eso es lo que quiero gnzsoloyo pero no se como.
La sentencia esta hecha con mySQL Workbench y no se como crear las relaciones.
Seguiré buscando.
Gracias
  #5 (permalink)  
Antiguo 19/03/2009, 10:12
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: Fallo de novato

El problema es que estás estableciendo las relaciones al revés en el MySQLWorkbench. La cardinalidad se debe establecer como 1 en la tabla que posee la PK y 1:N en la tabla dependiente, donde está la cardinalidad múltiple.
Fijate que la herramienta que establece la relación 1:N debe arrastrarse desde la tabla primaria a la secundaria. Además, previo a eso tienes que establecer las propiedades de esos campos (columnas).
__________________
¿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 19/03/2009, 13:12
 
Fecha de Ingreso: agosto-2004
Mensajes: 85
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Fallo de novato

Muchas gracias solucionado
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 09:16.