Você está na página 1de 71

ADMINISTRACIÓN DE BASES DE

DATOS
UNIDAD 2 – CREACIÓN DE
ESTRUCTURAS DE DATOS
OBJETIVO
• Administrar los objetos de usuario que se pueden crear en el RDBMS Oracle a
través de sentencias SQL
Título Presentación

Agenda
• Administración de Tablas, vistas, restricciones, sinónimos y secuencias.
Tipos de objetos a tratar

Objeto Descripción

Tabla Unidad básica de almacenamiento; está


formada por filas y columnas.

Vista Representa lógicamente subjuegos de datos


de una o varias tablas.

Secuencia Generador de valor numérico.


Índice Mejora el rendimiento de algunas consultas.
Sinónimo Proporciona nombres alternativos a objetos.
Reglas de Nomenclatura

Los nombres de tablas y columnas:


• Deben empezar por una letra.
• Deben tener entre 1 y 30 caracteres.
• Sólo deben contener A–Z, a–z, 0–9, _, $ y #.
• No deben duplicar el nombre de otro objeto propiedad
del mismo usuario.
• No deben ser palabras reservadas del RDBMS.
Tipos de Dato

Tipo de Dato Descripción


VARCHAR2(size) Dato de caracteres de longitud variable
CHAR(size) Dato de caracteres de longitud fija
NUMBER(p,s) Dato numérico de longitud variable
DATE Valores de fecha y hora
LONG Dato de caracteres de longitud variable
de hasta 2 gigabytes
CLOB Dato de caracteres de hasta 4
gigabytes
RAW y LONG RAW Dato raw binario
BLOB Dato binario de hasta 4 gigabytes
BFILE Dato binario almacenado en un archivo
externo; hasta 4 gigabytes
ROWID Sistema numérico de base 64 que
representa la dirección única de una fila
en su tabla.
La Sentencia CREATE TABLE

• Debe tener:
– El privilegio CREATE TABLE
– Un área de almacenamiento

CREATE TABLE [schema.]table


(column datatype [DEFAULT expr][, ...]);

• Especifique:
– Nombre de tabla
– Nombre de columna, tipo de dato de columna y tamaño
de columna
Creación de Tablas

• Crear la tabla.
SQL> CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13));
Table created.

• Confirmar la creación de la tabla.

SQL> DESCRIBE dept ;


Referencia a Tablas de otro Usuario

• Las tablas pertenecientes a otros usuarios no están en


el esquema del usuario.

• Debe utilizar el nombre de propietario como prefijo


para dichas tablas.
Creación de una Tabla Utilizando una Sintaxis de Subconsulta

• Cree una tabla e inserte filas combinando la sentencia CREATE


TABLE y la opción AS subquery.

CREATE TABLE table


[(column, column...)]
AS subquery;

• Haga coincidir el número de columnas especificadas con el


número de columnas de subconsulta.
• Defina columnas con nombres de columna y valores por defecto.
Creación de una Tabla Utilizando una Subconsulta

SQL> CREATE TABLE dept30


AS
SELECT empno EMPLOYEE_ID,
ename LAST_NAME,
sal*12 ANNSAL,
hiredate HIRE_DATE
FROM emp
WHERE deptno = 30;
Table created.

SQL> DESCRIBE dept30


La Sentencia ALTER TABLE

Utilice la sentencia ALTER TABLE para:


• Agregar una columna nueva
• Modificar una columna existente
• Definir un valor por defecto para la nueva columna
• Borrar una columna
La Sentencia ALTER TABLE

Utilizar la sentencia ALTER TABLE para agregar,


modificar o borrar columnas.
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, column datatype]...);

ALTER TABLE table


MODIFY (column datatype [DEFAULT expr]
[, column datatype]...);

ALTER TABLE table


DROP (column);
Adición de una Columna

• Puede utilizar la cláusula ADD para agregar


columnas.
ALTER TABLE dept30
ADD (job_id VARCHAR2(9));
Table altered.

