Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-04-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
tablas grandes

Hola a todos,

Estoy usando delphi 6 e interbase 7.

Ahora mismo, la información económica la tenemos dibidida en tres tablas. La tabla principal, eco1, tiene 95191 registros, eco2 tiene 12079, eco3 42493 registros.

Un total de 149763 registros, y creciendo.

Estas tablas están separadas por "temas". En una esta lo que realmente se nos debe, en otra el pasivo y en otra están registradas las ventas de un producto que no es el nuestro principal.

El caso es que me están pidiendo que junte las tres tablas en una sola, pues la información se ve también por separado y ha dado lugar a errores. Sé que de cara a la aplicación, voy a necesitar seguir haciendo una diferenciación de los registros, según a cual de estos tipos de dato económico pertenezcan, lo cual puedo solucionar añadiendo un campo y que cada una de estas tablas tenga un valor en ese campo que lo distinga de las otras dos, para luego hacer mis filtrados por ese campo, pero claro, las tablas se espera que sigan creciendo, y no sé si es realmente más práctico juntarlas SOLO de cara a lo que muestre la aplicación, y mantenerlas separadas como hasta ahora, o si a pesar de que esto implique tener que trabajar con una tabla de más de 149763 registros, realmente esto no me va a relentizar los procedimientos que tengan que ver con ella.

Agradecería que me comentaseis como lo veis vosotros.

GRacias


Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #2  
Antiguo 14-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Puedes crear una vista, para poder manejar los datos de las 3 tablas, como si fueran de una sola. (Con UNION).

Aunque también te funcionará bien el trabajar con una sola tabla. Puesto que 150.000 registros tampoco son tantos. Simplemente asegúrate de tener los índices necesarios para tus consultas. (Probablemente te va a ser más útil tener índices compuestos, es decir un índice por el campo que indica el tipo de registro, más el campo por el que se realiza la búsqueda, como por ejemplo una fecha).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 14-04-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Hola guillotmarc,

Gracias por tu respuesta. Por cierto, ¿a partir de cuantos se considera que tiene "muchos" registros una tabla?

Otra cosa. Si al final unifico las tablas, ¿como hago?, por que las tres tablas tienen con primary key un campo, "CODIGO",que es autonumérico. ¿hago que la llave primaria sea ese campo "CODIGO", más lo que haya en el campo que determina a que tabla pertenecía? y en tal caso, ¿como hago para, antes de unirlas, asignarles a esos campo un valor X para todos los registros de la misma tabla?

Es más, ¿cómo las fusiono asegurandome que no pierden datos?

Muchas gracias, como siempre por todo

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #4  
Antiguo 14-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola Virginia.

No creo que haya un tope en el tamaño de las tablas. Si tienes los índices adecuados, podrás acceder con un rendimiento correcto, indistintamente al numero de registros. Los problemas creo que aparecerán antes, por tamaño del archivo de datos. Es decir que puedes empezar a tener problemas cuando la base de datos llegue a los 4 Gb. (tamaño máximo de los archivos en algunos sistemas operativos, y en algunas versiones de Interbase/Firebird).

Repito que lo importante es tener los índices adecuados, lo que quiere decir que en una tabla grande, probablemente deberás definir índices compuestos (de más de un campo).

Ejplo. Un consulta tipo select nombre from clientes where tipo = 3 and poblacion = 'Girona', obtendrá un rendimiento sensiblemente mejor si tienes un índice compuesto por Tipo y Población, que si tienes dos índices simples, uno para el campo Tipo y otro para Población.

Puedes definir perfectamente, como has comentado, la clave primaria como compuesta. Formada por los campos Codigo y Tipo. Aunque tén en cuenta que cualquier tabla relacionada con esta, debe mantener la relación con los correspondientes campos Codigo y Tipo. Si la tabla relacionada solo tiene un campo Codigo, no podremos saber a cuales de los registros de la tabla principal se refiere.

Para fusionar las tablas, puedes modificar primero las originales, y añadirles el campo Tipo, entonces asignas el valor de tipo en cada registro. Una vez actualizadas todas las tablas ya podriamos fusionarlas en una de nueva.

alter table TABLA_1 add TIPO integer;

update TABLA_1 set TIPO = 1;

alter table TABLA_2 add TIPO integer;

update TABLA_2 set TIPO = 2;

alter table TABLA_3 add TIPO integer;

update TABLA_3 set TIPO = 3;

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 14-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Cita:
Empezado por Giniromero
¿a partir de cuantos se considera que tiene "muchos" registros una tabla?
Esto es como para un debate. Se ha visto a interbase manejar tablas con varios millones de registros sin ningun problema.

Cita:
Empezado por Giniromero
¿como hago?, por que las tres tablas tienen con primary key un campo, "CODIGO",que es autonumérico. ¿hago que la llave primaria sea ese campo "CODIGO", más lo que haya en el campo que determina a que tabla pertenecía?
exacto!! Luego, vas a tener que decidir como seguir insertando registros... yo probablemente crearia una nueva secuencia, con valor inicial al mayor de los registros + 1, y que siga funcionando ahora como autonumerico.

Cita:
Empezado por Giniromero
¿como hago para, antes de unirlas, asignarles a esos campo un valor X para todos los registros de la misma tabla?
Código:
  update tabla1 set tipo = '1';
  update tabla2 set tipo = '2';
  update tabla3 set tipo = '3';
Cita:
Empezado por Giniromero
Es más, ¿cómo las fusiono asegurandome que no pierden datos?
Código:
  Insert into tabla4 select * from tabla1;
  Insert into tabla4 select * from tabla2;
  Insert into tabla4 select * from tabla3;
  /* Si no hay mensajes de error... todo estubo bien.... entonces */
  commit;
Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:09:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi