2009-08-20 44 views

Respuesta

20

Una clave primaria es un campo único en una tabla pero es especial en el sentido de que la mesa considera que la fila como clave. Esto significa que otras tablas pueden usar este campo para crear relaciones de claves foráneas entre ellas.

Una restricción única simplemente significa que un campo en particular debe ser único.

+9

La clave principal de una fila es la forma en que la base de datos reconoce una fila individual. Puede consistir en una o más columnas, que juntas también deben ser únicas. – TheJacobTaylor

+11

Una clave principal es un conjunto de campos, no necesariamente un solo campo. –

+11

Las restricciones únicas también pueden aplicarse a combinaciones de campos. – chaos

4

Cada clave primaria es una restricción única, pero además de la PK, una tabla puede tener restricciones únicas adicionales.

Digamos que tiene una tabla Employees, PK EmployeeID. Puede agregar una restricción única en SSN, por ejemplo.

1

Una clave principal es un conjunto mínimo de columnas, de modo que dos registros con valores idénticos en esas columnas tienen valores idénticos en todas las columnas. Tenga en cuenta que una clave principal puede constar de varias columnas.

Una restricción de exclusividad es exactamente lo que parece.

+1

@Thom su redacción hace que suene como una restricción de exclusividad que solo se puede aplicar a una sola columna, lo que no es cierto. – Kip

3

Además de la respuesta de Andrew, solo puede tener una clave principal por tabla, pero puede tener muchas restricciones únicas.

+0

Puede tener varias claves principales, se llama clave compuesta. – JMP

+10

Técnicamente, puede tener una clave principal compuesta de múltiples campos, pero aún puede tener una sola clave primaria global. – MattC

2
  1. El objetivo de la clave principal es identificar de manera única una fila en una tabla. La restricción única asegura que el valor de un campo sea único entre las filas en la tabla.
  2. Puede tener solo una clave principal por tabla. Puede tener más de una restricción única por tabla.
48

Las claves principales no pueden ser nulas. Las claves únicas pueden.

+6

+1 Esta es la diferencia crucial. Significa que las columnas de la clave principal pueden direccionar cada fila de forma inequívoca, pero las columnas de clave única no pueden (a menos que coincidan NO sean NULAS). –

+0