• La nueva columna pasa a ser la última.


Modificación de una Columna

• Puede cambiar el tipo de dato, el tamaño y


el valor por defecto de una columna.
SQL> ALTER TABLE dept30
MODIFY(last_name VARCHAR2(30));
Table altered.

• Un cambio en el valor por defecto sólo


afecta a las inserciones posteriores en la
tabla.
Eliminación de una Columna

Utilice la cláusula DROP COLUMN para borrar las


columnas que ya no necesite de la tabla.

SQL> ALTER TABLE dept30


DROP COLUMN job_id;
Table altered.
La Opción SET UNUSED

• Utilice la opción SET UNUSED para marcar


una o varias columnas como no utilizadas.
• Utilice la opción DROP UNUSED COLUMNS
para eliminar las columnas marcadas como
no utilizadas.

ALTER TABLE table


SET UNUSED (column);
OR
ALTER TABLE table
SET UNUSED COLUMN column;

ALTER TABLE table


DROP UNUSED COLUMNS;
Eliminación de una Tabla

• Se suprimen todos los datos y la estructura de la tabla.


• Se valida cualquier transacción pendiente.
• Se borran todos los índices.
• No puede realizar rollback de la sentencia DROP TABLE.

SQL> DROP TABLE dept30;

Table dropped.
Cambio del Nombre de un Objeto

• Para cambiar el nombre de una tabla, una


vista, una secuencia o un sinónimo, ejecute
la sentencia RENAME.

SQL> RENAME dept TO detail_dept;

Table renamed.

• Debe ser el propietario del objeto.


Truncamiento de una Tabla

• La sentencia TRUNCATE TABLE:


– Elimina todas las filas de una tabla.
– Libera el espacio de almacenamiento utilizado
por dicha tabla.

SQL> TRUNCATE TABLE detail_dept;

Table truncated.

• No puede realizar rollback de la eliminación de


filas si utiliza TRUNCATE.
• También puede eliminar filas utilizando la
sentencia DELETE.
Adición de Comentarios a una Tabla

• Puede agregar comentarios a una tabla o a una


columna utilizando la sentencia COMMENT.
SQL> COMMENT ON TABLE emp
IS 'Información de empleados';
Comment created.

• Los comentarios se pueden visualizar a través de


las vistas del diccionario de datos:
– ALL_COL_COMMENTS
– USER_COL_COMMENTS
– ALL_TAB_COMMENTS
– USER_TAB_COMMENTS
Integridad de los Datos

 La integridad de los datos implica que todos los datos de


una base de datos siguen las reglas de negocio.

 Hay tres formas principales de mantener la integridad de


los datos:

• Código de aplicación
• Disparadores de base de
datos
• Restricciones de integridad
declarativa
¿Qué son las Restricciones?

• Las restricciones fuerzan las reglas a nivel de tabla.


• Las restricciones evitan la supresión de una tabla si
hay dependencias.
• Son válidos los siguientes tipos de restricción:
– NOT NULL
– UNIQUE
– PRIMARY KEY
– FOREIGN KEY
– CHECK
Instrucciones sobre Restricciones

• Asignar un nombre a una restricción; si no lo hace, el


RDBMS genera un nombre con el formato SYS_Cn.
• Crear una restricción:
– Se puede hacer al definir la creación de la tabla o
cuando la tabla ya existe.
• Definir una restricción a nivel de columna o de tabla.
• Visualizar una restricción en el diccionario de datos.
Definición de Restricciones

CREATE TABLE [schema.]table


(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);

Ejemplo:

CREATE TABLE employees(


employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
PRIMARY KEY (EMPLOYEE_ID));
Definición de Restricciones

• Nivel de restricción de columna



column [CONSTRAINT constraint_name] constraint_type,

• Nivel de restricción de tabla


column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),
La Restricción NOT NULL

Asegura que no se permiten valores nulos para la


columna:

Restricción NOT Restricción Ausencia de restricción


