• Base de datos 08.02.2012

    Claves primariasNormalmente, cada tabla de una base de datos debe tener una llave primaria que contendrá valores que identifiquen unívocamente cada fila o tupla de la tabla.

    Digo “normalmente”, porque algunas tablas no necesitan de la llave primaria, pues son tablas que establecen las relaciones  existentes entre 2 o más tablas.

    En cambio, en el resto de las tablas, sí se requiere una clave primaría y esta puede ser “subrogada” o “semántica”.

    Una clave subrogada es aquella cuyos valores se forman independientemente de los datos almacenados. Típicamente, es sólo una secuencia de números.

    Clave primaria subrogada

    Clave primaria subrogada

    Por ejemplo, en MySQL, definimos con frecuencia, un campo como clave primaria auto incrementable (PRIMARY KEY AUTO_INCREMENT), y los registros adquieren una clave primaria que es un número entero que se incrementa con cada inserción de nuevo registro.

    La clave semántica, también conocida como “clave natural”, está compuesta por los valores de una o más columnas.

    Clave primaria semántica

    Clave primaria semántica

    Por ejemplo, en una tabla de estudiantes que tiene los campos de ‘Apellido 1’, ‘Apellido 2’, ‘Nombre’ y ‘Documento de identificación’, la llave primaria podría ser el documento de identificación. Pero, como es de suponer, en un país pueden existir números de identificación duplicados o triplicados por errores del pasado; entonces, la clave primaria semántica podrá ser una combinación del apellido y el número de identificación.

    Con lo anterior, creo que el concepto ha sido explicado e ilustrado, pero surge la pregunta: “¿cuál se debería usar?, ¿Qué ventajas o desventajas tienen estos tipos de claves primarias?”.

    En realidad, es un tema de bastante controversia. Quienes están a favor de las claves semánticas ofrecen los siguientes argumentos:

    1. Al estar formadas de datos existentes en cada fila de la tabla, no requieren de espacio adicional.
    2. Tienen significado por lo que son fáciles de entender. Incluso son conocidas también como “claves inteligentes”.
    3. Por la razón anterior (que tienen significado), pueden ser memorizadas por los usuarios de manera que, si por ejemplo, es una base de datos de clientes, estos pueden dictar su código al operador en lugar del nombre que algunas veces tiene escritura o pronunciación “difícil”.
    4. Pueden ser verificadas.

    En cambio, quienes están a favor de las claves subrogadas suelen ofrecer los siguientes argumentos:

    1. Son fáciles y rápidas de generar.
    2. Son independientes de los datos, de manera que no son afectadas por los cambios en el registro.
    3. Ocupan poco espacio.
    4. Las bases de datos las generan automáticamente.

    Como se puede ver, no hay una cantidad comparativa grande de ventajas entre uno u otro sistema, pero es un tema de gran debate debido a que establece bastantes diferencias al programar la aplicación.

    Y precisamente al programar las aplicaciones es cuando yo encuentro varias desventajas de las claves semánticas.

    Clave primaria inteligenteDesventaja 1. Suelen ser muy largas o requerir un campo adicional también amplio. Por ejemplo, una combinación de apellido y número de documento de identificación, probablemente deberá tener más de 25 caracteres. Se podría usar sólo un número de identificación, pero en tal caso, es necesario implementar funciones que revisen y eviten la duplicidad, ya que no es extraño que los anteriores sistemas manuales hubieran registrado documentos de identificación con números repetidos.

    Desventaja 2. Con frecuencia he visto claves semánticas conformadas con las primeras letras o sílabas de otros campos. Por ejemplo, las letras iniciales de los apellidos y del nombre y la fecha de nacimiento, de manera que se generan claves como PMV270574. En este caso, también existe el problema de verificar que sea único y, si no lo es, se puede aumentar un prefijo o sufijo. Esto implica un trabajo extra de programación que, aunque no es excesivo, demanda tiempo que se puede ahorrar usando claves subrogadas.

    Desventaja 3. Para los dos ejemplo anteriores en que se usaría el apellido y el número de identificación, o para el caso de usar sólo este último o las iniciales y la fecha de nacimiento, se puede prever que ocurrirán casos en que las personas cambiarán sus apellidos y/o nombres, o les serán asignados nuevos números de documentos de identificación, y eso afectará a la consistencia del sistema, pues entonces existirán casos en que la llave ya no tiene el significado original.

    Desventaja 4. Finalmente, pero muy importante, una aplicación no podrá ser amigable al usuario, si depende de que este recuerde un código. Lo más natural es que el operador del sistema pregunte por el nombre del cliente, pues ese es un dato que, normalmente, la gente recuerda claramente.

    Si se trata de buscar un registro entre muchos, una forma muy conveniente es la presentación de una lista en la que la presión de una tecla acerca la barra de selección al primer registro cuyo nombre inicia con dicha letra.

    Sucesivas presiones de teclas acercan más al registro deseado. Esto se conoce como “búsqueda incremental” y funciona eficientemente para miles de registros

    Si se trata de muchos miles o millones de filas, es bastante probable que este no sea un método eficiente, por lo que se deberán adoptar otros sistemas.

    Pero, regresando al tema, y para resumir, en mi opinión, las llaves primarias subrogadas tienen sólo ventajas frente las semánticas.

     

     

    Posted by luchop @ 11:11

  • Deja un comentario