Al leer esta pregunta (http://stackoverflow.com/questions/767657/how-do-i-create-unique-constraint-that-also-allows-nulls-in-sql-server), y las respuestas, se ve al igual que la restricción única no puede tener nulos. Entonces, estoy confundido. ¿Es este MSSQL específico, o qué? –

0

La clave principal no puede ser nula pero la restricción única es anulable. cuando eliges una clave primaria para tu tabla, es atómicamente indexar ese campo.

0

Las claves primarias son esencialmente una combinación de (único + no nulo). también cuando se hace referencia a una clave externa, el rdbms requiere clave principal.

La clave única simplemente impone la singularidad de la columna. Un valor de campo puede ser NULL en el caso de una clave única. Tampoco se puede utilizar para hacer referencia a una clave externa, eso es bastante obvio ya que puede tener valores nulos

+1

No, una clave externa también puede hacer referencia a columnas en una restricción única. –

0

Aquí hay varias buenas respuestas hasta ahora. Además del hecho de que una clave principal no puede ser nula, es una restricción única en sí misma, y ​​puede estar compuesta por varias columnas, existen significados más profundos que dependen del servidor de la base de datos que está utilizando.

Soy un usuario de SQL Server, por lo que una clave principal tiene un significado más específico para mí. En SQL Server, de forma predeterminada, las claves principales también forman parte de lo que se denomina el "índice agrupado". Un índice agrupado define el orden real de las páginas de datos para esa tabla en particular, lo que significa que el orden de las claves primarias coincide con el orden físico de las filas en el disco.

Sé que uno, posiblemente más, de los formatos de tabla de MySql también admiten indexación en clúster, lo que significa lo mismo que en SQL Server ... define el orden físico de filas en el disco.

Oracle proporciona algo llamado Tablas organizadas de índice, que ordenan las filas en disco mediante la clave principal.

No estoy muy familiarizado con DB2; sin embargo, creo que un índice agrupado significa que las filas en el disco se almacenan en el mismo orden que un índice separado. No sé si el índice agrupado debe coincidir con la clave principal, o si puede ser un índice distinto.

+0

Oracle tiene Tablas organizadas por índice, que son como el índice agrupado de SQL Server, excepto que el orden está en la clave principal, mientras que SQL Server tiene su índice agrupado en algún otro índice. –

+0

@Shannon: Gracias por la información. He actualizado mi respuesta. – jrista

+0

@Shannon: en SQL Server, el índice agrupado es el conjunto de páginas físicas en el disco, al igual que una tabla Oracle Index-Organized. No hay un índice separado para un índice agrupado ... sin embargo, un índice agrupado en SQL Server no tiene que ser el índice de clave principal. Las tablas se crean para agruparse en la clave principal de manera predeterminada, pero no están restringidas a ser agrupadas por clave principal. – jrista

0

Ambos garantizan la exclusividad en las filas de la tabla, con la excepción de los nulos como se menciona en algunas de las otras respuestas.

Además, una clave principal "viene con" un índice, que puede ser agrupado o no agrupado.

+0

Muchos RDBMS crearán automáticamente índices para restricciones únicas. (No conozco ninguno que no lo haga.) –

12
  1. La clave principal no puede ser nula pero única puede tener solo un valor nulo.
  2. Clave principal crea el índice del clúster automáticamente pero no la clave única.
  3. Una tabla puede tener solo una clave principal pero una clave única más de una.
+1

+1 Buena respuesta. Tenga en cuenta que su primer punto se aplica a SQL Server, pero no a MySQL, por ejemplo. –

+0

Su primer punto no es correcto en todos los casos. –

+1

Su primer punto no es correcto con respecto al estándar SQL y el segundo es irrelevante en lo que respecta al estándar SQL (pero ambos son ciertos para SQL Server). – onedaywhen

0

Una gran cantidad de las respuestas aquí han discutido las propiedades de PK frente a las restricciones únicas. Pero es más importante entender la diferencia en concepto.

Se considera que una clave primaria es un identificador del registro en la base de datos. Por lo tanto, estos serán, por ejemplo, referenciados al crear referencias de claves externas entre tablas. Por lo tanto, en circunstancias normales, una clave primaria nunca debe contener valores que tengan algún efecto en su dominio (a menudo se usan campos incrementales automáticos para esto).

Una restricción única es solo una forma de imponer reglas de negocio específicas del dominio en el esquema de la base de datos.

Como es un identificador para el registro, nunca puede cambiar el valor de una clave principal.

+2

+1 También es bueno mirar este aspecto. Sin embargo, su última frase no es del todo cierta: 'Debido a una PK, es un identificador para el registro, nunca puede cambiar el valor de una clave primaria. Probablemente * no * deba * cambiar la clave principal, pero * puede * hazlo. –

+0

-1 "Por lo tanto, en circunstancias normales, una clave principal nunca debe contener valores que tengan algún efecto en su dominio", una cuestión de gusto presentada como un hecho. – onedaywhen

4

limitaciones clave única:

  1. única restricción de clave le proporcionará una restricción al igual que los valores de las columnas deben conservar la singularidad.
  2. Creará un índice no agrupado de forma predeterminada
  3. Se pueden agregar cualquier cantidad de restricciones exclusivas a una tabla.
  4. Permitirá valor nulo en la columna.

    ALTER TABLE nombre_tabla Agregar restricción UNIQUE_CONSTRAINT único (nombre1_columna, COLUMN_NAME2, ...)

clave principal:

  1. clave primaria creará singularidad de datos de columna en la tabla .
  2. clave primaria creará índice agrupado de forma predeterminada
  3. sólo una llave primay puede ser creado por una mesa
  4. múltiples columnas se pueden consolidar para formar una única clave primaria
  5. No lo puedo permitir valores nulos.

    ALTER TABLE nombre_tabla Agregar restricción KEY_CONSTRAINT PRIMARY KEY (nombre_columna)

+0

Punto clave principal 4: Una restricción 'ÚNICA' puede ser una clave simple o una clave compuesta (simple = una columna, compuesto = columnas múltiples) es decir, no diferente de' PRIMARY KEY' a este respecto. – onedaywhen

5

TL; DR Mucho se puede implicada por PRIMARY KEY (singularidad, de referencia capaz, no nulo-dad, clustering, etc) pero nada que no pueda declararse explícitamente usando UNIQUE.

Sugiero que si usted es el tipo de programador que le gusta la conveniencia de SELECT * FROM... sin tener que enumerar todas esas columnas molestas, entonces PRIMARY KEY es justo lo que necesita.


un relvar puede tener varias claves, pero que elegir sólo uno para subrayar y llamar a que uno la clave principal. La elección es arbitraria, por lo que el concepto de primario no es realmente muy importante desde un punto lógico de vista. ¡El concepto general de clave, sin embargo, es muy importante! La clave de candidato de término significa exactamente lo mismo que la clave (es decir, la adición del candidato no tiene ninguna importancia real; fue propuesta por Ted Codd porque consideraba cada clave como candidata para ser nominada como la clave primaria ). SQL permite que un subconjunto de columnas de una tabla sea declarado como clave para esa tabla. También permite que uno de ellos sea designado como clave principal. Especificación de una clave para ser primaria hace para una cierta cantidad de conveniencia en relación con otros limitaciones que podría ser necesaria

What Is a Key? by Hugh Darwen


es habitual ... singularizar una de las claves como la clave principal (y cualquier otra clave para el relvar en cuestión se dice que son teclas alternativas). Pero si alguna clave está en ser elegido como primario, y si es así cuál, son esencialmente problemas psicológicos, más allá del ámbito del modelo relacional como tal. Como cuestión de buena práctica, la mayoría de bases relvars probablemente deben tener una clave principal, pero, a repetir, esta regla, si se trata de una regla, realmente no es un problema relacional como tal ... Fuerte recomendación [a Usuarios de SQL]: para tablas base, en cualquier caso, use CLAVE PRIMARIA y/o especificaciones ÚNICAS para asegurarse de que cada tabla tenga al menos una clave.

SQL and Relational Theory: How to Write Accurate SQL Code Por C. J. Fecha

En SQL estándar PRIMARY KEY

  • implica singularidad pero se puede especificar que explícitamente (mediante UNIQUE).
  • implica NOT NULL pero se puede especificar explícitamente que al crear columnas (pero se debe evitar los nulos todos modos!)
  • le permite omitir sus columnas en un FOREIGN KEY pero se puede especificar explícitamente.
  • puede declararse para una sola clave por tabla, pero no está claro por qué (Codd, que originalmente propuso el concepto, no impone tal restricción).

En algunos productos PRIMARY KEY implica índice agrupado de la tabla, pero se puede especificar que de forma explícita (es posible que no desea que la clave principal que es el índice agrupado!)

Para algunas personas PRIMARY KEY tiene un significado puramente psicológico:

  • creen que significa que se hará referencia a la clave en una clave externa (esto fue propuesto por Codd pero no adoptado por los proveedores estándar de SQL ni SQL).
  • creen que significa la única clave de la tabla (pero el hecho de no aplicar otras claves candidatas conduce a la pérdida de la integridad de los datos).
  • creen que implica una clave 'sustituta' o 'artificial' sin importancia para la empresa (pero en realidad impone una significación no deseada en la empresa al estar expuesta a los usuarios).
+0

puede tener 1 valor NULO en la columna UNIQUE si no está definido como NOT NULL, pero puede 'tener NULLS en la (s) columna (s) PRIMARY KEY –

1

La restricción UNIQUE identifica de forma única cada registro en una tabla de base de datos.

Las restricciones UNIQUE y PRIMARY KEY proporcionan una garantía de exclusividad para una columna o conjunto de columnas.

Una restricción PRIMARY KEY tiene automáticamente una restricción ÚNICA definida en ella.

Tenga en cuenta que usted puede tener muchas restricciones UNIQUE por mesa, pero sólo una restricción PRIMARY KEY por tabla

0
create table a1 (id int,name varchar(20),city varchar(20),state varchar(20),country varchar(28) constraint pk_a1 primary key(id)); 
insert into a1 values(101,'sohan','gkp','up','india'); 


create table a1 (id int primary key,name varchar(20),city varchar(20),state varchar(20),country varchar(28)); 
insert into a1 values(101,'sohan','gkp','up','india'); 

lo que es la diffrence entre estas dos tablas utilizando la clave primaria y utilizando restricciones

Cuestiones relacionadas