NULL NOT NULL NOT NULL
(Ninguna fila (Cualquier fila puede
puede contener contener un valor nulo
un valor nulo para para esta columna)
esta columna)
La Restricción NOT NULL

Se define a nivel de columna:


CREATE TABLE employees(
employee_id NUMBER(6), Nombrada
last_ename VARCHAR2(25) NOT NULL, por el
salary NUMBER(8,2), sistema
commission_pct NUMBER(2,2),
hire_date DATE CONSTRAINT emp_hiredate_nn Nombrada
NOT NULL, por el
... usuario

employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
La Restricción UNIQUE

Restricción UNIQUE
EMPLOYEES


INSERT INTO

Permitido
No permitido:
ya existe
La Restricción UNIQUE

Definida a nivel de tabla o de columna:

CREATE TABLE employees(


employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
...
CONSTRAINT emp_email_uk UNIQUE(email));
La Restricción PRIMARY KEY

DEPARTMENTS
PRIMARY KEY


No permitido
(valor nulo) INSERT INTO

No permitido
(50 ya existe)
La Restricción PRIMARY KEY

Definida a nivel de tabla o de columna:

CREATE TABLE departments(


department_id NUMBER(4),
department_name VARCHAR2(30)
CONSTRAINT dept_name_nn NOT NULL,
manager_id NUMBER(6),
location_id NUMBER(4),
CONSTRAINT dept_id_pk PRIMARY KEY(department_id));
La Restricción FOREIGN KEY

DEPARTMENTS

PRIMARY
KEY

EMPLOYEES
FOREIGN
KEY


INSERT INTO No permitido
(9 no existe)

Permitido
La Restricción FOREIGN KEY

Definida a nivel de tabla o de columna:

CREATE TABLE employees(


employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
...
department_id NUMBER(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
CONSTRAINT emp_email_uk UNIQUE(email));
Palabras Clave de la Restricción FOREIGN KEY

• FOREIGN KEY: Define la columna de la tabla


secundaria a nivel de restricción de tabla.

• REFERENCES: Identifica la tabla y la columna


en la tabla principal.

• ON DELETE CASCADE: Suprime las filas


dependientes de la tabla secundaria cuando se
suprime una fila en la tabla principal.

• ON DELETE SET NULL: Convierte los valores


de clave ajena dependientes en valores nulos.
La Restricción CHECK

• Define una condición que debe satisfacer cada fila.


• No se permiten las siguientes expresiones:
– Referencias a las pseudocolumnas CURRVAL,
NEXTVAL, LEVEL y ROWNUM
– Llamadas a las funciones SYSDATE, UID, USER
y USERENV
– Consultas que hagan referencia a otros valores
de otras filas

..., salary NUMBER(2)


CONSTRAINT emp_salary_min
CHECK (salary > 0),...
Adición de una Sintaxis de Restricción

Utilizar la sentencia ALTER TABLE para:


• Agregar o borrar una restricción, sin modificar
su estructura
• Activar o desactivar restricciones
• Agregar una restricción NOT NULL utilizando la
cláusula MODIFY

ALTER TABLE table


ADD [CONSTRAINT constraint] type (column);
Adición de una Restricción

Agregar una restricción FOREIGN KEY a la tabla


EMPLOYEES que indique que ya debe existir un director
como empleado válido en la tabla EMPLOYEES.

SQL> ALTER TABLE employees


ADD CONSTRAINT emp_manager_fk
FOREIGN KEY(manager_id)
REFERENCES employees(employee_id);

Table altered.
Eliminación de una Restricción

• Eliminar la restricción de director de la tabla


EMPLOYEES.
SQL> ALTER TABLE employees
DROP CONSTRAINT emp_manager_fk;

Table altered.

• Eliminar la restricción PRIMARY KEY de la tabla


DEPARTMENTS y borre la restricción FOREIGN KEY
asociada en la columna EMPLOYEES.DEPARTMENT_ID.

SQ> ALTER TABLE departments


DROP PRIMARY KEY CASCADE;

Table altered.
Desactivación de Restricciones

• Ejecute la cláusula DISABLE de la sentencia ALTER


TABLE para desactivar una restricción de integridad.
• Aplique la opción CASCADE para desactivar
restricciones de integridad dependientes.

SQL> ALTER TABLE employees


DISABLE CONSTRAINT emp_emp_id_pk CASCADE;

Table altered.
Activación de Restricciones

• Active una restricción de integridad desactivada


actualmente en la definición de tabla utilizando la
cláusula ENABLE.

SQL> ALTER TABLE employees


ENABLE CONSTRAINT emp_emp_id_pk;

Table altered.

• Se crea un índice UNIQUE o PRIMARY KEY


automáticamente si activa una restricción de clave
UNIQUE o PRIMARY KEY.
Restricciones en Cascada

• La cláusula CASCADE CONSTRAINTS se utiliza


junto con la cláusula DROP COLUMN.

• La cláusula CASCADE CONSTRAINTS borra todas


las restricciones de integridad referenciales que
hacen referencia a las claves primaria y única
definidas en las columnas borradas.

• La cláusula CASCADE CONSTRAINTS también


borra todas las restricciones de varias columnas
definidas en las columnas borradas.
Restricciones en Cascada

Ejemplo:

SQL> ALTER TABLE test1


DROP (pk) CASCADE CONSTRAINTS;
Table altered.

SQL> ALTER TABLE test1


DROP (pk, fk, col1) CASCADE CONSTRAINTS;
Table altered.
Visualización de Restricciones

Consulte la tabla USER_CONSTRAINTS para visualizar


todas las definiciones y los nombres de restricciones.

SELECT constraint_name, constraint_type,


search_condition
FROM user_constraints
WHERE table_name = 'EMPLOYEES';
Visualización de las Columnas Asociadas a Restricciones

Visualice las columnas asociadas a los nombres


de restricción en la vista USER_CONS_COLUMNS.
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'EMPLOYEES';
Objetos de la Bases de Datos

Objeto Descripción

Tabla Unidad básica de almacenamiento; está


formada por filas y columnas.

Vista Representa lógicamente subjuegos de datos


de una o varias tablas.

Secuencia Generador de valor numérico.


Índice Mejora el rendimiento de algunas consultas.
Sinónimo Proporciona nombres alternativos a objetos.
¿Qué es una Secuencia?

Una secuencia:
• Genera automáticamente números únicos.
• Es un objeto compartible.
• Normalmente se utiliza para crear un valor de
clave primaria.
• Sustituye al código de aplicación.
• Acelera la eficacia del acceso a los valores de
secuencia al almacenarse en memoria caché.
Sintaxis de la Sentencia CREATE SEQUENCE

Defina una secuencia para generar números


secuenciales automáticamente:

CREATE SEQUENCE sequence


[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
Sintaxis de la Sentencia CREATE SEQUENCE

• MINVALUE es el valor mínimo que tendrá la secuencia

• MAXVALUE es el valor máximo que tendrá la secuencia (se puede


obviar y por defecto se le asignará 999999999999999999999999999)

• START WITH es el valor con el que empezará la secuencia

• INCREMENT BY es el valor con el que se incrementará la secuencia

• CACHE / NOCACHE el uso de CACHE permite indicar cuantos valores


queremos que sean guardados en memoria para un acceso más
rápido. No se recomienda su uso ya que podría generar inconsistencia.

• CYCLE indica que, cuando la secuencia llegue a máximo valor (valor


de "maxvalue") se reinicie, comenzando con el mínimo valor
("minvalue") nuevamente, es decir, la secuencia vuelve a utilizar los
números.
Creación de una Secuencia

• Cree una secuencia llamada DEPT_DEPTID_SEQ para


utilizarla para la clave primaria de la tabla
DEPARTMENTS.
• No utilice la opción CYCLE para valores de clave
primaria.

SQL> CREATE SEQUENCE dept_deptid_seq


INCREMENT BY 10
START WITH 280
MINVALUE 0
MAXVALUE 1000
NOCACHE
NOCYCLE;

Sequence created.
Confirmación de Secuencias

• Verifique los valores de secuencia en la tabla


USER_SEQUENCES del diccionario de datos.

SQL> SELECT sequence_name, min_value, max_value,


increment_by, last_number
FROM user_sequences;

• La columna LAST_NUMBER muestra el siguiente


número de secuencia disponible si se especifica
NOCACHE.
Pseudocolumnas NEXTVAL y CURRVAL

• NEXTVAL devuelve el siguiente valor de secuencia


disponible. Devuelve un valor único cada vez que se
hace referencia a ella, incluso para usuarios distintos.

• CURRVAL obtiene el valor de la secuencia actual.

• NEXTVAL se debe emitir para dicha secuencia antes


de que CURRVAL contenga un valor.
Reglas para el Uso de NEXTVAL y CURRVAL

Puede utilizar NEXTVAL y CURRVAL en los siguientes contextos:


• Sentencias SELECT que no contengan subconsultas
• Sentencias SELECT que formen parte de una sentencia INSERT
• La cláusula VALUES de una sentencia INSERT
• La cláusula SET de una sentencia UPDATE

No puede utilizar NEXTVAL y CURRVAL en los siguientes contextos:


• Una sentencia SELECT con la palabra clave DISTINCT
• Una sentencia SELECT con cláusulas GROUP BY, HAVING u ORDER BY
• Una subconsulta en una sentencia SELECT, DELETE o UPDATE
• La expresión DEFAULT en una sentencia CREATE TABLE o ALTER TABLE
Uso de una Secuencia

• Inserte un nuevo departamento llamado


“Support” en el identificador de ubicación 2500.

SQL> INSERT INTO departments(department_id,


department_name, location_id)
VALUES (dept_deptid_seq.NEXTVAL,
'Support', 2500);
1 row created.

• Visualice el valor actual para la secuencia


SEQ_DEPTID.

SQL> SELECT seq_deptid.CURRVAL


FROM dual;
Uso de una Secuencia

• El almacenamiento en memoria caché de valores de


secuencia proporciona un acceso más rápido a dichos
valores.

• Los intervalos en los valores de secuencia se pueden


producir cuando:
– Se realiza un rollback.
– El sistema falla.
– Se está utilizando una secuencia en otra tabla.

• Si la secuencia se creó con NOCACHE, visualice el siguiente


valor disponible, consultando la tabla USER_SEQUENCES.
Modificación de una Secuencia

Cambie el valor de aumento, el valor máximo, el


valor mínimo, la opción de ciclo o la opción de
caché.

SQL> ALTER SEQUENCE dept_deptid_seq


INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;

Sequence altered.
Instrucciones para la Modificación de una Secuencia

• Debe ser el propietario o tener el privilegio


ALTER para la secuencia.
• Sólo se ven afectados los números de secuencia
futuros.
• Se debe borrar y volver a crear
la secuencia para reiniciarla en un número
diferente.
• Se realiza alguna validación.
Eliminación de una Secuencia

• Elimine una secuencia del diccionario de datos


utilizando la sentencia DROP SEQUENCE.
• Una vez que se ha eliminado, ya no se puede
hacer referencia a la secuencia.

SQL> DROP SEQUENCE dept_deptid_seq;

Sequence dropped.
Objetos de la Bases de Datos

Objeto Descripción

Tabla Unidad básica de almacenamiento; está


formada por filas y columnas.

Vista Representa lógicamente subjuegos de datos


de una o varias tablas.

Secuencia Generador de valor numérico.


Índice Mejora el rendimiento de algunas consultas.
Sinónimo Proporciona nombres alternativos a objetos.
¿Qué es un Índice?

Un índice:
• Es un objeto de esquema.
• Oracle Server lo utiliza para acelerar la
recuperación de filas utilizando un puntero.
• Puede reducir la E/S de disco mediante un
método de ruta de acceso rápido para
encontrar datos.
• Es independiente de su tabla indexada.
• Oracle Server lo utiliza y mantiene
automáticamente.
¿Cómo Se Crean los Índices?

• Automáticamente: Un índice único se crea automáticamente


al definir una restricción UNIQUE o PRIMARY KEY en una
definición de tabla.

• Manualmente: Los usuarios pueden crear índices no únicos


en columnas para acelerar el acceso a las filas.
Creación de un Índice

• Crear un índice en una o varias columnas.

CREATE INDEX index


ON table (column[, column]...);

• Mejorar la velocidad de acceso de consulta a la


columna LAST_NAME de la tabla EMPLOYEES.

CREATE INDEX emp_last_name_idx


ON employees(last_name);
Index created.
Manejo de Índices

Se recomienda crear un índice si:


• Una columna contiene un amplio rango de valores.
• Una columna contiene un gran número de valores
nulos.
• Una o más columnas se utilizan juntas frecuentemente
en una cláusula WHERE o en una condición de unión.
• La tabla es grande y se espera que la mayoría de las
consultas recuperen menos del 2-4 por ciento de las
filas.
Manejo de Índices

No es recomendable crear un índice si:


• La tabla es pequeña y no se proyecta gran crecimiento.
• Las columnas no se suelen utilizar como condición en la
consulta.
• Si las consulas hacia la tabla retornarán más del 50% del
contenido de la tabla.
Confirmación de Índices

• La vista USER_INDEXES del diccionario de datos


contiene el nombre del índice y su unicidad.
• La vista USER_IND_COLUMNS contiene el nombre
del índice, el nombre de la tabla y el nombre de la
columna.

SQL> SELECT ic.index_name, ic.column_name,


ic.column_position col_pos,ix.uniqueness
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = 'EMPLOYEES';
Índices Basados en Funciones

• Un índice basado en función es un índice basado en


expresiones.
• La expresión de índice se crea desde columnas de tabla,
constantes, funciones SQL y funciones definidas por el
usuario.

SQL> CREATE INDEX upper_dept_name_idx


ON departments(UPPER(department_name));

Index created.

SQL> SELECT * FROM departments


WHERE UPPER(department_name) = 'SALES';
Eliminación de un Índice

• Eliminar un índice de usuario utilizando el comando DROP


INDEX.

DROP INDEX index;

• Eliminar el índice UPPER_LAST_NAME_IDX del diccionario de


datos.
DROP INDEX upper_dept_name_idx;
Index dropped.

• Para borrar un índice, debe ser el propietario del mismo o tener


el privilegio DROP ANY INDEX.
Objetos de la Bases de Datos

Objeto Descripción

Tabla Unidad básica de almacenamiento; está


formada por filas y columnas.

Vista Representa lógicamente subconjuntos de


datos de una o varias tablas.

Secuencia Generador de valor numérico.


Índice Indexa el contenido de columnas.
Sinónimo Proporciona acceso alternativos a objetos.
Sinónimos

Simplificar el acceso a los objetos mediante la creación de


sinónimos (un objeto con otro nombre). Con los
sinónimos, puede:

• Facilitar la referencia a una tabla propiedad de otro usuario


• Reducir nombres largos de objeto.

CREATE [PUBLIC] SYNONYM synonym


FOR object;
Creación y Eliminación de Sinónimos

• Crear un sinónimo para la tabla DEPARTMENTS.

CREATE SYNONYM dept


FOR departments;
Synonym Created.

• Borrar un sinónimo.
DROP SYNONYM dept;
Synonym dropped.
Modelo de Datos a Utilizar en Clase
usuario: sys as sysdba
password: cibertec

shutdown immediate;------------------>
startup
startup nomount;
select * from dba_data_files;
show parameter name
show parameter control
alter database mount;
select *from v$instance;
select host_name, instance_name, status from v$instance; -------->
select name from v$datafile;
alter database open; ----------->abrir base de datos
create pfile from spfile; --------> crear archivo init

Você também pode gostar