En el modelo relacional de bases de datos , una clave candidata , o simplemente una clave , de un esquema de relación es una superclave mínima del esquema de relación. [1] En otras palabras, es un conjunto de atributos tal que cada relación de instancia del esquema de relación no tiene dos tuplas distintas con los mismos valores para estos atributos (lo que significa que el conjunto de atributos es una superclave) y hay no hay un subconjunto adecuado de estos atributos, que es una superclave del esquema de relación (lo que significa que el conjunto es mínimo). Define una dependencia funcional restricción de la clave candidata a todos los atributos del esquema de relación.
Las claves candidatas también se denominan claves primarias, claves secundarias o claves alternativas.
Los atributos constituyentes se denominan atributos primos . Por el contrario, un atributo que no aparece en NINGUNA clave candidata se denomina atributo no principal .
Dado que una relación no contiene tuplas duplicadas, el conjunto de todos sus atributos es una superclave si no se utilizan valores NULL. De ello se deduce que cada relación tendrá al menos una clave candidata.
Las claves candidatas de una relación nos dicen todas las formas posibles en las que podemos identificar sus tuplas. Como tales, son un concepto importante para el diseño de esquemas de bases de datos .
Ejemplo
La definición de claves candidatas se puede ilustrar con el siguiente ejemplo (abstracto). Considere una variable de relación ( relvar ) R con atributos ( A , B , C , D ) que solo tiene los siguientes dos valores legales r1 y r2 :
A | B | C | D |
---|---|---|---|
a1 | b1 | c1 | d1 |
a1 | b2 | c2 | d1 |
a2 | b1 | c2 | d1 |
A | B | C | D |
---|---|---|---|
a1 | b1 | c1 | d1 |
a1 | b2 | c2 | d1 |
a1 | b1 | c2 | d2 |
Aquí r2 difiere de r1 solo en los valores A y D de la última tupla.
Para r1, los siguientes conjuntos tienen la propiedad de unicidad, es decir, no hay dos tuplas distintas en la instancia con los mismos valores de atributo en el conjunto:
- {A, B}, {A, C}, {B, C}, {A, B, C}, {A, B, D}, {A, C, D}, {B, C, D}, {A B C D}
Para r2, la propiedad de unicidad es válida para los siguientes conjuntos;
- {B, C}, {B, D}, {C, D}, {A, B, C}, {A, B, D}, {A, C, D}, {B, C, D}, {A B C D}
Desde superclaves de un relvar son aquellos conjuntos de atributos que tienen la propiedad de unicidad para todos los valores legales de que relvar y porque suponemos que R1 y R2 son todos los valores legales que R puede tomar, podemos determinar el conjunto de superclaves de R por tomando la intersección de las dos listas:
- {B, C}, {A, B, C}, {A, B, D}, {A, C, D}, {B, C, D}, {A, B, C, D}
Finalmente, debemos seleccionar aquellos conjuntos para los que no hay un subconjunto adecuado en la lista, que son en este caso:
- {B, C}, {A, B, D}, {A, C, D}
Estos son de hecho las claves candidatas de relvar R .
Tenemos que considerar todas las relaciones que podrían asignarse a un relvar para determinar si un determinado conjunto de atributos es una clave candidata. Por ejemplo, si hubiéramos considerado solo r1 , habríamos concluido que {A, B} es una clave candidata, lo cual es incorrecto. Sin embargo, podríamos concluir de tal relación que un determinado conjunto no es una clave candidata, porque ese conjunto no tiene la propiedad de unicidad (ejemplo {A, D} para r1 ). Tenga en cuenta que la existencia de un subconjunto adecuado de un conjunto que tiene la propiedad de unicidad no puede utilizarse en general como evidencia de que el superconjunto no es una clave candidata. En particular, tenga en cuenta que en el caso de una relación vacía, cada subconjunto del encabezado tiene la propiedad de unicidad, incluido el conjunto vacío.
Determinación de claves candidatas
El conjunto de todas las claves candidatas se puede calcular, por ejemplo, a partir del conjunto de dependencias funcionales . Para ello necesitamos definir el atributo de cierre para un conjunto de atributos . El conjunto contiene todos los atributos que están implícitos funcionalmente en .
Es bastante sencillo encontrar una única clave candidata. Empezamos con un setde atributos y tratar de eliminar sucesivamente cada atributo. Si después de eliminar un atributo el cierre del atributo permanece igual, entonces este atributo no es necesario y podemos eliminarlo permanentemente. Llamamos al resultado. Si es el conjunto de todos los atributos, entonces es una clave candidata.
De hecho, podemos detectar cada clave candidata con este procedimiento simplemente probando cada orden posible de eliminación de atributos. Sin embargo, hay muchas más permutaciones de atributos () que subconjuntos (). Es decir, muchas órdenes de atributos conducirán a la misma clave candidata.
Existe una dificultad fundamental para los algoritmos eficientes para el cálculo de claves candidatas: ciertos conjuntos de dependencias funcionales conducen a muchas claves candidatas exponencialmente. Considera el dependencias funcionales cuyos rendimientos claves candidatas: . Es decir, lo mejor que podemos esperar es un algoritmo que sea eficiente con respecto al número de claves candidatas.
El siguiente algoritmo en realidad se ejecuta en tiempo polinomial en el número de claves candidatas y dependencias funcionales: [2]
función find_candidate_keys (A, F) / * A es el conjunto de todos los atributos y F es el conjunto de dependencias funcionales * / K [0]: = minimizar (A); n: = 1; / * Número de claves conocidas hasta ahora * / i: = 0; / * Clave procesada actualmente * / mientras que yohago para cada α → β ∈ F hago / * Construya una nueva clave potencial a partir de la clave conocida anterior y el FD actual * / S: = α ∪ (K [i] - β); / * Buscar si la nueva clave potencial es parte de las claves ya conocidas * / encontrado: = falso; para j: = 0 an-1 hacer si K [j] ⊆ S entonces encontró: = verdadero; / * Si no, agregue si si no se encuentra entonces K [n]: = minimizar (S); n: = n + 1; yo: = yo + 1 volver K
La idea detrás del algoritmo es que dada una clave candidata y una dependencia funcional , la aplicación inversa de la dependencia funcional produce el conjunto , que también es clave. Sin embargo, puede estar cubierto por otras claves candidatas ya conocidas. (El algoritmo verifica este caso usando la variable 'encontrada'). De lo contrario, minimizar la nueva clave produce una nueva clave candidata. La idea clave es que todas las claves candidatas se pueden crear de esta manera.
Ver también
- Clave alternativa
- Clave compuesta
- Normalización de la base de datos
- Clave primaria
- Base de datos relacional
- Superclave
- El primer implicante es la noción correspondiente de una clave candidata en lógica booleana
Referencias
- ^ Fecha, Christopher (2015). "Primeros artículos relacionales de Codd: un análisis crítico" (PDF) . warwick.ac.uk . Consultado el 4 de enero de 2020 .
Tenga en cuenta que el extracto permite que una "relación" tenga cualquier número de claves primarias y, además, que dichas claves pueden ser "redundantes" (mejor: reducible ). En otras palabras, lo que el artículo llama una clave primaria es lo que más tarde (y mejor) se conoció como una superclave , y lo que el artículo llama una clave primaria no redundante (mejor: irreducible ) es lo que más tarde se conoció como una clave candidata o (mejor ) solo una llave .
- ^ L. Lucchesi, Cláudio; Osborn, Sylvia L. (octubre de 1978). "Claves candidatas para las relaciones". Revista de Ciencias de la Computación y Sistemas . 17 (2): 270-279. doi : 10.1016 / 0022-0000 (78) 90009-0 .
- Fecha, Christopher (2003). "5: Integridad". Introducción a los sistemas de bases de datos . Addison-Wesley. págs. 268-276. ISBN 978-0-321-18956-1.
enlaces externos
- Sistemas de gestión de bases de datos relacionales - Diseño de bases de datos - Términos de referencia - Claves : una descripción general de los diferentes tipos de claves en el RDBMS (Sistema de gestión de bases de datos relacionales).