Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi)
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi) 
 
a ver shordi la propuesta es esta.

estoy trancado con lo de entender la llave foranea, por tanto necesito un ejemplo bien simple de aplicación para poder introducirme en el profesionalismo en base de datos.

voy hacer un ejemplo y vos me iras guiando hacia la solución.

la idea es hacer lo que no hice y debí hacer en el programa taller

el ejemplo es una tabla deudas y otra entregas y vincularlas usando foreign key.

cuando tenga algo hecho lo subo acá y vos me vas guiando hasta lograr el objetivo que es ver el funcionamiento de foreign key.

primero voy a planificar el uml
después hacer la interfaz
luego lo subo acá y vos haces las primeras correcciones.


te parece?
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi) 
 
arranco con el diseño vos mira y hace las correcciones correspondientes.

 dia_gnome
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi) 
 
Ok. La imagen es correcta. Pero es mucho más fácil de lo que crees. El asunto es que una vez establecida la integridad referencial en la BD, el mantenimiento de la misma se deja en sus manos, por lo que tú no tienes que preocuparte de nada. Es decir, supon que tienes esta estructura:
Cliente
           facturas del cliente
                                      items de factura
                                      pagos de factura

Es decir por cada registro de cliente puede tener varias facturas y por cada factura puedes tener varios ítems y varios pagos

Una vez bien establecida la integridad referencial, para eliminar toda la estructura para un cliente basta con "delete from cliente where id_cliente=numero"

y la base de datos solita te hace la limpia de la tabla facturas, items y pagos.

Es decir el código de gambas con integridad referencial en la base de datos es mucho más simple que el código que escribes sin ella.
Tampoco tienes que preocuparte por verificar que el id_cliente de pagos esté bien o mal o que se puedan grabar facturas sin clientes, etc. etc.

Más simple, más efectivo.

Saludos
 




===================
No podemos regresar
 
última edición por shordi el Jueves, 29 Octobre 2015, 19:11; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi) 
 
en el campo entrega hay que poner la suma de las entregas de la deuda

el saldo se calcula en el evento change de valuebox entrega supongo  

y como decís vos cuando una deuda se borra hay que borrar su entregas vinculadas.(eso lo resolvería la misma tabla)
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
última edición por v3ctor el Jueves, 29 Octobre 2015, 21:21; editado 1 vez 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi) 
 
aquí el DDL    shordi (opa el tipo esta estudiando eeee jajajaj habla de DDL)

CREATE TABLE deudas (
"id_deuda" integer PRIMARY KEY autoincrement NOT NULL,
"f_ingreso" datatime NOT NULL,
"monto" float (6,2) NOT NULL,
"entregas" float (6,2) NOT NULL,
"saldo" float (6,2) NOT NULL,
"motivo" text NOT NULL
)

CREATE TABLE "entregas" (
"id_entrega" integer PRIMARY KEY autoincrement NOT NULL,
"id_deuda" integer NOT NULL,
"f_entrega" datatime NOT NULL,
"cantidad" float (6,2) NOT NULL,
FOREIGN KEY (id_deuda) REFERENCES deudas(id_deuda) ON DELETE restrict
)


fijate si esta bien  
 



 
última edición por v3ctor el Jueves, 29 Octobre 2015, 21:57; editado 3 veces 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi) 
 
creo que algunos NOT NULL están de mas

fecha de ingreso  porque de repente no se exacta la fecha y dejo para ponerla en otro momento
el monto  porque tal vez debo un producto pero no se el precio
también entrega porque aun no he hecho entregas
sigo razonando.
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi) 
 
Hay cosas que no entiendo:

CREATE TABLE deudas (
"id_deuda" integer PRIMARY KEY autoincrement NOT NULL,
"f_ingreso" datatime NOT NULL,  --->¿Esto qué es? ¿La fecha en que se generó la deuda? para eso tienes la fecha en la factura (salvo que seas un prestamista, claro   :mryellow:) Además ¿Por qué datatime?¿Es importante la hora? mejor date a secas... digo.)
"monto" float (6,2) NOT NULL,
"entregas" float (6,2) NOT NULL, ---->¿Esto que és? los ingresos ya los tienes la tabla entregas...
"saldo" float (6,2) NOT NULL,      ---->¿Esto qué es? El saldo te lo da la tabla entregas...
"motivo" text NOT NULL
)

