Retroceder   Foros del Web > Temas generales de computación > Programación

Respuesta
 
Herramientas Desplegado
Antiguo 26-dic-2005, 08:24   #1 (permalink)
CLAYMAN ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2004
Mensajes: 45
Consulta sobre Primary Key en Base de Datos

Hola a todos: Tengo una duda. Estoy haciendo un sistemita tipo una discoteca; o sea apara almacenar la info detallada de mis cd's.
Tengo una tabla Artistas donde se almacenaran todos las bandas que tengan al menos un disco en el sistema. (otras tablas: Album, temas,....etc)
Dicha tabla tiene una clave primaria NroArtista que es numerica. Pero tengo serios problemas con eso porque al realizar las busquedas siempre tengo que comparar dos strings...es decir siempre por el nombre de la banda.
Pregunto: Se puede poner como clave primaria un campo NombreBanda que sea un string en vez de numerica? Considerando que cada nombre de banda jamas se repetira. Muchas Gracias!
CLAYMAN está desconectado   Responder Citando
Antiguo 26-dic-2005, 14:27   #2 (permalink)
Moderador
Mithrandir llegará a ser famoso muy prontoMithrandir llegará a ser famoso muy pronto
 
Avatar de Mithrandir
 
Fecha de Ingreso: abril-2003
Mensajes: 12.108
Es inficiente, porque el sistema tendrá que indexar llaves demasiado largas (el nombre completo de la banda). Hacer búsquedas y JOINs será más pesado debido a la sobrecarga que implica hacer joins sobre campos de string, y más aún sobre campos largos.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
Mithrandir está desconectado   Responder Citando
Antiguo 27-dic-2005, 02:19   #3 (permalink)
jeubeda está en el buen camino
 
Avatar de jeubeda
 
Fecha de Ingreso: octubre-2004
Ubicación: Argentino, en Valencia, E
Mensajes: 76
una clave secundaria

Este es un asunto sobre el que hay bastante escrito. Utilizar un número único es que identifique la fila es lo que llaman usar surrogates. El problema es que el atributo que identifica es el nombre. De lo contrario, a pesar de usar un número como identificador único, es necesario verificar que el nombre no exista: un problema común en este caso es que dos nombres iguales se ingresen con dos números distintos. Es decir, el número es un identificador unívoco, pero igualmente necesito una clave secundaria que me asegure que el nombre no haya sido ingresado previamente, salvo que el número sea el resultado de un algoritmo que genere un valor basado en el string (tipo crc). Si el caso es que estamos hablando de una base de datos pequeña, quizá usar el nombre como identificador primario no implique problemas de performance, con lo que pudiera ser la mejor solución. Si, por el contrario, la cantidad de filas será grande, o existirán muchas relaciones con otras tablas, mantener una clave secundaria para controlar la inserción de filas sería necesario. De esa forma, se atiende a lo que Mithrandir observa (la intervención en joins).
__________________
Jorge Ubeda
Página, Blog

Última edición por jeubeda; 27-dic-2005 a las 03:05.
jeubeda está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 16:21.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93