FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
interbase:¿como crear un master-detail-detail?
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
__________________
El camino para llegar al conocimiento de las cosas pasa por el aprendizaje humilde de lo que nos rodea |
#2
|
|||
|
|||
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.
__________________
Luis Fernando Buelvas T. |
#3
|
|||
|
|||
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!!!!!
__________________
El camino para llegar al conocimiento de las cosas pasa por el aprendizaje humilde de lo que nos rodea |
|
|
|