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

Crear una tabla con dos índices

Estas en el tema de Crear una tabla con dos índices en el foro de Mysql en Foros del Web. Hola a todos/as, Quiero crear una tabla, llamada LineaPedido, con 4 campos: codLineaPedido, codPedido, codArticulo, descuento. Todos son enteros. codLineaPedido y codPedido forman la clave ...
  #1 (permalink)  
Antiguo 12/02/2007, 13:39
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 19 años
Puntos: 1
Crear una tabla con dos índices

Hola a todos/as,

Quiero crear una tabla, llamada LineaPedido, con 4 campos:

codLineaPedido, codPedido, codArticulo, descuento.
Todos son enteros.

codLineaPedido y codPedido forman la clave Primaria de la tabla.

Además, codPedido es clave extranjera de la tabla Pedidos y codArticulo es clave extranjera de la tabla Articulos.

Utilizo esta sentencia pero no funciona:

CREATE TABLE LineaPedido(
codLineaPedido INT NOT NULL,
codPedido INT NOT NULL,
codArticulo INT NOT NULL,
descuento INT,
PRIMARY KEY (codLineaPedido, codPedido),
INDEX icodigoP (codPedido),
INDEX icodigoA (codArticulo),
FOREIGN KEY (codPedido) REFERENCES Pedidos(codPedido)
FOREIGN KEY (codArticulo) REFERENCES Articulos(codArticulo) ON DELETE CASCADE
) ENGINE=INNODB;


Es problema de sintaxis pero no sé como escribir la sentencia para crear esta tabla con estas condiciones. ¿Alguien puede ayudarme?

Un saludo
  #2 (permalink)  
Antiguo 12/02/2007, 17:26
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 19 años
Puntos: 5
Re: Crear una tabla con dos índices

Holas, segun revise tu codigo esta todo bien con excepcion una coma que falta en las referencias, ahora otro aspecto a tomar en cuenta es que primero tienen que estar creadas las tablas padre (Pedidos y Articulos) para que puedas crear la tabla LineaPedido, aqui te dejo la sentencia Sql con la coma que le faltaba:
Código PHP:
CREATE TABLE LineaPedido(
codLineaPedido INT NOT NULL,
codPedido INT NOT NULL,
codArticulo INT NOT NULL,
descuento INT,
PRIMARY KEY (codLineaPedidocodPedido),
INDEX icodigoP (codPedido),
INDEX icodigoA (codArticulo),
FOREIGN KEY (codPedidoREFERENCES Pedidos(codPedido),
FOREIGN KEY (codArticuloREFERENCES Articulos(codArticuloON DELETE CASCADE
ENGINE=INNODB
saludos, cya
__________________
"El Conocimiento es de todos, no solo de algunos"
  #3 (permalink)  
Antiguo 12/02/2007, 17:38
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 19 años
Puntos: 1
Re: Crear una tabla con dos índices

Muchas gracias deadlykyo!,

Es la segunda vez que me ayudas hoy..jeje.

He añadido la coma que me faltaba y ha funcionado a las mil maravillas.
Las tablas de Pedidos y Artículos ya las tenía creadas.

Tengo una duda respecto a la instrucción final DELETE ON CASCADE.
Sólo la he puesto después de la referencia a la tabla de Artículos.

¿Esto significa que cuando borre un artículo se eliminarán también todas las LineasPedidos que tengan referencia a ese artículo?.

Imagino que debería escribir también DELETE ON CASCADE después de la referencia a la tabla Pedidos pero no termino de entender el alcance de estas instrucciones.

¿Qué es más recomendable?

Gracias de nuevo por tu ayuda.

Un Saludo.
  #4 (permalink)  
Antiguo 12/02/2007, 18:27
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 19 años
Puntos: 5
Re: Crear una tabla con dos índices

Exacto si eliminas algo en la tabla padre se eliminan todos los hijos, aqui hay un enlace bien explicado sobre el funcionamiento de cada una de esas sentencias:
http://dev.mysql.com/doc/refman/5.0/...nstraints.html
ahora que es mas recomendable, pues todo depende de los requerimientos del sistema, en algunos casos es mas recomendable hacer uso del borrado logico y no fisico, a que me refiero podrias crear una columna extra en tus tablas que represente si el registro esta activo o eliminado y controlas el resto mediante codigo (no es muy complejo), pero si no necesitas mantener este tipo de control puedes eliminar directamente, saludos, cya
__________________
"El Conocimiento es de todos, no solo de algunos"
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 22:27.