2010-06-04 11 views
19

Intenté encontrarlo en Google pero la respuesta no es satisfactoria. ¿Alguien puede explicar la diferencia sólida?Cuál es la diferencia b/w Clave principal y clave única

en realidad si la clave principal se utiliza para seleccionar los datos de forma única, entonces, ¿cuál es la necesidad de la clave única?

¿Cuándo debería usar una clave principal y cuándo usar una clave única?

Respuesta

29

La clave principal y la clave única se usan para diferentes cosas: entender para qué sirven ayudará a decidir cuándo usarlas.

La clave principal se utiliza para identificar una fila de datos en una tabla. Se usa siempre que necesite referirse a una fila en particular, ej. en otras tablas o por código de aplicación, etc. Para identificar una fila, los valores de una PK deben ser únicos. Además, no pueden ser nulos, porque la mayoría de los dbms consideran que null no es igual a nulo (dado que null típicamente significa "desconocido"). Una tabla solo puede tener un PK. Todas las tablas en su base de datos deben tener un PK (aunque esto no se aplica por la mayoría de los DBM), y PK puede abarcar varias columnas.

Las restricciones de clave únicas se utilizan para garantizar que los datos no se dupliquen en dos filas en la base de datos. Se permite que una fila en la base de datos tenga nulo para el valor de la restricción de clave única. Aunque una tabla debe tener un PK, no necesita tener claves únicas adicionales. Sin embargo, las tablas pueden tener más de una clave única si cumple con sus necesidades. Al igual que PK, las claves únicas pueden abarcar varias columnas.

También vale la pena saber que, de forma predeterminada, muchos índices dbms y físicamente ordenar tablas en el disco utilizando el PK. Esto significa que buscar valores por su PK es más rápido que usar otros valores en una fila. Normalmente, sin embargo, puede anular este comportamiento si es necesario.

+2

¿a qué te refieres con 'PK puede abarcar varias columnas'? – nectar

+4

En muchos ejemplos, verá que la clave principal es una sola columna en la tabla; a menudo un número de identificación entero que identifica de manera única la fila (esto se llama una columna de identidad). Eso está bien (y, a menudo, es conveniente), pero el PK no * tiene * para ser una sola columna. – Kramii

+3

Por ejemplo, podría tener una tabla de Productos. Supongamos que cada producto viene en varios modelos y en varios colores, por lo que la tabla Products tiene una columna ModelNum y una columna Color. Ahora, ni la columna ModelNum ni Colour identifican de manera única un Producto, pero juntos lo hacen. En ese caso, puede definir una clave principal que incluya las columnas ModelNum y Colour (esto se denomina "clave primaria compuesta"). Por supuesto, hay pros y contras de la columna de identidad PK versus el enfoque PK de columna compuesta ... pero esa es otra pregunta. – Kramii

4

Una clave principal no permite valores nulos, una clave única permitirá una nula (en el servidor SQL y múltiples valores nulos en Oracle) Una tabla sólo puede tener una clave principal, pero muchas claves únicas

utilizar claves primarias cuando desea establecer relaciones de clave externa

Aquí hay un pequeño ejemplo con una sola columna en cada tabla

--primary key table 
CREATE TABLE PrimaryTest (id INT PRIMARY KEY NOT NULL) 
GO 

-- foreign key table 
CREATE TABLE ForeignTest (Pkid INT NOT NULL) 
GO 


--relationship 
ALTER TABLE dbo.ForeignTest ADD CONSTRAINT 
    FK_ForeignTest_PrimaryTest FOREIGN KEY 
    (
    Pkid 
    ) REFERENCES dbo.PrimaryTest 
    (
    id 
    ) ON UPDATE NO ACTION 
    ON DELETE NO ACTION 

GO 

insertar una fila en la tabla de clave principal

insert PrimaryTest values(1) 

insertar una fila en la tabla de clave externa con un valor que existe en la tabla de clave principal

insert ForeignTest values(1) 

Ahora bien, esto se producirá un error porque el valor 2 no existe en la tabla de clave principal

insert ForeignTest values(2) 

Msg 547, nivel 16, estado 0, línea 1 La instrucción INSERT entró en conflicto con la restricción FOREIGN KEY "FK_ForeignTest_PrimaryTest". El conflicto ocurrió en la base de datos "aspnetdb", tabla "dbo.PrimaryTest", columna "id". La declaración ha finalizado.

+1

le puede dar un pequeño ejemplo de cómo puedo usar clave única para establecer relaciones de clave externa – nectar

+1

este ejemplo es todo acerca de las claves externas que yo hacía sobre las claves únicas. – nectar

+0

El reclamo "* una clave única permitirá un nulo *" depende del DBMS que se esté utilizando. Algunos permiten múltiples valores nulos (Postgres, MySQL, Firebird), otros no (Oracle, DB2, SQL Server) –

4

Una clave principal es una clave única. Ambos tipos de clave sirven para identificar de manera única una sola fila en una tabla. Muchos RDBMS requieren que una de las claves únicas en una tabla se designe como la "clave principal", por varias razones de implementación diferentes. En términos de integridad de datos, no hay diferencia.

+0

una clave única permitirá al menos un nulo donde un PK no será – SQLMenace

10

El término "clave única" es a la vez ambiguo y tautólogo. En el modelo relacional, una "clave" significa una clave candidata, que por definición es única de todos modos. Una clave principal es cualquiera de las claves candidatas de una relación. Por lo tanto, "clave única" significa exactamente lo mismo que "clave candidata", que significa exactamente lo mismo que "clave principal". No hay diferencia.

