2011-08-28 13 views
9

Estoy analizando el diseño de una base de datos Oracle y estoy perplejo al ver claves únicas y claves principales en los mismos campos. Estos pares de claves únicas y primarias se crean constantemente en todas las tablas. No veo ninguna razón para hacer esto.¿Hay alguna razón para usar tanto la clave principal como la clave única juntas en el mismo campo?

Si de todos modos tengo una clave principal, ¿hay una buena razón para crear una clave única adicional en el mismo campo?

+1

Las claves primarias son, por definición, únicas, por lo que no veo ningún motivo para agregar otra restricción/índice único – Phil

Respuesta

1

No, no hay razón para tenerlo también como único; cuando establece una columna como PK, está seguro de que:

  1. No se aceptará ningún NULL para esa columna en INSERTAR o ACTUALIZAR;
  2. Los valores en toda la tabla para esa columna son siempre ÚNICOS;

tan solo PK es suficiente. Dado que existe un índice ÚNICO para la columna PK, por definición, no es necesario agregar ningún otro índice en esa columna solo porque las consultas usarán el índice PK siempre que solo se vea afectada esa columna.

1

Creo que es imposible (PK y la restricción única en la misma columna [s]) ...

Usted no puede designar la misma columna o combinación de columnas tanto como una clave principal y una clave única.

(de here, sección "Restricciones a restricciones de clave principal"). ¿No es así?

1

Oracle no le permitirá crear múltiples restricciones UNIQUE y PRIMARY KEY en el mismo campo establecido en el mismo orden y no podrá con ORA-02261.

Si tiene claves compuestas, puede crear PRIMARY KEY en el conjunto de columnas en un orden (PRIMARY KEY (a, b)) y una restricción única en otro (UNIQUE (b, a)).

Esto se analizará y ejecutará; sin embargo, se usará un solo índice para controlar ambas restricciones, por lo que no tiene sentido.

¿Podría publicar las secuencias de comandos de la tabla?

1

Solo un poco de conocimiento teórico aquí ... Al modelar su tabla, identifica un conjunto de teclas. Estas claves son lógicamente equivalentes, pero para fines prácticos, eliges una de ellas y la llamas "primaria" mientras que el resto se convierte en "alternativa".

(En DDL SQL, una clave principal se llama "PRIMARY KEY", mientras que "clave alternativa" se llama "restricción UNIQUE".)

Por lo tanto, en vista de ello, su pregunta es equivalente a : "hay una buena razón para tener dos claves idénticas", y la respuesta es: "no".

Dicho esto, se puede tienen teclas superpuestas (es decir, las teclas que comparten algunos campos pero no todos), pero esto suele ser un signo de un mal diseño ... y la respuesta es: "probablemente no".


otoh, si por "clave única", que en realidad significa "única índice de", entonces sí, se necesita tanto de ellos.

El índice no es una restricción lógica: está ahí simplemente para permitir que una restricción lógica como PRIMARY KEY funcione bien (y para consultar, pero ese es un tema diferente).

4

Para una tabla que resuelve muchos a muchos, sería común tener una clave de dos partes (como lo indica Quassnoi). También es bastante probable que necesite índices que respalden el acceso a través de cualquiera de los padres.

Si tiene, por ejemplo, tablas PERSON, ADDRESS y PERSON_ADDRESS, su tabla PERSON_ADDRESS puede tener la clave principal de (PERSON_ID, ADDRESS_ID) y un índice de soporte. También tendría otro índice en (ADDRESS_ID, PERSON_ID), y probablemente haría de este un índice ÚNICO (ya que es una combinación única de campos).

También es posible que su DBA tenga alguna forma particular de generar tablas que comience con un índice ÚNICO en los campos de clave principal seguido de la creación de la restricción PRIMARY KEY. Eso puede aparecer en algunas herramientas GUI en la forma en que sugiere.

Cuestiones relacionadas