Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-02-2008
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
Correcta eleccion del primary key

A ver, creo que ese no es el titulo correcto pero no encuentro otro. Paso a explicar el problema.

Tengo una tabla de facturas donde el primary key deberia ser el numero de factura (por ej: 0001-12345678) la idea era ponerlo a todo ese numero (sin el guin) como in bigint (uso firebird + dbexpress + delphi7) pero resulta que el dbexpress me lo pone como tipo TBCDxxx y no se porque no me deja asignar valor a dicho campo...
Para evitar esto puse a este campo como varchar(15) pero no me gusta que un varchar sea primary key (creo haber leido un problema de velocidad en la indexacion)
Entonces para evitar esto lo he puesto como float... alli si toma todo el nuemro de corrido es decir 112345678, ahora bien varias preguntas.
1-Es optimo poner un float como primary key ? No se desperdicia espacio sin sentido...
2- y un varchar?
3- si aplico un formatfloat("9999-9999999", 1123456789) me devolvera 0001-12345678 ?
4- Alguno otro consejo de diseño ?

desde ya muchas gracias
Responder Con Cita
  #2  
Antiguo 22-02-2008
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
Debes descartar usar un Float como clave primaria.

La opción Varchar(15), a mi juicio es la correcta.

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 22-02-2008
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
y poner el varchar(15) como primary key ?
Responder Con Cita
  #4  
Antiguo 22-02-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Wink

Te recomiendo que NO uses ningún campo que represente algo significativo para el usuario como llave primaria. Coloca en cada tabla un campo inicial Integer llamado ID, y usa éste como su llave primaria para relacionar los registros con otras tablas.
Responder Con Cita
  #5  
Antiguo 22-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Estoy de acuerdo con Al el tipo de numeración de facturas puede cambiar (a mí me pasó ) y te toca modificar claves primarias, claves ajenas, etc.

Para las facturas uso un campo IdMaestro (PK), para las líneas de factura, IdMaestro (FK) e IdDetalle (PK).

En cuanto al BCD, es Binary Coded Decimal, useasé, si usas un Generador en FB2 se usará internamente un int64 para almacenar el valor, y en delphi se traduce en un TBCDField (Representante del int64 sin pérdida de decimales), Típico también de campos numeric/decimal (x,y) con x>9 que es obligado su uso para cantidades monetarias.

Saludos
__________________
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 22-02-2008
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
Estoy de acuerdo con lo que dice Al Gonzalez y Lepe.
Utiliza Enteros para identificar a cada registro.

Además quisiera agregar que jamas se deben utilziar campos Float ni campos Date para definir PKs. (Un Date es internamente un float)
Los redondeos en los decimales hará que no siempre encuentres lo que quieres.
Responder Con Cita
  #7  
Antiguo 22-02-2008
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
Gracias, seguire los consejos.
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
Elección de la bandeja de impresión sur-se Impresión 0 14-05-2007 14:11:24
Elección de Hardware TJose Debates 2 16-01-2007 11:20:17
La elección correcta ! Xianto Tablas planas 2 07-01-2005 12:35:24
primary key AMO SQL 7 14-02-2004 20:50:05
Eleccion de BD... Tanix Varios 6 12-12-2003 09:50:05


La franja horaria es GMT +2. Ahora son las 07:58:26.


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