Sin embargo, SQL tiene algo llamado una restricción ÚNICA que es sutilmente diferente a una restricción PRIMARY KEY SQL - ambos hacen cumplir la unicidad, pero PRIMARY KEY solo se puede usar una vez por tabla. Las restricciones ÚNICAS también permiten nulos mientras que las restricciones PRIMARY KEY no.

Por lo tanto, el término potencialmente confuso "clave única" se utiliza con más frecuencia para significar una clave impuesta por una restricción ÚNICA. Incluso podría usarse para significar una restricción ÚNICA sobre columnas que aceptan nulos, aunque ese es un uso muy dudoso del término en mi opinión porque un conjunto de columnas que incluyen nulos no puede ser una clave candidata así que el uso de la palabra "clave" para nullable las columnas no son realmente correctas y pueden causar confusión.

+0

* "clave única" significa exactamente lo mismo que "clave candidata", que significa exactamente lo mismo que "clave principal". No hay diferencia. "* - Eso es incorrecto, como lo dejas claro en el resto de tu respuesta – Yarin

+1

Lo que explico aquí es que desafortunadamente el término" clave única "ocasionalmente se usa incorrectamente * para describir algo que no es único y no es un Creo que debería ser obvio que esto es un * mal uso * de esas dos palabras y que el único significado correcto de la frase "clave única" es describir algo que ES único y ES una clave. Por lo tanto, el significado preciso de "clave única" es la misma que la clave principal y la clave candidata. – sqlvogel

2

sólo para añadir otro ejemplo:

pensar en una tabla que contiene los datos del usuario, donde cada usuario tiene una dirección de correo electrónico. No hay dos usuarios pueden tener la misma dirección de correo electrónico, por lo que esa columna se convierte en una clave única. Si bien podría ser la clave principal (nunca he hecho que una cadena sea una clave principal), no tiene que ser así.

+0

Gracias por dar el ejemplo de una tabla de usuario. Estaba buscando esta respuesta exacta. La explicación con un ejemplo es más fácil de imaginar y comprender. –

1

Ambos están representando una identificación única a una fila de una tabla pero hay poco diferencia es que

clave primaria no permite valores NULL

mientras

La clave ÚNICA solo permite un valor NULL.

que es la principal diferencia ..

+0

La afirmación "* ÚNICO La clave permite que solo un valor NULL * "dependa del DBMS que se use. Algunos permiten valores nulos múltiples (Postgres, MySQL, Firebird), otros no (Oracle, DB2, SQL Server) –

8

Antes de discutir sobre la diferencia entre la clave principal y clave única, es importante para determinar lo que es clave, la forma en que juega un papel en los negocios y la forma en que se implementa en SQL/Oracle etc.

Para una empresa o negocio, hay tantas entidades físicas (como personas, recursos, máquinas, etc.) y entidades virtuales (sus Tareas, transacciones, actividades) . Normalmente, las empresas necesitan registrar y procesar información para esas entidades comerciales. Estas entidades comerciales se identifican dentro de un dominio empresarial completo mediante una clave.

Según RDBMS prospectivo: Clave (a. K.a Clave candidata), un valor o conjunto de valores que identifica de forma única a la entidad. Para una tabla Db, existen tantas claves que pueden ser elegibles para la clave principal. Para que todas las claves, clave principal, clave única, etc. se denominen colectivamente como clave candidata.

Para una tabla DBA seleccionada La clave candidata se llama clave principal, otras claves candidatas se llaman claves secundarias.

Diferencia entre la clave principal y clave única

1.Comportamiento: La clave principal se utiliza para identificar una fila (registro) en una tabla, mientras que la clave única es para evitar valores duplicados en una columna.

2. Indexación: De forma predeterminada, Sql-engine crea el índice agrupado en la clave primaria si no existe y el índice no agrupado en la clave única.

3. Nulability: La clave principal no incluye valores nulos, mientras que Unique-key puede.

4. Existencia: Una tabla puede tener como máximo una clave principal, pero puede tener varias claves únicas.

5. Modificabilidad: No puede cambiar ni eliminar valores primarios, pero los valores de clave única sí pueden.

Para obtener más información con ejemplos: http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html

+0

" * Por defecto Sq l-engine crea el índice agrupado en la clave primaria * "depende del DBMS que se usa. No todos los DBMS tienen algo así como un "índice agrupado" y no todos los usan de forma predeterminada. –

0

puede tener muchas restricciones UNIQUE por mesa, pero sólo una restricción PRIMARY KEY por tabla. Más información se puede encontrar here

-1

Una clave única se servirá con otra clave, mientras que una clave principal no sirve ninguna otra clave con ella. La clave principal se usa sin ninguna asociación de ninguna otra clave.

+0

¿Puedes explicar esto un poco mejor? ¿A qué te refieres con "servido con", exactamente? –

1

Restricción de clave primaria
1. Una clave principal no puede permitir el nulo.
2. No se permiten varias claves primarias.
3. En algunos RDBMS, una clave principal genera un índice agrupado por defecto.

restricción único
1. Una restricción única se puede definir en las columnas que permiten valores nulos.
2. Se permiten varias claves únicas.
3. En algunos RDBMS, una clave única genera un índice no agrupado de forma predeterminada.

Fuente Wikipedia

0

NO NULO toda entrada de esa columna en particular no debe ser nulo. ÚNICA significa que cada entrada en la columna debe ser distinta. PRIMARY KEY significa que cualquier entrada en la columna debe ser distinta y no nula.

Así que simplemente ..

PRIMARY KEY= UNIQUE + NOT NULL 
Cuestiones relacionadas