CREATE TABLE "entregas" (
"id_entrega" integer PRIMARY KEY autoincrement NOT NULL,
"id_deuda" integer NOT NULL,
"f_entrega" datatime NOT NULL, --->Lo mismo que la otra fecha, mejor date...
"cantidad" float (6,2) NOT NULL,
--->aquí sí podrías colocar el saldo, no es estrictamente necesario, pero sí cómodo a la hora de hacer consultas.
FOREIGN KEY (id_deuda) REFERENCES deudas(id_deuda) ON DELETE restrict   --->¿seguro? Yo creo que se impone más bien un cascade. Deja a gambas que decida si se puede o no eliminar una deuda, pero si restringes en la DB no podrás eliminar una deuda mientras existan entregas, lo cual es incómodo a la hora de eliminar la deuda.

La filosofía de fondo es nunca dupliques información. Malgastas espacio y favoreces la aparición de errores... además de complicarte la vida en el código.
Por ejemplo: Si colocas el saldo en la tabla deudas, además de perder los saldos parciales, tienes que comprobar que es correcto siempre que modifiques, grabes, elimines o añadas una entrada. Eso es, cuando menos incómodo y en caso de error en alguna de esas transacciones fuente de errores.
Coloca el saldo en cada entrega y haz una vista donde aparezca la cantidad debida, el total entregado y el saldo actual con unos sencillos cálculos sobre las tablas. Eso no falla nunca y no tienes que preocuparte de actualizaciones ni demás.
 




===================
No podemos regresar
 
última edición por shordi el Jueves, 29 Octobre 2015, 22:44; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi) 
 
shordi voy a ver tus correcciones y te presentare nuevamente las sentencias para nuevas correcciones.


una cosa olvídate de facturas o cualquier otra cosa solo enfocate en dos tablas, deuda y entregas no existe nada mas, esta base esta orientada a aprender y dar un ejemplo de como se hace.
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi) 
 
Citar:
una cosa olvídate de facturas o cualquier otra cosa solo enfocate en dos tablas, deuda y entregas no existe nada mas


Confimado: Eres un prestamista de los de interés compuesto...       
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Practico De FOREIGN KEY (por V3ctor Y Shordi) 
 
naaaa que prestamista ni prestamista

aqui dejo mis avances:
CREATE TABLE deudas (
"id_deuda" integer PRIMARY KEY autoincrement NOT NULL,
"f_ingreso" date,
"monto" float (6,2),
"motivo" text NOT NULL
)

CREATE TABLE "entregas" (
"id_entrega" integer PRIMARY KEY autoincrement NOT NULL,
"id_deuda" integer NOT NULL,
"f_entrega" date,
"cantidad" float (6,2) NOT NULL,
FOREIGN KEY (id_deuda) REFERENCES deudas(id_deuda) ON DELETE cascade
)


Activar pragma foreign_keys para que (on delete cascade) haga su trabajo de borrado en cascada.
pragma foreign_keys=1

Desactivar  foreign_keys(lo que hara que borre la deuda pero no borrara las entregas dejando basura en la tabla de datos y anulando el on delete cascade:
pragma foreign_keys=0

Ver estado de foreign_keys:
pragma foreign_keys


he estado probando en la consulta sql de gambas y me dio una sensación agradable al ver que al borrar las deudas iba a la tabla entregas y también se notaba que había borrado las entregas.

jajajaj al principio probe y no borraba las entregas y me acorde de que hay que activar el pragma foreign_key  

me agrada este ejemplo que estamos tratando de hacer ya estoy aprendiendo mucho.

a ver sensei    como lo ves?  
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Empezando A Usar Git Caso Practico. tincho Aplicaciones/Fragmentos de Código 25 Lunes, 13 Marzo 2017, 17:02 Ver último mensaje
mckaygerhard
No hay nuevos mensajes Dividiendo Jedi-Gambas Shordi En Dos Con L... vuott Aplicaciones/Fragmentos de Código 4 Jueves, 08 Junio 2017, 15:42 Ver último mensaje
tincho
No hay nuevos mensajes [C] Uso Practico De Los Punteros Shell C/C++ 3 Sabado, 09 Marzo 2019, 10:36 Ver último mensaje
Shell
No hay nuevos mensajes Reto 16(V3ctor) Elimina .png Repetidas v3ctor Retos de programación 14 Viernes, 01 May 2020, 23:33 Ver último mensaje
tercoIDE
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron