Este ejemplo está tomado de w3schools .
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
Tengo entendido que ambas columnas juntas ( P_Id
y LastName
) representan una clave principal para la tabla Persons
. ¿Es esto correcto?
- ¿Por qué alguien querría usar varias columnas como claves principales en lugar de una sola columna?
- ¿Cuántas columnas se pueden usar juntas como clave principal en una tabla determinada?
Respuestas:
Su comprensión es correcta.
Haría esto en muchos casos. Un ejemplo está en una relación como
OrderHeader
yOrderDetail
. El PK enOrderHeader
podría serOrderNumber
. El PK enOrderDetail
podría serOrderNumber
ANDLineNumber
. Si fuera cualquiera de esos dos, no sería único, pero la combinación de los dos está garantizada como única.La alternativa es utilizar una clave primaria generada (no inteligente), por ejemplo en este caso
OrderDetailId
. Pero entonces no siempre verías la relación tan fácilmente. Algunas personas prefieren una forma; algunos prefieren lo contrario.fuente
Otro ejemplo de claves primarias compuestas es el uso de tablas de asociación. Suponga que tiene una tabla de personas que contiene un conjunto de personas y una tabla de grupos que contiene un conjunto de grupos. Ahora desea crear una relación de muchos a muchos en persona y en grupo. Lo que significa que cada persona puede pertenecer a muchos grupos. Así es como se vería la estructura de la tabla usando una clave primaria compuesta.
fuente
El ejemplo de W3Schools no dice cuándo debe usar claves primarias compuestas, y solo proporciona una sintaxis de ejemplo utilizando la misma tabla de ejemplo que para otras claves.
Su elección de ejemplo quizás lo esté engañando al combinar una clave sin sentido (P_Id) y una clave natural (LastName). Esta extraña elección de clave primaria dice que las siguientes filas son válidas de acuerdo con el esquema y son necesarias para identificar de forma única a un estudiante. Intuitivamente, esto no tiene sentido.
Lectura adicional: El gran debate de la clave primaria o simplemente Google
meaningless primary keys
o incluso lea detenidamente esta pregunta SOFWIW - Mi 2 centavos es evitar claves primarias de varias columnas y usar un solo campo de identificación generado (clave sustituta) como clave primaria y agregar restricciones adicionales (únicas) cuando sea necesario.
fuente
Utilice una clave compuesta (una clave con más de un atributo) siempre que desee garantizar la unicidad de una combinación de varios atributos. Una sola clave de atributo no lograría lo mismo.
fuente
Sí, ambos forman la clave principal. Especialmente en las tablas en las que no tiene una clave sustituta , puede ser necesario especificar varios atributos como identificador único para cada registro (mal ejemplo: una tabla con un nombre y un apellido puede requerir que se combinen único).
fuente
Varias columnas en una clave, en general, tendrán un rendimiento peor que una clave sustituta. Prefiero tener una clave sustituta y luego un índice único en una clave de varias columnas. De esa manera, puede tener un mejor rendimiento y se mantiene la singularidad necesaria. Y lo que es aún mejor, cuando uno de los valores de esa clave cambia, tampoco es necesario actualizar un millón de entradas secundarias en 215 tablas secundarias.
fuente
Tu segunda pregunta
es específico de la implementación: se define en el DBMS real que se está utilizando. [1], [2], [3] Debe inspeccionar las especificaciones técnicas del sistema de base de datos que utiliza. Algunos son muy detallados, otros no. Buscar en la web acerca de tales limitaciones puede resultar difícil porque la terminología varía. El término clave primaria compuesta debería ser obligatorio;)
Si no puede encontrar información explícita, intente crear una base de datos de prueba para asegurarse de que puede esperar un manejo estable (y específico) de las violaciones de los límites (que son de esperar). Tenga cuidado de obtener la información correcta sobre esto: a veces los límites se acumulan y verá diferentes resultados con diferentes diseños de base de datos.
fuente
El uso de una clave principal en varias tablas resulta útil cuando se utiliza una tabla intermedia en una base de datos relacional.
Usaré una base de datos que hice una vez como ejemplo y específicamente tres tablas dentro de esa tabla. Creé una base de datos para un webcomic hace algunos años. Una tabla se llamaba "cómics": una lista de todos los cómics, sus títulos, el nombre del archivo de imagen, etc. La clave principal era "comicnum".
La segunda tabla era "personajes", sus nombres y una breve descripción. La clave principal estaba en "charname".
Dado que cada cómic, con algunas excepciones, tenía varios personajes y cada personaje aparecía en varios cómics, no era práctico poner una columna en "personajes" o "cómics" para reflejar eso. En cambio, creé una tercera tabla llamada "comicchars", y esa era una lista de qué personajes aparecían en qué cómics. Dado que esta tabla esencialmente unió las dos tablas, solo necesitaba dos columnas: charname y comicnum, y la clave principal estaba en ambas.
fuente
Creamos claves primarias compuestas para garantizar los valores de columna de unicidad que componen un solo registro. Es una restricción que ayuda a evitar la inserción de datos que no deben duplicarse.
es decir, si todas las identificaciones de los estudiantes y los números de certificado de nacimiento se asignan de forma única a una sola persona. Entonces sería una buena idea hacer que la clave principal de una persona sea una composición de identificación de estudiante y número de certificado de nacimiento porque evitaría que inserte accidentalmente dos personas que tienen diferentes identificaciones de estudiante y el mismo certificado de nacimiento.
fuente