- ¿Qué son las claves?
- Teclas simples
- Claves concatenadas o compuestas
- Claves primarias
- Numeración y Auto-Incremento
- ¿Puede una tabla contener varias claves primarias?
Si bien muchos desarrolladores y administradores de bases de datos pueden trabajar con primary keys
todos los días, es un tema fascinante preguntarse a uno mismo:"¿Qué es exactamente es una primary key
y puede (o debe) una tabla de base de datos contener varias primary keys
simultáneamente?”
A continuación, examinaremos estas preguntas con más detalle e intentaremos llegar a un consenso razonable y generalmente acordado dentro de la comunidad de desarrollo.
¿Qué son las claves?
Para entender qué es una primary key
está en una tabla de base de datos, primero debemos entender un poco sobre non-primary keys
. Una key
en una tabla es simplemente un atributo que se utiliza para identificar y acceder a esa información. Una tabla puede tener y, a menudo, tendrá varias claves, como en la tabla Users
ambos email
y username
podrían considerarse claves.
Dependiendo del desarrollador o administrador con el que esté hablando, es posible que escuche sobre una variedad de tipos de claves y sus definiciones, por lo que solo cubriremos algunos ejemplos diferentes a continuación y una definición básica de cada uno.
Teclas simples
Una simple key
es solo una clave que usa un solo atributo en la tabla. A menos que impongamos más restricciones sobre la clave o la tabla, entonces el username
El atributo en el ejemplo anterior es una simple key
.
Claves concatenadas o compuestas
Dando un paso más allá de simple keys
están concatenated
o compound
llaves. Como su nombre lo indica, una concatenated key
es una unión de múltiples single keys
. Por ejemplo, el sistema puede combinar automáticamente el last_name
y year_of_birth
single keys
en una concatenated key
, así:smith1980
.
Claves primarias
Una [primary key](https://en.wikipedia.org/wiki/Unique_key)
es una clave que ha sido elegida para ser la principal (o principal ) atributo representativo para esa fila de datos. La primary key
es único y ese atributo luego se usa en toda la base de datos y se accede y se pasa a otras tablas como el atributo representativo de los datos en cuestión.
En la práctica, la primary key
el atributo también está marcado como NOT NULL
en la mayoría de las bases de datos, lo que significa que el atributo siempre debe contener un valor para que el registro se inserte en la tabla.
Como ejemplo, el email
o username
simple keys
podría se le asigne la designación de la primary key
, pero normalmente es una buena práctica configurar la primary key
a un atributo que no es (o no podría) ser cambiado por la lógica comercial o incluso por el individuo. Por ejemplo, imagina un User
obtiene una nueva dirección de correo electrónico, lo que hace que todas las primary key
pasadas las asociaciones realizadas con la dirección de correo electrónico anterior dejen de ser válidas cuando se utilice la nueva dirección de correo electrónico.
Por esta razón (entre otras), la mayoría de las primary keys
use un número o cadena única, como un [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)
.
Numeración y Auto-Incremento
También vale la pena señalar brevemente que muchos sistemas de bases de datos están configurados de tal manera que cada tabla tiene una primary key
que es numérico y también se incrementa automáticamente. Esto simplemente significa que el propio motor de la base de datos asigna automáticamente a cada nuevo registro en esa tabla una primary key
única. valor que es incrementalmente mayor que todos los valores anteriores. Sin embargo, la mayoría de los desarrolladores están de acuerdo en que esta práctica está desactualizada y expone fallas de seguridad innecesarias para el sistema cuando se usa para algunos tablas que representan ciertos datos.
Por ejemplo, imagina todos los User
a los registros se les asigna una primary key
de incremento automático valor, conocido como el id
atributo. Si una persona malintencionada descubre que el id
atributo de un usuario determinado (por ejemplo, John Smith) es el valor 1500
, esto ya expone un poco de información. Primero, indica que es probable que haya un mínimo de al menos 1499 otros usuarios en el sistema, o que lo hayan estado en algún momento. También significa que si se puede acceder a la página de usuario de John Smith a través de una URL o una llamada API que contiene ese id
valor de 1500
, entonces existe una buena posibilidad de simplemente cambiar el valor a otro número, como 1499
o 1501
, expondrá la página de otro usuario que puede no querer que este visitante acceda a su página. De esta manera, los registros se pueden consultar simplemente adivinando el id
valores a escala masiva.
Obviamente, estos son ejemplos muy simples, pero por estas razones, la mayoría de las bases de datos modernas usarán una primary key
única y aleatoria. valor de atributo como un UUID
cuando se trabaja con datos confidenciales.
¿Puede una tabla contener varias claves primarias?
La respuesta corta es no , no se permite que una tabla contenga varias primary keys
, ya que va en contra de los principios fundamentales del diseño de bases de datos relacionales (ver:[database normalisation](https://en.wikipedia.org/wiki/Database_normalisation)
y [Third normal form](https://en.wikipedia.org/wiki/Third_normal_form)
).
Es es es posible que una tabla tenga varias candidate keys
, que efectivamente se comportan de manera similar a una primary key
en eso una candidate key
es único, NOT NULL
, y es una representación singular de ese registro de tabla.
Sin embargo, cuando se trata de seleccionar cuál uno el atributo se asignará como la primary key
para la tabla, la elección proviene de la lista de todas las posibles candidate keys
(de ahí el nombre, son candidatos para convertirse en una primary key
). En última instancia, solo una candidate key
se selecciona como el mejor atributo representativo para ese registro, para ser utilizado en esta tabla como la primary key
y referenciado en otra parte de la base de datos por otras tablas a través de sus respectivas foreign keys
.