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

problema con creacion de tablas

Estas en el tema de problema con creacion de tablas en el foro de Mysql en Foros del Web. estoy intentando realizar un ejercicio de tablas y siempre me sale el mismo error y creo que es en el tema de la foreign key ...
  #1 (permalink)  
Antiguo 17/01/2011, 10:43
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 3 meses
Puntos: 0
problema con creacion de tablas

estoy intentando realizar un ejercicio de tablas y siempre me sale el mismo error y creo que es en el tema de la foreign key porque las 3 primeras tablas si me deja crearlas ¿alguna solucion?


CREATE DATABASE empresa;
USE empresa;
CREATE TABLE AEXISTENCIAS (
Aid VARCHAR (3),
Pid VARCHAR (3),
Acant INTEGER NOT NULL,

PRIMARY KEY (Aid,Pid)
)ENGINE=InnoDB;

CREATE TABLE TEXISTENCIAS (
Tid VARCHAR (3),
Pid VARCHAR (3),
Tcant INTEGER NOT NULL,

PRIMARY KEY (Tid,Pid)
)ENGINE=InnoDB;

CREATE TABLE PEDIDOS (
Pedid VARCHAR (4),
Aid VARCHAR (3),
Tid VARCHAR (3),
Pid VARCHAR (3),
Cant INTEGER NOT NULL,
Fped SYSDATE,

PRIMARY KEY (Pedid)
)ENGINE=InnoDB;

CREATE TABLE TIENDAS (
Tid VARCHAR (3),
Tdir VARCHAR (50),
Tloc VARCHAR (15),

PRIMARY KEY (Tid),
FOREIGN KEY (Tid) REFERENCES TEXISTENCIAS(Tid),
FOREIGN KEY (Tid) REFERENCES PEDIDOS(Tid)
)ENGINE=InnoDB;

CREATE TABLE ALMACENES (
Aid VARCHAR (3),
Adir VARCHAR (50),
Aloc VARCHAR (15),

PRIMARY KEY (Aid),
FOREIGN KEY (Aid) REFERENCES AEXISTENCIAS(Aid),
FOREIGN KEY (Aid) REFERENCES PEDIDOS(Aid)
)ENGINE=InnoDB;

CREATE TABLE PRODUCTOS (
Pid VARCHAR (3),
Descripcion VARCHAR (20),
Peso INT (4) WHERE Peso BETWEEN 0 AND 1000,
Precio INT (7) WHERE Precio BETWEEN 0 AND 1000000,

PRIMARY KEY (Pid),
FOREIGN KEY (Pid) REFERENCES AEXISTENCIAS(Pid),
FOREIGN KEY (Pid) REFERENCES TEXISTENCIAS(Pid),
FOREIGN KEY (Pid) REFERENCES PEDIDOS(Pid)
)ENGINE=InnoDB;
  #2 (permalink)  
Antiguo 17/01/2011, 10:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: problema con creacion de tablas

Primero.. en la tabla pedidos utilizas un tipo de dato llamado SYSDATE. eso no existe en mysql. El tipo de dato para fechas es DATE, DATETIME o TIMESTAMP.

Si corriges eso, esa tabla ya no presenta problema.

En la tabla tiendas estas tratando de hacer referencia a la tabla texistencias. Si te fijas, la tabla texistencias tiene una primary key compuesta y unicamente estas haciendo referencia a un valor.

Con la tabla almacenes pasa exactamente lo mismo.

En la ultima tabla, en la creación de la tabla usas la palabra WHERE. Esto es un error de sintaxis. En mysql no es posible hacer un check para un campo de tabla. Por lo que si quieres limitar el ingreso de ciertos valores que no son validos, toca hacerlo desde programación o con la ayuda de una función o un trigger.

espero haberte ayudado.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 17/01/2011, 10:54
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: problema con creacion de tablas

Saludos

Es por que en la tabla tiendas tu estas indicando

Código MySQL:
Ver original
  1. FOREIGN KEY (Tid) REFERENCES PEDIDOS(Tid)

Siendo que la llave primaria de la tabla PEDIDOS es el campo Pedid
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Última edición por Nano_; 17/01/2011 a las 11:01
  #4 (permalink)  
