FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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:
|
#3
|
|||
|
|||
y poner el varchar(15) como primary key ?
|
#4
|
||||
|
||||
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.
|
#5
|
||||
|
||||
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. |
#6
|
||||
|
||||
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. |
#7
|
|||
|
|||
Gracias, seguire los consejos.
|
|
|
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 |
|