Resumen: en este tutorial, aprenderá a usar la restricción PRIMARY KEY de Oracle para administrar la clave principal de una tabla, hemos utilizado la versión Oracle 12c para poner en practica estos ejemplos.
Introducción a la clave primaria
Una clave principal es una columna de una combinación de columnas en una tabla que identifica de forma única una fila en la tabla.
Las siguientes son reglas que hacen que una columna sea una clave principal:
- Una columna de clave primaria no puede contener un valor NULL o una cadena vacía.
- Un valor de clave principal debe ser único en toda la tabla.
- Un valor de clave principal no debe cambiarse con el tiempo.
De acuerdo con estas reglas, las siguientes son las recomendaciones para las claves primarias:
- Primero, la clave principal debería carecer de significado. A veces, es posible que desee utilizar datos significativos, que se consideran únicos, para las claves principales, por ejemplo, número de seguro social (SSN), número de identificación del vehículo (VIN), correo electrónico y número de teléfono. Sin embargo, no sabe cuándo cambia el correo electrónico o el número de teléfono o cuando otra persona lo reutiliza. En tales casos, creará muchos problemas de datos. En el mundo de las bases de datos, las claves artificiales se conocen como claves sustitutas que son opuestas a las claves primarias naturales.
- En segundo lugar, las claves primarias deben ser compactas. Las claves primarias suelen ser numéricas porque Oracle normalmente procesa los números más rápido que cualquier otro tipo de datos.
Se considera una buena práctica tener una clave principal en cada tabla, aunque no es obligatorio en Oracle.
Para crear una clave principal en una tabla, use la restricción PRIMARY KEY.
Ejemplos de restricciones PRIMARY KEY de Oracle
Normalmente, crea una clave principal para una tabla cuando crea esa tabla. Además, puede agregar una clave principal a una tabla después del hecho utilizando la instrucción ALTER TABLE.
Crear una clave principal que consta de una columna
La siguiente instrucción CREATE TABLE crea el purchase_orderstable:
CREATE TABLE purchase_orders ( po_nr NUMBER PRIMARY KEY, vendor_id NUMBER NOT NULL, po_status NUMBER(1,0) NOT NULL, created_at TIMESTAMP WITH TIME ZONE NOT NULL );
La tabla purchase_orders tiene cuatro columnas: número de orden de compra (po_nr), ID de proveedor (vendor_id), estado de la orden de compra (po_status) y la marca de tiempo (created_at) de la cual se crea la orden de compra.
En esta tabla, defina la columna po_nr como la clave principal utilizando la cláusula PRIMARY KEY.
Tenga en cuenta que la cláusula PRIMARY KEY implícitamente hace que po_nrcolumn NOT NULL, por lo que no tiene que definir la columna como:
po_nr NUMBER NOT NULL PRIMARY KEY
La restricción PRIMARY KEY en este ejemplo es una restricción en línea porque está en la misma línea que la columna po_nr.
Considere la siguiente declaración.
CREATE TABLE purchase_orders ( po_nr NUMBER, vendor_id NUMBER NOT NULL, po_status NUMBER(1,0) NOT NULL, created_at TIMESTAMP WITH TIME ZONE NOT NULL, CONSTRAINT pk_purchase_orders PRIMARY KEY(po_nr) );
Este ejemplo utilizó la restricción PRIMARY KEY como restricción de tabla. Note la siguiente cláusula:
CONSTRAINT pk_purchase_orders PRIMARY KEY(po_nr)
Además, asignamos explícitamente a la restricción PRIMARY KEY un nombre pk_purchase_orders.
Crear una clave principal que consta de varias columnas
La siguiente declaración crea la tabla de artículos de línea de orden de compra:
CREATE TABLE purchase_order_items ( po_nr NUMBER NOT NULL, item_nr NUMBER NOT NULL, product_id NUMBER NOT NULL, quantity NUMBER NOT NULL, purchase_unit NUMBER NOT NULL, buy_price NUMBER (9,2) NOT NULL, delivery_date DATE, PRIMARY KEY (po_nr, item_nr) );
En este ejemplo, la clave principal de la tabla purchase_order_items consta de dos columnas: po_nr y item_nr. Significa que la combinación de valores de estas columnas identifica de forma única una línea de pedido de compra.
Este ejemplo no usó la cláusula CONSTRAINT para asignar explícitamente un nombre a la restricción PRIMARY KEY. Por lo tanto, Oracle asignó implícitamente a la restricción de clave principal un nombre generado por el sistema, como SYS_C0010617.
Agregar una clave principal a una tabla
A veces, es posible que desee agregar una restricción de clave principal a una tabla existente. Para hacerlo, use la instrucción ALTER TABLE de la siguiente manera:
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column1, column2, ...);
El siguiente ejemplo crea la tabla de proveedores primero y luego le agrega una restricción de clave primaria:
CREATE TABLE vendors ( vendor_id NUMBER, vendor_name VARCHAR2(255) NOT NULL, address VARCHAR2(255) NOT NULL ); ALTER TABLE vendors ADD CONSTRAINT pk_vendors PRIMARY KEY (vendor_id);
Eliminación de una restricción PRIMARY KEY de Oracle
Rara vez eliminará una restricción PRIMARY KEY de una tabla. Si tiene que hacerlo, utilice la siguiente instrucción ALTER TABLE.
ALTER TABLE table_name DROP CONSTRAINT primary_key_constraint_name;
Por ejemplo, puede eliminar la restricción de clave principal de la tabla de proveedores de la siguiente manera:
ALTER TABLE vendors DROP CONSTRAINT pk_vendors;
Es posible utilizar la siguiente declaración para eliminar la clave principal de una tabla:
ALTER TABLE table_name DROP PRIMARY KEY;
Por ejemplo:
ALTER TABLE vendors DROP PRIMARY KEY;
Habilitar / deshabilitar una restricción PRIMARY KEY de Oracle
Para mejorar el rendimiento al cargar una gran cantidad de datos en una tabla o actualizar datos masivos, puede deshabilitar temporalmente la restricción PRIMARY KEY.
Para deshabilitar una restricción PRIMARY KEY de una tabla, use la instrucción ALTER TABLE:
ALTER TABLE table_name DISABLE CONSTRAINT primary_key_constraint_name; Or ALTER TABLE table_name DISABLE PRIMARY KEY;
Por ejemplo, para deshabilitar la restricción de clave principal de la tabla purchase_orders, utilice la siguiente declaración:
ALTER TABLE purchase_orders DISABLE CONSTRAINT pk_purchase_orders; or ALTER TABLE purchase_orders DISABLE PRIMARY KEY;
Para habilitar una restricción de clave primaria, use la siguiente instrucción ALTER TABLE:
ALTER TABLE table_name ENABLE CONSTRAINT primary_key_constraint_name; or ALTER TABLE table_name ENABLE PRIMARY KEY;
El siguiente ejemplo habilita la restricción PRIMARY KEY de la tabla purchase_orders:
ALTER TABLE purchase_orders ENABLE CONSTRAINT pk_purchase_orders; or ALTER TABLE purchase_orders ENABLE PRIMARY KEY;
En este tutorial, ha aprendido a usar la restricción PRIMARY KEY de Oracle para crear, agregar, deshabilitar, habilitar y dropiar(borrar) una clave principal de una tabla.
Pingback: Introducción a SQL - DBandTech.com