Cuál es la diferencia b/n Clave Primaria y Clave Única


Traté de averiguarlo en Google, pero no la respuesta satisfactoria se da por ahí. Alguien puede explicar la diferencia sólida.

En realidad, si la clave primaria se utiliza para seleccionar datos de forma única, ¿cuál es la necesidad de una clave única?

¿Cuándo debo usar una clave primaria y cuándo usar una clave única?

Author: a_horse_with_no_name, 2010-06-04

11 answers

La Clave Primaria y la Clave única se usan para diferentes cosas; comprender para qué sirven te ayudará a decidir cuándo usarlas.

La clave primaria se utiliza para identificar una fila de datos en una tabla. Se utiliza siempre que necesite hacer referencia a una fila en particular, por ejemplo. en otras tablas o por código de aplicación, etc. Para identificar una fila, los valores de un PK deben ser únicos. Además, no pueden ser null, porque la mayoría de los dbm tratan null como no igual a null (ya que null típicamente significa "desconocido"). Una mesa solo puede tener un PK. Todas las tablas en su base de datos deben tener un PK (aunque esto no es obligatorio en la mayoría de los dbms), y PK puede abarcar varias columnas.

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

También vale la pena saber que, por defecto, muchos dbms indexan y ordenan físicamente tablas en disco usando 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.

 33
Author: Kramii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-20 14:32:37

El término "clave única" es 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 primaria es cualquiera de las claves candidatas de una relación. Por lo tanto," clave única "significa exactamente lo mismo que" clave candidata", lo que significa exactamente lo mismo que"clave primaria". No hay diferencia.

Sin embargo, SQL tiene algo llamado una restricción ÚNICA que es sutilmente diferente a una restricción de CLAVE PRIMARIA SQL - ambas aplican unicidad pero CLAVE PRIMARIA solo se puede utilizar una vez por tabla. Las restricciones ÚNICAS también permiten valores nulos, mientras que las restricciones de CLAVE PRIMARIA no.

Por lo tanto, el término potencialmente confuso "clave única" se usa con mayor frecuencia para referirse a una clave impuesta por una restricción ÚNICA. Incluso podría usarse para significar una restricción ÚNICA en columnas nullables, 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, por lo que el uso de la palabra "clave" para columnas nullables no es realmente correcto y está obligado a causar confusión.

 11
Author: sqlvogel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-04 18:32:24

Antes de discutir sobre la diferencia entre Clave Primaria y Clave Única, es importante determinar qué es clave, cómo desempeña un papel en el negocio y cómo se implementa en SQL / Oracle, etc.

Según las perspectivas de negocio: Para una organización o un negocio, hay tantas entidades físicas(como personas, recursos, máquinas, etc.) y entidades virtuales (sus Tareas, transacciones, actividades). Por lo general, las empresas necesitan registrar y procesar información para esas empresas entidad. Estas entidades de negocio se identifican dentro de todo el dominio de negocio por una Clave.

Según RDBMS prospectivo: Clave (también conocida como Clave candidata), un valor o conjunto de valores que identifica de forma única a la entidad. Para una tabla Db, hay tantas claves que existen y podrían ser elegibles para la Clave Primaria. Para que todas las claves, clave primaria, clave única, etc. se llamen colectivamente como Clave Candidata.

Para una tabla, la Clave Candidata seleccionada de DBA se llama Clave Primaria, se llaman otras claves candidatas claves secundarias.

Diferencia entre Clave Primaria y clave única

1. Comportamiento: La clave primaria se usa 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 Índice agrupado en clave primaria si no existe e Índice No agrupado en clave única.

3. Nullability: Primary key no incluye valores null mientras que Unique-key puede.

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

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

Para 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

 8
Author: nayeemDotNetAuthorities,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-10 06:33:56

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

 4
Author: Christian Hayter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-04 10:56:42

Una clave primaria no permite nulos, una clave única permitirá un null (en sql server y múltiples nulos en Oracle) Una tabla solo puede tener una clave primaria pero muchas claves únicas

Utilice claves primarias cuando desee configurar relaciones de claves foráneas

Aquí hay un pequeño ejemplo con solo una 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 claves primarias

insert PrimaryTest values(1)

Inserte una fila en la tabla de claves foráneas con un valor que exista en la clave primaria tabla

insert ForeignTest values(1)

Ahora esto fallará porque el valor 2 no existe en la tabla de clave primaria

insert ForeignTest values(2)

Msg 547, Nivel 16, Estado 0, Línea 1 La instrucción INSERT entró en conflicto con la restricción de CLAVE FORÁNEA "FK_ForeignTest_PrimaryTest". El conflicto se produjo en la base de datos "aspnetdb", tabla " dbo.PrimaryTest", columna 'id'. La declaración ha sido terminada.

 4
Author: SQLMenace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-04 11:07:14

Solo para agregar otro ejemplo:

Piense en una tabla que contiene datos de usuario, donde cada usuario tiene una dirección de correo electrónico. No hay dos usuarios que puedan tener la misma dirección de correo electrónico, por lo que la columna se convierte en una clave única. Si bien podría ser la clave primaria (nunca he hecho una cadena una clave primaria), no tiene que serlo.

 2
Author: Quentamia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-04 18:38:55

Ambos representan una identificación única a una fila en una tabla, pero hay una pequeña diferencia es que

La clave primaria no permite valores NULOS

Mientras que

La clave única solo permite un valor NULO.

Esa es la principal diferencia ..

 2
Author: jaideep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-17 06:32:48

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

Restricción única
1. Se puede definir una restricción única en las columnas que permiten valores nulos.
2. Se permiten múltiples claves únicas.
3. En algunos RDBMS una clave única genera un índice no agrupado por defecto.

Fuente Wikipedia

 1
Author: A-patel-guy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-22 02:50:26

Puede tener muchas restricciones ÚNICAS por tabla, pero solo una restricción de CLAVE PRIMARIA por tabla. Puede encontrar más información aquí

 0
Author: Brian Kenya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-23 09:08:36

NOT NULL significa que cualquier entrada en esa columna en particular no debe ser nula. ÚNICO significa que cada entrada de la columna debe ser distinta. CLAVE PRIMARIA significa que cualquier entrada en la columna debe ser distinta y no nula.

Tan simple..

  PRIMARY KEY= UNIQUE + NOT NULL
 0
Author: Siddappa Walake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-13 11:54:38

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

 -1
Author: RAJA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-25 02:25:11