Antiguo 17/01/2011, 11:11
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: problema con creacion de tablas

entonces como deberia ser la linea foreign en la tabla tiendas¿?es que estoy muy pez en esto
  #5 (permalink)  
Antiguo 17/01/2011, 12:16
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: problema con creacion de tablas

neckar
realmente necesitas una primary key compuesta en las tablas de existencias?
Lo mas sencillo sería dejar en estas tablas la primary key en el campo Tid. Si es completamente necesario la llave compuesta, debes hacer el foreign key contra dos campos al igual que la primary key.

Código SQL:
Ver original
  1. FOREIGN KEY (Tid,pid) REFERENCES PEDIDOS(Tid,pid)
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 17/01/2011, 12:22
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: problema con creacion de tablas

ok,muchas gracias por la ayuda. saludos
  #7 (permalink)  
Antiguo 17/01/2011, 12:43
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: problema con creacion de tablas

ahora al meter los valores me da problema de syntax ¿que esta mal?


CREATE TABLE AEXISTENCIAS (
Aid VARCHAR (3),
Pid VARCHAR (3),
Acant INTEGER NOT NULL,
INSERT INTO AEXISTENCIAS VALUES ('A2','P3',250),
INSERT INTO AEXISTENCIAS VALUES ('A2','P4',125),
INSERT INTO AEXISTENCIAS VALUES ('A2','P10',710),
INSERT INTO AEXISTENCIAS VALUES ('A2','P25',25),
INSERT INTO AEXISTENCIAS VALUES ('A2','P26',100),
INSERT INTO AEXISTENCIAS VALUES ('A2','P12',25),
INSERT INTO AEXISTENCIAS VALUES ('A2','P13',75),
INSERT INTO AEXISTENCIAS VALUES ('A3','P4',210),
INSERT INTO AEXISTENCIAS VALUES ('A3','P10',14),
INSERT INTO AEXISTENCIAS VALUES ('A3','P25',50),
INSERT INTO AEXISTENCIAS VALUES ('A5','P3',40),
INSERT INTO AEXISTENCIAS VALUES ('A5','P25',100),
INSERT INTO AEXISTENCIAS VALUES ('A5','P26',12),
PRIMARY KEY (Aid,Pid)
)ENGINE=InnoDB;
  #8 (permalink)  
Antiguo 17/01/2011, 12:51
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: problema con creacion de tablas

Cita:
Iniciado por neckar Ver Mensaje
CREATE TABLE AEXISTENCIAS (
Aid VARCHAR (3),
Pid VARCHAR (3),
Acant INTEGER NOT NULL,
INSERT INTO AEXISTENCIAS VALUES ('A2','P3',250),
INSERT INTO AEXISTENCIAS VALUES ('A2','P4',125),
INSERT INTO AEXISTENCIAS VALUES ('A2','P10',710),
INSERT INTO AEXISTENCIAS VALUES ('A2','P25',25),
INSERT INTO AEXISTENCIAS VALUES ('A2','P26',100),
INSERT INTO AEXISTENCIAS VALUES ('A2','P12',25),
INSERT INTO AEXISTENCIAS VALUES ('A2','P13',75),
INSERT INTO AEXISTENCIAS VALUES ('A3','P4',210),
INSERT INTO AEXISTENCIAS VALUES ('A3','P10',14),
INSERT INTO AEXISTENCIAS VALUES ('A3','P25',50),
INSERT INTO AEXISTENCIAS VALUES ('A5','P3',40),
INSERT INTO AEXISTENCIAS VALUES ('A5','P25',100),
INSERT INTO AEXISTENCIAS VALUES ('A5','P26',12),
PRIMARY KEY (Aid,Pid)
)ENGINE=InnoDB;

Es una broma?

Cita:
ahora al meter los valores me da problema de syntax ¿que esta mal?
Todo.

Haz leído algo de bases de datos? De operaciones DML y DDL?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 17/01/2011, 12:57
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: problema con creacion de tablas

Cita:
Iniciado por neckar Ver Mensaje
ahora al meter los valores me da problema de syntax ¿que esta mal?


