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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2011
Avatar de jorosmtz
jorosmtz jorosmtz is offline
Miembro
 
Registrado: dic 2009
Posts: 108
Poder: 15
jorosmtz Va por buen camino
Campo Llave grande en Firebird

Buen día, una pregunta, estoy desarrollando una aplicacion en la cual se van a crear registros únicos en varios lugares (se piensa vender el software con miras a consolidar algún día las BD's).

Tengo el campo llave en el cual pienso poner una serie de datos concatenados haciendo una cadena de posiblemente 10 caracteres, tipo RFC o CURP en México.

¿Sería correcto hacer esto? ¿No son demasiados caracteres para un campo llave lo cual vuelva lenta la búsqueda?

P.D. Estoy iniciando con Firebird y no se como funcione, por eso la pregunta.
__________________
Javier Oros dice: Deus nobiscum, quis contra nos
Responder Con Cita
  #2  
Antiguo 12-07-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
No creo que 10 caracteres sea un campo grande para crear una PK.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 13-07-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Tienes más opciones:
Crear un campo ID integer que sea PK y se autoincremente y luego crear los diferentes campos y unirlos en un indice unívoco.

Código SQL [-]
CREATE TABLE MI_TABLA
(
ID INTEGER,
CAMPO1 INTEGER,
CAMPO2 VARCHAR(5),
CAMPO3 VARCHAR(3)
CAMPO_DATO1 
CAMPO_DATO2
CAMPO_DATO3
...
);

ALTER TABLE MI_TABLA ADD CONSTRAINT PK_MI_TABLA PRIMARY KEY (ID);

CREATE UNIQUE INDEX GD_DOCUMENTO_IDX1 ON GD_DOCUMENTO (CAMPO1, CAMPO2, CAMPO3);
Esto te permitirá luego hacer busquedas por solo uno de los campos. Deberás tener en cuenta que deberías hacer un índice apropiado para esta búsqueda.

También puedes crear la PK directamente de los campos que necesites:
Código SQL [-]
ALTER TABLE MI_TABLA ADD CONSTRAINT PK_MI_TABLA PRIMARY KEY (CAMPO1, CAMPO2, CAMPO3);
Responder Con Cita
  #4  
Antiguo 13-07-2011
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Mira sobre lo que hablan acá
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #5  
Antiguo 13-07-2011
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En mi opinión, Usaría un campo BigInt como clave primaria (que será en delphi un Int64).

Dicho campo no tendría ningún significado para la lógica de negocios, es decir, ese número no se usa en número de facturas ni en nada de nada, únicamente sería para identificar un registro, nada más. Así puedes cambiar el valor, borrar maestros y detalles sin problemas y sin afectar a la numeración de facturas y esas cosas.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 13-07-2011
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Cita:
Dicho campo no tendría ningún significado para la lógica de negocios, es decir, ese número no se usa en número de facturas ni en nada de nada, únicamente sería para identificar un registro, nada más. Así puedes cambiar el valor, borrar maestros y detalles sin problemas y sin afectar a la numeración de facturas y esas cosas.
El problema con esta solución podría ser que cuando dice:

Cita:
se van a crear registros únicos en varios lugares (se piensa vender el software con miras a consolidar algún día las BD's).
Es que van a trabajar con varias bases de datos en diferentes computadores (puede ser o no en diferentes sedes) y con el tiempo las van a integrar (de forma permanente o no) en una sola base de datos, al tener una llave primaria autoincrementada es muy probable que en las diversas bases de datos se cree el valor "1, 2, 3, 4, 5" y ahí a la hora de integrar va a tener problemas de llave primaria y otros problemas que se dan al integrar, por eso el propone el char de tamaño 10, aunque lo recomendable y más estandarizado en estos casos es usar llaves primarias GUID, en el enlace que envié en mi comentario anterior explican como usarlos y como crearlos.
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #7  
Antiguo 16-07-2011
Avatar de jorosmtz
jorosmtz jorosmtz is offline
Miembro
 
Registrado: dic 2009
Posts: 108
Poder: 15
jorosmtz Va por buen camino
Gracias a todos muchachos, y gracias RONPABLO por el link al otro post, muy ilustrativo. Por lo que leí no le afecta a la búsqueda que el campo llave sea alfanumerico y grande. Para el campo llave he decidido concatenar algunas cadenas de la siguiente manera:

- Primeras dos letras del nombre.
- Primeras dos letras del apellido paterno
- Primeras dos letras del apellido materno. Si no tiene apellido materno (aquí en México hay casos) se ponen dos "x" en su lugar.
- Fecha de nacimiento con formato ddmmyyyy
- Una letra del alfabeto empezando por la letra "A" (caracter extra para evitar duplicados). Si esta combinación ya existe el caracter extra se va incrementando de acuerdo al alfabeto.

De esta forma el campo llave quedaría como una cadena alfanumerica de 15 caracteres.
__________________
Javier Oros dice: Deus nobiscum, quis contra nos
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Longitud del Campo muy grande aanil SQL 2 28-04-2010 02:34:30
cambiar campo de tabla a campo llave gmontes Firebird e Interbase 0 19-02-2008 17:42:19
Grande firebird lafirma Noticias 2 28-07-2006 01:12:14
Como hacer una Modificación en Cascada en un Campo Llave???? AGAG4 Firebird e Interbase 0 18-01-2005 01:58:36
Interbase 6.5 Campo LLave Sin la restriccion "NOT NULL" se puede?? norberto_larios Conexión con bases de datos 3 07-09-2004 23:34:12


La franja horaria es GMT +2. Ahora son las 07:25:21.


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