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

Manejo de claves foraneas en sistemas transaccionales

Estas en el tema de Manejo de claves foraneas en sistemas transaccionales en el foro de PostgreSQL en Foros del Web. Hola a Todos. Mi panarama laboral actual se basa sobre una base de datos postgres, donde absolutmante el 100% de los datos son historicos y ...
  #1 (permalink)  
Antiguo 24/05/2010, 13:34
Avatar de webness  
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 10 meses
Puntos: 5
Información Manejo de claves foraneas en sistemas transaccionales

Hola a Todos. Mi panarama laboral actual se basa sobre una base de datos postgres, donde absolutmante el 100% de los datos son historicos y sufren actualizaciones 2 o 3 veces al año como maximo, donde la gran mayoria de las tablas poseen muchas columnas y muchos registros, por lo cual ninguna de estas tablas posee estrictamente clave foraneas:

Ej: Una tabla de lineas telefonicas, posee los campos de codigo_cidad,nombre_ciudad, codigo_barrio, nombre_barrio, para que al momento de consultar sobre esta no se hagan join sobre las respectivas tablas y mejorar el tiempo de conulta.

Mi pregunta puntual es: ¿Que tan recomendable es el uso de claves foraneas en sistemas altamente transaccionales, como lo podria un sistema de facturacion, una tienda OnLine, sistemas de asignacion de rutas y empleados para operaciones de instalacion y servicio tecnico?.
  #2 (permalink)  
Antiguo 24/05/2010, 15:29
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Manejo de claves foraneas en sistemas transaccionales

Cita:
¿Que tan recomendable es el uso de claves foraneas en sistemas altamente transaccionales, como lo podria un sistema de facturacion, una tienda OnLine, sistemas de asignacion de rutas y empleados para operaciones de instalacion y servicio tecnico?.
No es recomendable, es absolutamente necesario.
Las llaves foraneas nos aseguran la integridad de la información almacenada.
De no ser así, no se tendría la certeza de que la información de la base de datos sea consistente.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/05/2010, 07:48
Avatar de webness  
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Manejo de claves foraneas en sistemas transaccionales

Eso lo entiendo huesos, lo que me inquieta es lo siguiente: supongamos una tabla de clientes, la de productos, y las tablas de factura y detalle de esta, en un sistema donde se registran clientes a diario, y se hacen multiples ventas cuyo crecimiento es constante, supongamos al cabo de un año, y el intentar sacar un reporte sobre la cantidad de productos vendidos agrupados por mes y sucursal, hacer este query el cual podria requerir de un JOIN ENTRE UNAS 3 TABLAS, productos, facturas, detalle_facturas, no seria algo pesado???, de ser asi, que estrategias se recomiendan, aparte del uso de indices?
  #4 (permalink)  
Antiguo 25/05/2010, 08:31
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Manejo de claves foraneas en sistemas transaccionales

Webness... Para determinar si el query es pesado o no, se tendrían que hacer pruebas.. pero creeme, que una solución para mejorar el rendimiento no es quitar la integridad referencial de las tablas.

Lo que puedes probar, es tener los constraints declarados como deferred not deferreable
Cita:
DEFERRABLE
NOT DEFERRABLE
This controls whether the constraint can be deferred. A constraint that is not deferrable will be checked immediately after every command. Checking of constraints that are deferrable can be postponed until the end of the transaction (using the SET CONSTRAINTS command). NOT DEFERRABLE is the default. Only foreign key constraints currently accept this clause. All other constraint types are not deferrable.
de: http://www.postgresql.org/docs/8.4/i...eatetable.html

Donde lo que se hace, es dentro de una transacción, evitar la consulta de constraints agilizando el proceso y al momento de hacer commit sobre la transacción se hacen todas las validaciones.

Te recomiendo mires a fondo el tema que puede ser una buena alternativa a tu problema.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 25/05/2010, 11:10
Avatar de webness  
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Manejo de claves foraneas en sistemas transaccionales

estuve investigando bastante, y los problemas de rendimiento y obtimizacion de consulta, es mas cuestion de diseño y politicas de manejo de datos historicos y actuales, es decir, no dejar que una tabla crezca y cresca, sino mantener en ellas solo datos actuales de una semana, un mes, y el resto pasarlas a tablas historicas, el resto, se puede usar mediante datawarehouse, pero alla no he llegado

Etiquetas: claves, manejo, sistemas, foreignkey
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 10:54.