CREATE TABLE AEXISTENCIAS (
Aid VARCHAR (3),
Pid VARCHAR (3),
Acant INTEGER NOT NULL,
INSERT INTO AEXISTENCIAS VALUES ('A2','P3',250),
INSERT INTO AEXISTENCIAS VALUES ('A2','P4',125),
INSERT INTO AEXISTENCIAS VALUES ('A2','P10',710),
INSERT INTO AEXISTENCIAS VALUES ('A2','P25',25),
INSERT INTO AEXISTENCIAS VALUES ('A2','P26',100),
INSERT INTO AEXISTENCIAS VALUES ('A2','P12',25),
INSERT INTO AEXISTENCIAS VALUES ('A2','P13',75),
INSERT INTO AEXISTENCIAS VALUES ('A3','P4',210),
INSERT INTO AEXISTENCIAS VALUES ('A3','P10',14),
INSERT INTO AEXISTENCIAS VALUES ('A3','P25',50),
INSERT INTO AEXISTENCIAS VALUES ('A5','P3',40),
INSERT INTO AEXISTENCIAS VALUES ('A5','P25',100),
INSERT INTO AEXISTENCIAS VALUES ('A5','P26',12),
PRIMARY KEY (Aid,Pid)
)ENGINE=InnoDB;

Francamente (y perdón por los aplausos), había visto metidas de pata en SQL, pero esa.... se lleva las palmas...


Estás mezclando una sentencia DDL (Data Definition Language) con una DML (Data Management Language), y de una forma asombrosa...

Una cosa es una sentencia de creación y otra muy diferente de inserción. No puedes meter datos en una CREATE TABLE en esa forma.
Los INSERT van después e crear la tabla y son independientes del CREATE TABLE.

Vuelve al manual o a un tutorial de SQL y leelo de nuevo.
__________________
¿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 17/01/2011, 13:00
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: problema con creacion de tablas

la funcion de insertar no se aplica asi? es lo que he visto en los ejemplos
  #11 (permalink)  
Antiguo 17/01/2011, 13:02
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: problema con creacion de tablas

No, neckar, no solo no se hace así, sino que no existe ningún manual o tutorial que lo pueda haber escrito de esa forma...
Alguien que escriba eso simplemente no aprueba la materia....
__________________
¿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 17/01/2011, 13:03
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: problema con creacion de tablas

Como te dije: son dos cosas distintas:
Código MySQL:
Ver original
  1. CREATE TABLE AEXISTENCIAS (
  2. Aid VARCHAR (3),
  3. Pid VARCHAR (3),
  4. PRIMARY KEY (Aid,Pid)
  5.  
  6. INSERT INTO AEXISTENCIAS VALUES ('A2','P3',250);
  7. INSERT INTO AEXISTENCIAS VALUES ('A2','P4',125);
  8. INSERT INTO AEXISTENCIAS VALUES ('A2','P10',710);
  9. INSERT INTO AEXISTENCIAS VALUES ('A2','P25',25);
  10. INSERT INTO AEXISTENCIAS VALUES ('A2','P26',100);
  11. INSERT INTO AEXISTENCIAS VALUES ('A2','P12',25);
  12. INSERT INTO AEXISTENCIAS VALUES ('A2','P13',75);
  13. INSERT INTO AEXISTENCIAS VALUES ('A3','P4',210);
  14. INSERT INTO AEXISTENCIAS VALUES ('A3','P10',14);
  15. INSERT INTO AEXISTENCIAS VALUES ('A3','P25',50);
  16. INSERT INTO AEXISTENCIAS VALUES ('A5','P3',40);
  17. INSERT INTO AEXISTENCIAS VALUES ('A5','P25',100);
  18. INSERT INTO AEXISTENCIAS VALUES ('A5','P26',12);
__________________
¿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 17/01/2011, 13:10
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: problema con creacion de tablas

ok gracias a todos por la ayuda, ya he podido arreglarlo.es que acabo de empezar a estudiar SGBD y estoy aun muy liado. Un saludo

Etiquetas: 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 18:38.