PDA

Ver la Versión Completa : interbase:¿como crear un master-detail-detail?


ElSanto24
22-10-2003, 02:19:21
Hola amigos:

Soy un programador en delphi 7 e interbase 7, con una duda
de la que no sale de su asombro, ahí va, espero que me puedan ayudar:

Tengo una tabla de clientes (omitiré columnas )

Table clientes( codcli primary key)

Tengo otra tabla que es pedidos

Table pedidos (idpedido, codcli)

Idpedido y codcli primary key
Codcli foreign key (codcli) references clientes
(codcli) on update cascade on delete cascade //HASTA AQUÍ, INTERBASE LO
ACEPTA

Table linped (idpedido,idllinped)

Idpedido,idlinped primary key
Idpedido foreign key (idpedido) references
pedidos (idpedido) on update cascade on delete cascade //DA UN ERROR DE
METADATA


CONCRETAMENTE:

UNSUCCESFUL METADATA UPDATE
Couldt not find UNIQUE INDEX with expecified
columns on line X

Despues de lo que me esta ocurriendo empiezo a pensar que
interbase no permite las restricciones de integridad en cascada (varias
foreign key en cascada)
O eso, o no estoy escribiendo la foreign key correctamente.

Se que existe la solucion de crear triggers para simular la
restricción de integridad, pero, ¿significa esto que interbase tiene la
limitación que os comento?

Por favor, seguro que alguien ha tenido que hacer algo parecido
(relacion clientes-pedido-lineas de pedido), me podeis proponer
soluciones que no sean el trigger?

Gracias de antemano

lbuelvas
22-10-2003, 07:02:35
Hola campeones del foro.

Cordial saludo para ElSanto24

Bueno la definicion de llave foranea (asi de afan) es: atributo o conjunto de atributos en una tabla que corresponde(n) a valor(res) de atributo(s) en otra tabla donde ese(esos) atributo(s) corresponde a la llave primaria.

Resulta que tu definiste la llave primaria de pedidos compuesta por el numero del pedido mas el codigo del cliente (me parece de manera respetusa que con el numero del pedido es suficiente).

Para que linea de pedido pueda relacionarse con pedido debes adicionar un atributo para el codigo del cliente en la tabla linea de pedido.

Si lo tuyo es un error de conceptos cambia la llave primaria de la tabla pedidos para que solo contenga como identificador el atributo numero del pedido y te funcionará la definicion de llave foranea que presentaste.

Espero haber colaborado.

ElSanto24
22-10-2003, 10:24:45
Gracias!!!

Tu post me ha hecho replantearme mi diseño, y he llegado a la conclusion que no me hace falta el codigo de cliente para el pedido, ya que con eso pretendia que, como en otras tablas que tengo, apareciera los pedidos de un cliente concreto, pero aqui no tiene sentido, pues puede ser cualquier cliente y no lo se a priori. conclusion: quitaré de la primary key de pedidos a codcli y engancharé linped como un master-detail normal


Gracias por tu sugerencia.

Un abrazo!!!!!