![]() |
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! |
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. |
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). |
| La zona horaria es GMT -6. Ahora son las 22:46. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.