Asunto: Qué clave primaria autoincremento utilizar en Oracle
Estoy desarrollando una aplicación con muchas tablas (unas 100), para varios clientes y que contendrán miles, quizá millones, de registros. Me gustaría saber cual es la forma más eficiente de generar las claves primarias de las tablas utilizando autoincremento. Ya sé que Oracle no tiene este tipo de datos pero sí tiene las secuencias para simularlo. Con lo cual quisiera utilizar estas secuencias para generar el número autoincremento que se corresponderá con la clave primaria de cada tabla.
Me interesaría poder tener en una misma base de datos los registros de varios clientes, si se diera el caso, sin que haya problemas de claves duplicadas.
Publicado:
Lun Mar 12, 2007 7:56 am
varios Magnífico usuario
Registrado: Oct 10, 2006 Mensajes: 2092
Asunto: Utilizo Delphi como lenguaje de programación
Se me olvidaba comentar que utilizo Delphi para el desarrollo de la aplicación.
Publicado:
Lun Mar 12, 2007 7:59 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Utilizo Delphi como lenguaje de programación
Anuncios
Existen muchísimas posibilidades para abordar lo que nos comentas, a continuación te indicamos una de ellas, no es la mejor, ni la peor, es nuestra visión. Puesto que nos comentas que tienes varios clientes y que, además, quieres poder tener la posibilidad de importar todos los registros de todos los clientes en la misma base de datos, esto es lo que te proponemos:
La estructura del registro que será clave primaria de todas las tablas podría ser:
* 5 números que serán fijos por cada tabla (indican el código de la tabla, para utilizar la misma secuencia para todas las tablas).
* 12 números variables para identificar el número único de registro de la tabla
* 5 números fijos para identificar el código de cliente).
Para generar la clave primaria de cada tabla podrías utilizar la siguiente función Delphi:
Código:
function TformMenuPrincipal.obtenerClavePrimaria (tabla : string; cliente : string) : string;
var
idNum : string;
i : integer;
begin
Result := '';
bdOracle.Open;
tc.Close;
//comprobamos si hay registros en la tabla de carga
tc.SQL.Clear;
tc.SQL.Add('SELECT SECUENCIA_TABLAS.NEXTVAL valor FROM DUAL');
tc.Open;
//para dejar los 12 caracteres fijos (añadir ceros por la izquierda si es necesario)
idNum := tc.fieldbyname('valor').AsString;
for i := 0 to 11 - Length (idNum) do
idNum := '0' + idNum;
Result := tabla + idNum + cliente;
end;
Nota: la consulta SQL para la creación de la secuencia Oracle:
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A