Вы находитесь на странице: 1из 63

Capitulo 1

Modelado de Bases de Datos Relacionales

Objetos definidos en Oracle


Tablas y Columnas (TABLE, COLUMN): Mecanismo de almacenamiento en BD relacionales. Las columnas tienen su tipo de dato asociado.
Vistas (VIEW): No se almacenan sus datos, sino su definicin.
Restricciones (CONSTRAINT ) de tablas y columnas.
Usuarios (USER): Que son los propietarios de los distintos objetos.
ndices (INDEX): Estructuras para que permite localizar rpidamente una fila particular de una tabla. Utiliza el ROWID, un identificador que Oracle
asigna a cada fila y que indica el lugar exacto de dicha fila.
Secuencias (SEQUENCE): Es un mecanismo para obtener una lista consecutiva de nmeros exclusivos, para simplificar las tareas de programacin.
Pueden ser cclicas (o no) y tener un incremento cualquiera (1 es lo normal).
Procedimientos y Funciones (PROCEDURE, FUNCTION): Sentencias escritas en un lenguaje procedural (como PL/SQL, java...) y que pueden utilizar
las aplicaciones. Proporcionan mecanismos de seguridad, ya que puede evitarse que los usuarios accedan directamente a ciertas tablas.
Paquetes (PACKAGE): Grupos de procedimientos, funciones y/o variables.

Disparadores (TRIGGER): Procedimientos que se ejecutan cuando ocurre algn evento (INSERT, UPDATE o DELETE).
Sinnimos (SYNONYM):Simplifican el uso de nombres largos (propietario.tabla).
Roles (ROLE): Los roles son conjuntos de privilegios que pueden concederse de golpe a un usuario. Los Privilegios pueden ser de Objetos(para
INSERT, SELECT, UPDATE, DELETE, EXECUTE ...) o del Sistema(para crear tablas, vistas...).

Definicin de tablas
Definicin_relacin_bsica ::= CREATE TABLE nom_relacin (elemento_relacin1, elemento_relacin2, )
elemento_relacin ::= definicin_atributo | restriccin_relacin
definicin_atributo::= nom_atributo tipo_datos [DEFAULT (expresin)]
[restriccin_atributo1 restriccin_atributo2]
tipo_datos::= CHAR (longitud) | VARCHAR2 (longitud) | NUMBER [(precisin[, escala])] | DATE
restriccin_atributo ::= [CONSTRAINT nom_restriccin] {[NOT] NULL | UNIQUE | PRIMARY KEY | REFERENCES
nom_relacin* [(nom_atributo*)] [ON DELETE {CASCADE | SET NULL}] | CHECK (condicin)}
[cundo_comprobar]
restriccin_relacin::= [CONSTRAINT nom_restriccin] { UNIQUE (nom_atributo1, nom_atributo2, ) |
PRIMARY KEY (nom_atributo1, nom_atributo2, ) | FOREIGN KEY (nom_atributo1, nom_atributo2, )
REFERENCES nom_relacin [(nom_atributo1, nom_atributo2, )] [ON DELETE {CASCADE | SET NULL} | CHECK
(condicin)} [cundo_comprobar]
cundo_comprobar::= [NOT] DEFERRABLE [INITIALLY {IMMEDIATE | DEFERRED}]

CHAR(n)

Cadena de caracteres de longitud fija, tiene un tamao n bytes. Si no se especifica n la ORACLE le da un tamao de 255 bytes. El tamao
mximo es 2000 bytes y el mnimo 1 byte. El tamao mximo en PL/SQL es 32767 bytes y el mnimo 1 byte. CHARACTER es sinnimo de
CHAR.

VARCHAR2(n)

Cadena de caracteres de longitud variable, tiene un tamao mximo de n bytes. Es obligatorio especificar el tamao. El tamao mximo es
4000 bytes y el mnimo 1 byte. El tamao mximo en PL/SQL es 32767 bytes y el mnimo 1 byte. STRING y VARCHAR son sinnimos de
VARCHAR2.

NUMBER(p,s)

Nmero de p dgitos de los cuales s son decimales. No es obligatorio especificar el tamao. El tamao de p va de 1 a 38 y el s desde -84 a
127.
El tamao en PL/SQL 1E-130 .. 10E125. Sinnimos: nmeros de coma fija: DEC,DECIMAL,NUMERIC enteros: INTEGER (sinnimo de
NUMBER(38)), INT, SMALLINT coma flotante: DOUBLE PRECISION FLOAT REAL.

DATE

Fecha vlida. Desde el 1 de enero del 4712 AC hasta el 31 de diciembre del 9999 DC. (en Oracle7 = 4712 DC)

LONG

Cadena de caracteres de longitud variable. Es una versin ms grande de VARCHAR2. El tamao mximo en BD es 2 Gigabytes.

CLOB

Cadena de caracteres de longitud variable. Es una versin ms grande de VARCHAR2. El tamao mximo en BD es 4 Gigabytes.
Es recomendable usar CLOB o BLOB en lugar de LONG.

BLOB

Objeto binario de longitud variable. Es una versin ms grande de RAW. El tamao mximo en BD es 4 Gigabytes.

BFILE

Apuntador a un archivo en disco. El tamao mximo en BD es 4 Gigabytes

TIMESTAMP (f)

Es un fecha que contiene que contiene fracciones de segundo. Con f se define el nmero de dgitos en la fraccin de segundo. As, f puede
valer desde 0 hasta 9, el valor por defecto es 6.

INTERVAL YEAR (y) TO MONTH

Periodo de tiempo definido en aos y meses donde y es el nmero de dgitos del ao. Puede valer de 0 a 9. (por defecto es 2)

INTERVAL DAY (d) TO SECOND (f)

Periodo de tiempo definido en das, horas, minutos y segundos. d es el mximo numero de dgitos en el da, f es el mximo numero de
dgitos en el campo de segundos. d va de 0 a 9. (por defecto es 2), f va de 0 a 9. (por defecto es 6)

ROWID

Cadena hexadecimal que representa de forma nica una fila en una tabla (pero no nica en cualquier tabla).

UROWID

Cadena hexadecimal que representa de forma nica una fila ORDENADA en una tabla (pero no nica en cualquier tabla).

RAW(n)

Objeto binario de longitud variable. Es obligatorio especificar el tamao. El tamao mximo es 2000 bytes y el mnimo 1 byte. El tamao
mximo en PL/SQL es 32767 bytes y el mnimo 1 byte.

LONG RAW

Objeto binario de longitud variable. El tamao mximo es 2 Gigabytes. El tamao mximo en PL/SQL es 32767 bytes y el mnimo 1 byte.

Restricciones de Integridad
La integridad de los datos es la propiedad que asegura que informacin dada es correcta, al
cumplir ciertas aserciones.
Las restricciones de integridad son propiedades de la base de datos que se deben satisfacer
en cualquier momento.
Entre los diferentes tipos de restricciones dentro de un SABD tenemos:

Tratamiento de valores nulos.


Valores por defecto.
Integridad de clave primaria.
Claves alternativas.
Integridad referencial.
Restricciones de integridad estticas (reglas del negocio).

Tipos de restricciones
Existen dos tipos de restricciones:
Estticas: limitan los estados permitidos de la Base de Datos.
Dinmicas: restringen las posibles transiciones de estados de la base datos.
Para incorporar el tratamiento de las restricciones de integridad en el sistema se
pueden realizar:
Aadiendo cdigo adicional para verificar y asegurar que se cumplen las
restricciones.
Declarando las restricciones como parte del esquema de la base de datos.

Restricciones en un SABD
Restriccin de Dominio: slo los objetos especificados pueden servir como dominio de
un atributo.
Restriccin de Unicidad: un objeto podr ser unvocamente identificable usando un
determinado atributo.
Restriccin de Integridad de Entidad: ningn componente de clave primaria de una
relacin puede aceptar nulos. Nulo se referir a informacin faltante. El concepto de
unicidad es parte de la definicin de clave primaria en s.
Restriccin de Integridad Referencial: la base de datos no puede contener valores de
clave ajena sin concordancia. La posibilidad de aceptacin de valores nulos deber ser
evaluada por el analista, al igual de las opciones a seguir (restriccin, propagacin o
anulacin)

Procesamiento de restricciones
Todas las definiciones de restricciones (tratamiento de nulos, claves primarias, ajenas
etc.) ya sean a nivel de columna o a nivel de tabla, tienen un nombre.
Como esta asignacin de nombre por parte del diseador es opcional, si no se le
asigna nombre en el momento de la definicin, el SABD le asigna uno interno. En
cualquier caso, es conveniente declarar una restriccin con su nombre porque as es
posible referenciarla posteriormente en sentencias ALTER TABLE, para activarla o
desactivarla.

Tratamiento de valores nulos


Esta restriccin especifica si una columna puede contener o no valores nulos. Por
defecto se asume que la columna admite valores nulos.
atributo tipo [CONSTRAINT nombre] NOT NULL | NULL
Ejemplo:
Dni integer CONSTRAINT nn_dni NOT NULL

Tratamiento de los valores por defecto


Esta restriccin se utiliza para especificar valores que sern asignados a una columna,
cuando en sta no se introduzca ningn valor. El valor especificado debe ser del
mismo tipo de dato que la columna.
Las restricciones se especifican como parte de la definicin de la columna.
Para el tratamiento de informacin faltante, se le puede especificar un NULL como
valor por defecto siempre que la columna permita nulos.
En la expresin no se puede hacer referencia a otras columnas.

atributo tipo DEFAULT expresin


Ejemplo:

Num integer DEFAULT 1

Tratamiento de clave primaria


En este caso se designa una columna o combinacin de columnas como clave primaria de la tabla.
Se puede definir la restriccin a nivel de columna (en el mbito de definicin de una columna) o a nivel de tabla (si se definen despus de introducir
todas las columnas, en una seccin genrica final de definicin de restricciones).
A nivel de columna: Se define dentro de una restriccin (constraint) asociada a la misma. La definicin de una clave primaria lleva implcita la
restriccin de valores no nulos. La misma columna puede ser definida como primaria y fornea.
A nivel de tabla: Se utiliza para definir claves primarias compuestas. Se declara antes o despus de haber introducido las columnas de la tabla
en cuestin.
Formato:
A nivel columna:
atributo tipo [CONSTRAINT nombre] PRIMARY KEY

A nivel tabla:
[CONSTRAINT nombre] PRIMARY KEY(colum1,.. colum2 ..)
Ejemplo:
A nivel columna:
Dni integer [CONSTRAINT pk_dni] PRIMARY KEY
A nivel tabla:
CONSTRAINT pk_nomapelli PRIMARY KEY(nom, apelli)

Tratamiento de claves alternativas


Para las claves alternativas, se designa una columna o combinacin de columnas
como clave nica alternativa a la clave seleccionada como primaria (sin duplicados).
Existen dos posibilidades para definir una clave alternativa:
asociada a la columna:
atributo tipo [CONSTRAINT nombre] UNIQUE

Ejemplo:
nombre char CONSTRAINT unq_nombre UNIQUE

asociada a la tabla
[CONSTRAINT nombre] UNIQUE (columna1, columna2 ...)

Ejemplo:
CONSTRAINT unq_nomapell UNIQUE(nombre, apellidos)

Tratamiento de claves forneas


La integridad referencial de claves forneas a nivel columna se declara mediante la palabra REFERENCES. Si no se especifica la columna o columnas, se asume por defecto
que estamos referenciando a su clave primaria.
Acciones a realizar:
Restringir (restrict, no action),
Propagar (cascade),
Poner a nulos (set null),
Poner valor por omisin (set default) (no implementado en Oracle)
Se especifica mediante la clusula on [delete | update] [restrict | no action | cascade | set null | set default]. Por omisin la
operacin se asume restringida.

atributo tipo [CONSTRAINT nombre] REFERENCES tabla[(columna)] [ON DELETE CASCADE]


Ejemplo:

Dep char(10) CONSTRAINT fk_dep_nom REFERENCES departamento(nom) ON DELETE CASCADE


Si las restricciones se definen a nivel de tabla se especifica la columna o composicin de columnas que forman parte de la clave ajena despus de la palabra clave FOREIGN
KEY y la columna o columnas a la que se hace referencia despus de la palabra clave REFERENCES.

[CONSTRAINT nombre] FOREIGN KEY (columna1, columna2, ...) REFERENCES n_tabla[(columna1,


columna2,...)] [ON DELETE CASCADE]
Ejemplo:

CONSTRAINT fk_dep_nom FOREIGN KEY(dep) REFERENCES departamento(nom) ON UPDATE SET NULL

Tratamiento de las restricciones de


integridad estticas

Las restricciones de integridad estticas sern aquellas frmulas bien formadas de primer orden construidas con
atributos de la tabla como trminos bsicos, que debe satisfacerse en todos los estados vlidos para las tuplas de una
relacin.

Estas restricciones de integridad estn especificadas mediante una restriccin de tipo CHECK asociada a una columna o
una tabla.
La implementacin de esta restriccin en una columna sera:
atributo tipo [CONSTRAINT nombre] CHECK (condicin)
Ejemplo:
Saldo integer CONSTRAINT chk_saldo CHECK (saldo != 2000.00)
La condicin puede hacer referencia a cualquier columna de la tabla.
No se pueden introducir en estas condiciones atributos de otras tablas. En ese caso, slo queda el recurso de programar
explcitamente la restriccin de integridad, lo que habitualmente se hace generando disparadores (triggers) de la base
de datos.

La implementacin a nivel de tabla sera equivalente.

Modificacin de restricciones
La sentencia ALTER TABLE sirve para aadir o redefinir una columna, aadir o borrar una restriccin de
integridad y para activar o desactivar cualquier restriccin de integridad o disparo.
ALTER TABLE [esquema.]nom_tabla

[ADD nom_col + def_de_restriccion_col]


[MODIFY nom_col tipo + def_de_restriccion_col]
[ADD + def_restriccion_tabla]
[DROP PRIMARY KEY | UNIQUE | CONSTRAINT nombre [CASCADE]]
[ENABLE PRIMARY KEY | UNIQUE | CONSTRAINT nombre | ALL TRIGGERS]
[DISABLE PRIMARY KEY | UNIQUE | CONSTRAINT nombre [CASCADE]]

en donde:
def_de_restriccion_col y def_restriccion_tabla se refieren a las declaraciones de restricciones que se pueden realizar en el mbito de una
columna o de la tabla en su conjunto respectivamente.
Si deshabilitamos una restriccin tenemos la posibilidad de deshabilitar en cascada todas las restricciones que dependan de ella a travs de la
clusula cascade.
Si habilitamos una restriccin de integridad referencial, la restriccin de clave primaria o nica asociada debe ser habilitada con anterioridad (si
no lo estaba ya).
Las opciones asociadas a UNIQUE identifican la clave nica implicada en la modificacin indicndola entre parntesis.
La clusula ENABLE ALL TRIGGERS permite activar disparos que puedan haber sido desactivados con la orden ALTER TRIGGER opcin DISABLE
proporcionada por ORACLE.

Restricciones inmediatas y diferidas


No siempre se desea que se verifiquen las restricciones inmediatamente, sino hasta que una
transaccin comprometa

La sentencia SET CONSTRAINTS es usada para establecer el modo de la restriccin especificada para la
transaccin actual:
SET CONSTRAINTS
{ALL | nombre_restriccion[,...]}
{DEFERRED | IMMEDIATE}

Las restricciones pueden ser definidas como INITIALLY IMMEDIATE o INITIALLY DEFERRED, indicando el
modo de restriccin que se asume al iniciar la transaccin
En el ltimo caso, tambin es posible especificar cuando un modo puede ser cambiado
subsecuentemente usando el calificador [NOT] DEFERRABLE

El modo por omisin es INITIALLY IMMEDIATE

Ejemplo

CREATE TABLE Asignatura


( codigo
nombre
cre_teo
cre_pra
Departamento_codigo

CHAR (5) NOT NULL ,


VARCHAR2 (100) NOT NULL ,
NUMBER (3,1) NOT NULL ,
NUMBER (3,1) NOT NULL ,
CHAR (5) NOT NULL

CHAR (5)
VARCHAR2
VARCHAR2
CHAR (3)
CHAR (5)

NOT NULL ,
(100) NOT NULL ,
(50) ,
NOT NULL ,
NOT NULL

) ;

) ;

ALTER TABLE Asignatura ADD CONSTRAINT Asignatura_PK PRIMARY


KEY ( codigo ) ;
ALTER TABLE Asignatura ADD CONSTRAINT Asignatura_UN UNIQUE (
nombre ) ;
ALTER TABLE Asignatura ADD CONSTRAINT Asignatura_CK_teo CHECK
(cre_teo > 0) ;
ALTER TABLE Asignatura ADD CONSTRAINT Asignatura_CK_pra CHECK
(cre_pra > 0) ;
CREATE TABLE
( codigo
nombre
director
telefono

CREATE TABLE Profesor


( codigo
nombre
direccion
categoria
Departamento_codigo

Departamento
CHAR (5) NOT NULL ,
VARCHAR2 (100) NOT NULL ,
VARCHAR2 (50) ,
CHAR (11)

) ;
ALTER TABLE Departamento ADD CONSTRAINT Departamento_PK
PRIMARY KEY ( codigo ) ;

ALTER TABLE Profesor ADD CONSTRAINT Profesor_PK PRIMARY KEY ( cdigo,


Departamento_codigo );
ALTER TABLE Profesor ADD CONSTRAINT Profesor_CK_cat CHECK
(categoria=TEU OR categora =CU OR categoria =CEU) ;
CREATE TABLE docencia
( Asignatura_codigo
Profesor_codigo
creditos
Profesor_Departamento_codigo

CHAR (5) NOT NULL ,


CHAR (5) NOT NULL ,
NUMBER (3,1) NOT NULL ,
CHAR (5)

) ;
ALTER TABLE docencia ADD CONSTRAINT docencia_PK PRIMARY KEY (
Asignatura_codigo, Profesor_codigo, Profesor_Departamento_codigo ) ;

ALTER TABLE Asignatura ADD CONSTRAINT Asignatura_Departamento_FK


FOREIGN KEY (Departamento_codigo ) REFERENCES Departamento ( codigo )
ON DELETE CASCADE ;
ALTER TABLE docencia ADD CONSTRAINT docencia_Asignatura_FK FOREIGN KEY
( Asignatura_codigo ) REFERENCES Asignatura ( codigo ) ;
ALTER TABLE docencia ADD CONSTRAINT docencia_Profesor_FK FOREIGN KEY (
Profesor_codigo, Profesor_Departamento_codigo ) REFERENCES Profesor (
codigo, Departamento_codigo ) ;
ALTER TABLE Profesor ADD CONSTRAINT Profesor_Departamento_FK FOREIGN
KEY (Departamento_codigo ) REFERENCES Departamento ( codigo ) ;

Diccionario de Datos de ORACLE


Es un conjunto de tablas de slo lectura con los metadatos (descripcin del esquema).
Informacin: Nombres de usuarios, seguridad (accesos permitidos, privilegios, roles...), informacin
sobre los objetos, restricciones de integridad, diversas estadsticas. En general, mantienen informacin
sobre las llamadas ESTRUCTURAS INTERNAS de la BD.
Las tablas del diccionario son propiedad del usuario SYS. El usuario SYSTEM es propietario de diversas
vistas sobre esas tablas, las cuales pueden ser utilizadas por el resto de los usuarios de la BD.
Slo ORACLE debe escribir y leer en las tablas del diccionario:
Oracle accede cada vez que se ejecuta una sentencia DDL .
Los usuarios podrn acceder a algunas vistas : En general, no se deben modificar estas vistas.
Prefijos en las Vistas del Diccionario de Datos:
USER_ Objetos que pertenecen al propio usuario.
ALL_ Todos los objetos accesibles por el usuario.
DBA_ Todos los objetos existentes (slo para los DBA).

Tipos de vistas del catlogo del sistema


Algunas vistas con el prefijo USER_ (pueden verse en ALL_VIEWS) :
USER_OBJECTS: Lista de todos los objetos pertenecientes al usuario (tablas, vistas, paquetes, ndices, triggers, sinnimos...).
USER_TABLES: Lista de todas las tablas del usuario.

USER_VIEWS : Vistas del usuario.


USER_USERS : Diversos datos sobre el usuario.
USER_UPDATABLE_COLUMNS : Columnas que pueden ser modificadas.
USER_JOBS : Tareas pertenecientes al usuario.

USER_TRIGGERS: Disparadores (triggers) del usuario.


USER_SYNONYMS: Sinnimos pertenecientes al usuario.
USER_INDEXES: ndices pertenecientes al usuario.
USER_CONSTRAINTS :Restricciones pertenecientes al usuario.

USER_TAB_PRIVS: Permisos sobre objetos con el usuario involucrado. Si pone _COL_en vez de _TAB_se refiere a las columnas. Se puede distinguir entre:
USER_TAB_PRIVS_MADE: Permisos sobre los objetos del usuario.
USER_TAB_PRIVS_RECD: Permisos recibidos por el usuario.

USER_TAB_COLUMNS :Descripciones de las columnas del usuario.


USER_TAB_COMMENTS y USER_COL_COMMENTS: Comentarios sobre las tablas y columnas del usuario, si se han insertado con el comando COMMENT:
COMMENT ON [TABLE|COLUMN] <Tabla>[.<Columna> ] IS '<Texto>';

Restricciones en Oracle
Las almacena todas en la vista del Diccionario de Datos:
USER_CONSTRAINTS
CONSTRAINT_NAME: Nombre de la restriccin. Si no se le ha dado uno, Oracle le asigna uno con un
cdigo.
TABLE_NAME: Nombre de la tabla con dicha restriccin.
CONSTRAINT_TYPE: Es un carcter
P: PRIMARY KEY
U: UNIQUE
R:restriccin de INTEGRIDAD REFERENCIAL
C: restriccin de tipo CHECK (o NOT NULL) con la condicin almacenada en el atributo SEARCH_CONDITION
STATUS: Estado de la restriccin (ENABLE o DISABLE).

USER_CONS_COLUMNS

Tipos Definidos por el usuario


Creacin de un DOMINIO
CREATE DOMAIN Nombre_dominio AS tipo_primitivo [DEFAULT
valor][CHECK (condicin)]
Eliminacin de un DOMINIO
DROP DOMAIN Nombre_domino
Ejemplo
CREATE DOMAIN genero AS CHAR (1) CHECK (VALUE IN (F,
M));
Generalmente es til slo para la modificacin sencilla de la especificacin de tipos.
El valor puede ser establecido por defecto mediante DEFAULT

Consultas al catlogo del sistema


Tablas que hay definidas:
SELECT * FROM {USER_TABLES| ALL_TABLES};
Restricciones que hay definidas:
SELECT * FROM {USER_CONSTRAINTS | ALL_CONSTRAINTS};

Atributos de las tablas:


DESCRIBE tabla;
Ver errores de compilacin de disparadores:
SHOW ERRORS nombre;

Algunas Sentencias SQL del DBA


El comando CREATE para crear objetos puede sustituirse por DROP y ALTER para borrar y modificar el objeto en
cuestin:
CREATE USER: Crea un usuario, una cuenta para acceder a la BD.
CREATE ROLE: Crea un conjunto de privilegios con un nombre.
CREATE SYNONYM: Crea un sinnimo. Puede establecerse como sinnimo pblico (sinnimo accesible para todos los
usuarios).
CREATE TABLESPACE: Crea un tablespace , espacio en la BD que puede contener objetos.
CREATE ROLLBACK SEGMENT: Crea un segmento de anulacin (rollback ), un objeto donde Oracle almacena los datos
para deshacer modificaciones.

GRANT: Otorga roles y permisos (o privilegios) del sistema o de objetos a usuarios. Los privilegios se retiran con el
comando REVOKE.
ANALYZE: Almacena o borra en el Diccionario de Datos estadsticas sobre el objeto que se especifique. Por ejemplo, para
una tabla el resultado se almacenar en USER_TABLES.
AUDIT: Realiza un seguimiento sobre las operaciones ejecutadas o sobre objetos accedidos (usuario, tipo de operacin,
objeto implicado, fecha y hora). Para detener la auditoria usar NOAUDIT. Los datos se guardan en tablas del diccionario
con el texto AUDIT_en su nombre, como DBA_AUDIT_OBJECT, DBA_AUDIT_TRAIL...

Vista
Se considera una relacin virtual resultado de la ejecucin de operaciones sobre una o ms
relaciones base.
No existe en la base de datos, sino que es producida al tiempo de la peticin.
Forma general
CREATE VIEW nombre_vista[(nombre_columna [, . . .])]
AS subconsulta
[WITH CHECK OPTION]

Si se especifica la lista de columnas, debe coincidir con las columnas devueltas por la
subconsulta. Si se omite, los nombres de las columnas toman los nombres devueltos por la
subconsulta.
En consultas, se trata la vista como una relacin base.

Definicin de Vista
La lista de columnas se debe especificar si existe ambigedad en los nombres de columnas
La subconsulta se conoce como la consulta de definicin de la vista
La opcin WITH CHECK OPTION asegura que si un rengln falla en satisfacer la clusula WHERE de la
consulta de definicin, esta no es agregada a la tabla base en casos de inserciones y actualizaciones
mediante la vista.
Eliminacin de vistas:
DROP VIEW nombre_vista
[RESTRICT | CASCADE]

Con CASCADE se eliminan todos los objetos dependientes relacionados (vistas definidas en la vista)

Con RESTRICT, si hay objetos que dependen de la existencia de la vista, se rechaza la eliminacin.

Ejemplos de la definicin de Vistas


Emp (NoEmp, NombEmp, Titulo, Ciudad)
Proyecto (NoProy, NombProy, Presupuesto, Ciudad)
Pago (Titulo, Salario)
Trabaja (NoEmp, NoProy, Resp, Dur)

Crear una vista proyecto-empleado que proporcione, para cada proyecto en cada
ciudad, el nmero de empleados que trabajan en el proyecto y la duracin total de
empleo.
CREATE VIEW proyecto-empleado (Nombre, Ciudad, Numero, Total)
AS SELECT
NombProy, Ciudad, COUNT(NoEmp), SUM(Dur)
FROM
Proyecto P, Trabaja T
WHERE
P.NoProy = W.NoProy
GROUP BY Ciudad, NombProy

Actualizacin de vistas
Una vista definida sobre una sola tabla es actualizable si los atributos de la vista contienen la
llave primaria o algn otro atributo como llave candidata (sin nulos)
Las vistas definidas sobre mltiples tablas usando reuniones generalmente no son
actualizables
Las vistas definidas usando funciones agregadas no son actualizables
Si una columna en una vista esta basada en una funcin de agregacin:
La columna debe aparecer solo en las clusulas SELECT y ORDER BY de las consultas que acceden a la
vista
La columna no debe ser usada en la clusula WHERE ni ser argumento de una funcin agregada en
cualquier consulta basada en la vista

Una vista agrupada nunca debe ser reunida con una tabla base o con una vista.

Disparadores (triggers)
Un disparador es un procedimiento que es invocado automticamente por el SABD en respuesta a
cambios en la base de datos.

Consta de tres partes:


El evento
El cambio en la base de datos que inicia la ejecucin del disparador

La condicin
Una prueba o una consulta que necesita ser verificada cuando un disparador es activado
Para las consultas, la condicin es verdad (TRUE) si las consulta regresa cualquier resultado

La Accin
El procedimiento que es ejecutado cuando el disparador es activado y la condicin es verdadera
Puede ser antes o despus de la activacin del disparador
Hace referencia al valor anterior y al nuevo valor de la tupla, limitado a uno o ms atributos
Una vez por cada tupla modificada o para todos los cambios

Disparadores (triggers)
Forma general:
definicin_disparador ::=
{CREATE | REPLACE} TRIGGER nom_disparador
{BEFORE |AFTER |INSTEAD OF} evento1 [OR evento2 [OR ]]
ON {nom_relacin | nom_vista}
[REFERENCING OLD AS nom_referencia [NEW AS nom_referencia]]
[FOR EACH ROW [WHEN (condicin)]]
bloque PL/SQL
evento ::= INSERT |DELETE |UPDATE [OF nom_atributo1, nom_atributo2, ]

Un disparador no puede ser llamado directamente; slo se activa por eventos en la base de datos
En el bloque PL/SQL no pueden incluirse sentencias de definicin de datos ni de control de transacciones (COMMIT, ROLLBACK, SAVEPOINT)
Si el disparador puede ser activado por ms de un tipo de evento, en el bloque PL/SQL se pueden usar los predicados lgicos INSERTING,
DELETING y UPDATING [nom_atributo] para programar distintas acciones en funcin del tipo de evento que ha activado el disparador
CREATE OR REPLACE TRIGGER ejemplo
BEFORE INSERT OR UPDATE OR DELETE ON tabla BEGIN
IF DELETING THEN
Acciones asociadas al borrado
ELSIF INSERTING THEN
Acciones asociadas a la insercin
ELSE
Acciones asociadas a la modificacin
END IF;
END ejemplo

Tablas mutantes
Una tabla mutante es una tabla que est siendo modificada por una operacin DELETE, INSERT o UPDATE, o una
tabla que se ver afectada por los efectos de un DELETE CASCADE debido a la integridad referencial. Las tablas
mutantes slo deben aparecen en disparadores con nivel de fila. Una tabla sobre la que se define un disparador
es una tabla mutante.
CREATE OR REPLACE TRIGGER chequear_salario
BEFORE INSERT OR UPDATE ON empleado
FOR EACH ROW
WHEN (new.trabajo<>presidente)
DECLARE
v_salariomin empleado.salario%TYPE;
v_salariomax empleado.salario%TYPE;
BEGIN
SELECT MAX(salario), MIN(salario) FROM empleado INTO v_salariomin, v_salariomax
FROM empleado WHERE trabajo=:new.trabajo;
IF :new.salario < v_salariomin OR :new.salario > v_salariomax THEN
RAISE_APPLICATION_ERROR(-20001, Sueldo fuera de rango);
END IF;
END chequear_salario;
/

Al ejecutar la orden

UPDATE empleado SET salario=1500


WHERE nombre_emp = Lopez;

Dar un error de tabla mutante ya que el disparador est intentando obtener informacin de la tabla sobre la que
est definido (tabla empleado) y que, por lo tanto, es mutante.

Tabla de restriccin
Una tabla de restriccin es la que el disparador puede tener necesidad de leer debido a una restriccin de integridad referencial.
Supongamos dos tablas, empleado y departamento, de forma que en la tabla empleado tenemos almacenado el nmero de
departamento, definido como clave ajena que referencia a la tabla departamento.
CREATE TRIGGER ejemplo
AFTER UPDATE ON nrodep OF departamento
FOR EACH ROW
BEGIN
UPDATE empleado
SET empleado.dep = :NEW.nrodep WHERE empleado.dep= :OLD.nrodep;
END ejemplo;
/
Al ejecutar:
UPDATE departamento
SET nrodep= 1 WHERE nrodep=7;
Dar un error de tabla mutante ya que estamos intentando modificar una columna correspondiente a una restriccin de
integridad.

Disparadores de sustitucin (INSTEAD OF)


Los disparadores de sustitucin (INSTEAD OF) slo pueden definirse sobre vistas en Oracle y se activan
en lugar de la orden DML que provoc el disparo. Los disparadores de sustitucin deben estar a nivel
de fila.
Ejemplo.
CREATE VIEW vista AS
SELECT edificio, sum(numero_asientos) FROM habitaciones
GROUP BY edificio;

Es ilegal hace una operacin de borrado directamente en la vista:


DELETE FROM vista WHERE edificio=edificio 7;

Sin embargo, se puede crear un disparador de sustitucin que efecte el borrado equivalente pero
sobre la tabla habitaciones.
CREATE TRIGGER borra_en_vista
INSTEAD OF DELETE ON vista
FOR EACH ROW
BEGIN
DELETE FROM habitaciones
WHERE edificio = :OLD.edificio;
END borra_en_vista;

Manejo de disparadores
Adems de la sentencia de creacin (definicin) de disparadores, el DDL de ORACLE proporciona las siguientes sentencias para la gestin de
los mismos:
DROP TRIGGER nom_disparador: elimina un disparador.
REPLACE TRIGGER nom_disparador: modifica su definicin.
ALTER TRIGGER nom_disparador COMPILE: recompila el disparador.
ALTER TRIGGER nom_disparador [ENABLE | DISABLE]
ALTER TABLE nom_relacin [{ENABLE | DISABLE} ALL TRIGGERS]: habilitan o deshabilitan el disparo de los disparadores.
Las tablas del diccionario del sistema: USER_TRIGGERS, ALL_TRIGGERS, DBA_TRIGGERS permiten consultar los disparadores que hay definidos.
Ver todos los disparadores definidos por un usuario
SELECT TRIGGER_NAME FROM USER_TRIGGERS

Ver el cuerpo de un disparador:


SELECT TRIGGER_BODY FROM USER_TRIGGERS

WHERE TRIGGER_NAME = nombre_disparador;

Ver la descripcin de un disparador:


SELECT DESCRIPTION FROM USER_TRIGGERS

WHERE TRIGGER_NAME = nombre_disparador;

Los problemas del disparador


Es especfico del fabricante del SABD (ahora es una parte del estndar SQL99)

Los disparadores pueden hacer al sistema difcil de entender:


Debe tenerse cuidado con el orden en que se ejecutan los disparadores
Puede haber disparadores recursivos o anidados
Pueden ser difciles de optimizar

Pero pueden ser muy poderosos:


Pueden ser usados para la replicacin de datos
Ayudan en la auditoria o estadsticas para la modificacin de tablas
Administracin del flujo de trabajo y forzar el cumplir las reglas del negocio
Son usados para crear bases de datos activas, de alto rendimiento

Seguridad
Proteccin de intentos maliciosos de robar o modificar datos.
A nivel de base de datos
Mecanismos de autentificacin y autorizacin para permitir, slo a usuarios especficos, requerir
datos.

A nivel de sistema operativo


Los super-usuarios del sistema operativo pueden hacer cualquier cosa que deseen a la base de
datos. Es necesario establecer un buen nivel de seguridad.

A nivel de red: se debe de usar encriptacin


Eavesdropping (escucha secreta). Lectura no autorizada de mensajes.
Masquerading (enmascaramiento). Pretender ser un usuario autorizado o enviar mensajes
supestamente de usuarios autorizados.

36

Seguridad
A nivel fsico
Acceso fsico a computadoras; destruccin de datos por intrusos. Es necesario usar
mtodos de resguardo por llaves.
Tambin es necesario proteger a las computadoras de inundaciones, incendios, etc.

A nivel humano
Los usuarios pueden ser grabados para asegurar que usuarios autorizados no den
acceso a intrusos.
Los usuarios deben de ser entrenados en la seleccin y privacidad de la contrasea.

37

Seguridad a nivel fsico


- Proteccin de equipo de inundaciones, falla de poder, etc.
- Proteccin de discos de robos, borrados, daos fsicos, etc.
- Proteccin de los cables de red y terminales con dispositivos electrnicos no
intrusivos para interceptores de comunicaciones, etc.
Soluciones:
-Hardware replicado:
- Discos espejo, lneas duales, etc.
- Mltiples rutas de acceso entre cada par de dispositivos

- Seguridad fsica: candados, polticas, etc.


- Tcnicas de software para detectar brechas fsicas de seguridad.

38

Seguridad a nivel humano


- Proteccin sobre contraseas robadas, sabotajes, etc.
- Primordialmente es un problema de administracin:
- Cambio frecuentes de contraseas
- Grabar todos los intentos invlidos de acceso
- Auditorias de datos
- Practicas cuidadosas de contratacin

39

Seguridad a nivel de sistema operativo


- Proteccin de entradas de usuarios (logins) invlidos.
- Proteccin de acceso a nivel de archivo.
- Proteccin de uso inapropiado de la autoridad de
superusuario
- Proteccin de uso inapropiado de instrucciones de mquina
privilegiadas.

40

Seguridad a nivel de red


- Cada sitio debe asegurar que se comunica con sitios seguros
(sin intrusos)
- Las ligas deben se estar protegidas de robos o modificacin de
mensajes.
Mecanismos:
- Identificacin del protocolo (basado en contrasea)
- Criptografa

41

Seguridad a nivel de base de datos


Asume que se han cumplido todas las anteriores.
- Cada usuario debe tener autorizacin para leer slo parte de los datos
y escribir slo parte de los datos.
- La autorizacin del usuario corresponde a archivos o relaciones
completas, pero tambin puede corresponder slo a partes de archivos
o relaciones
- La autonoma local sugiere control de la autorizacin a nivel de sitio
en una base de datos distribuida
- El control global sugiere control centralizado.
42

Autorizacin
La autorizacin forma parte de la base de datos.
Autorizacin de lectura.- permite la lectura, pero no la modificacin de
los datos.
Autorizacin de insercin.- permite la insercin de nuevos datos, pero
no la modificacin de los existentes.
Autorizacin de actualizacin.- permite la modificacin, pero no la
eliminacin de datos.
Autorizacin de eliminacin.- permite la eliminacin de datos

43

Autorizacin
Formas de autorizacin para modificar el esquema de la bases de datos:
Autorizacin de ndice.- permite la creacin y eliminacin de ndices.
Autorizacin de recursos.- permite la creacin de nuevas relaciones.
Autorizacin de alteracin.- permite la adicin o eliminacin de
atributos en una relacin.
Autorizacin de eliminacin.- permite la eliminacin de relaciones.

44

Autorizacin y vistas
Los usuarios pueden ceder autorizacin en vistas, sin que sea dada la
autorizacin sobre las relaciones usadas en la definicin de la vista.
La habilidad de las vistas para esconder datos sirve para simplificar el uso
del sistema y para mejorar la seguridad permitiendo a los usuarios
acceder slo a los datos que necesitan para su trabajo.
Una combinacin de seguridad a nivel de relaciones y a nivel de vistas
puede usarse para limitar el acceso a los usuarios precisamente en los
datos que necesita.

45

Control de acceso
Un identificador de autorizacin es el mtodo usado por un SABD para
establecer una identidad del usuario. Usualmente tiene asociada una
contrasea
Es utilizado para determinar cuales objetos pueden ser referenciados por
el usuario y que operaciones pueden ser ejecutadas sobre esos objetos
Cada objeto creado mediante sentencias SQL tiene un propietario, como
se especifica en la clusula AUTORIZATION del esquema al cual pertenece
el objeto
El propietario es la nica persona que tiene conocimiento de esto

Conceder privilegios
Un propietario de una tabla puede ceder los privilegios a otro usuario mediante la
clausula GRANT
Forma general:
GRANT {lista_privilegios | ALL PRIVILEGES}
ON

nombre_objeto

TO {lista_id_aut | PUBLIC}
[WITH GRANT OPTION]

lista_id_aut consiste de uno o ms de los privilegios vistos, separados por comas


nombre_objeto puede ser una tabla base, una vista, un dominio, un conjunto de
caracteres, una comparacin o una traduccin
ALL PRIVILEGES cede todos los privilegios a un usuario
PUBLIC habilita a todos los usuarios (presentes y futuros) los privilegios mencionados
WITH GRANT OPTION permite que un usuario ceda los privilegios obtenidos a otro
usario

Privilegios

Las acciones que puede permitir un usuario hacia una tabla base o una vista son:

Select: permite el acceso de lectura a la relacin, o la capacidad de consultar usando una vista
grant select on branch to user1, user2, user3

Insert.- habilita la insercin de tuplas


Update.- habilita la actualizacin empleando la sentencia update de SQL
Delete.- habilita eliminar tuplas
References.- habilita declarar llaves forneas cuando se crean relaciones.
Usage.- en el SQL-92, autoriza a un usuario a usar un dominio especfico.
All privileges.- forma corta de especificar todos los privilegios.

Se pueden restringir los INSERT/UPDATE/REFERENCES a las columnas con nombre


Para crear una vista, el usuario debe tener los privilegios de SELECT en todas las tablas
que conforman la vista y el privilegio REFERENCES en las columnas nombradas

Ejemplo de privilegios cedidos


Dar todos los privilegios de la tabla Staff al administrador:
GRANT ALL PRIVILEGES
ON Staff
TO manager WITH GRANT OPTION;

Dar slo los privilegios de seleccin y actualizacin en la columna salary:


GRANT SELECT, UPDATE(salary)
ON Staff
TO manager;

Dar el privilegios de seleccin a los usuarios personal y contabilidad:


GRANT SELECT
ON Staff
TO personal, contabilidad;

Revocacin de privilegios
Para revocar los privilegios cedidos a un usuario mediante GRANT, se usa la clusula
REVOKE
Forma general:
REVOKE [GRANT OPTION FOR] {lista_privilegios | ALL PRIVILEGES}
ON

nombre_objeto

FROM {lista_id_aut | PUBLIC}


[RESTRICT | CASCADE]

ALL PRIVILEGES se refiere a todos los privilegios cedidos a un usuario por el usuario
que cedi los privilegios

GRANT OPTION FOR habilita el paso de los privilegios mediante WITH GRANT OPTION
del GRANT para ser revocados separadamente de los privilegios por s mismos
REVOKE falla si resulta en un objeto abandonado, como una vista, a menos que sea
especificado CASCADE

Los privilegios otorgados hacia un usuario por otro usuario no son afectados

Ejemplo de privilegios revocados


Revocar el privilegio SELECT en la tabla Branch para todos los usuarios
REVOKE SELECT
ON Branch
FROM PUBLIC;

Revocar todos los privilegios otorgados a la tabla Empleados para el usuario


Personal
REVOKE ALL PRIVILEGES
ON Empleados
FROM Personal;

Roles
Un rol permite agrupar privilegios comunes para una clase de
usuarios.

Los privilegios pueden ser cedidos o revocados desde los roles,


as como a los usuarios.
Los roles pueden se asignados a los usuarios, e inclusive a otros
roles.
El estndar SQL:99 soporta roles
create role manager
grant select on branch to manager
grant update(balance) on account to manager
grant all privileges on account to manager
grant manager to user1, user2

Limites de las autorizaciones SQL


El SQL no soporta autorizacin a nivel de tupla
Con el crecimiento de la web para acceso a base de datos, es primordial para los
servidores de aplicaciones.
El usuario final no tiene acceso a un id de usuario de la base de datos, todos son mapeados al mismo
id de un usuario de la base de datos.

La tarea de autorizacin en los casos anteriores recae en el programa de aplicacin,


sin soporte al SQL
Beneficio: autorizaciones de grano fino (tuplas individuales) pueden ser implementadas por la
aplicacin.
Contra: la autorizacin debe de ser realizada en el cdigo de la aplicacin.
Verificar por la ausencia de autorizacin llega a ser muy difcil, ya que requiere leer grandes
cantidades de cdigo de aplicacin.

53

Auditora
Una auditora es una bitcora de todos los cambios
(insert/delete/update) a la base de datos junto con la informacin de qu
usuario realiz el cambio, y cuando el cambio fu realizado.
Usado para llevar el control de actualizaciones errneas o fraudulentas.

Puede implementarse mediante disparadores, pero muchos manejadores


de bases de datos tienen soporte directo.

54

Encriptacin
Los datos pueden ser encriptados cuando las previsiones de autorizacin
de la base de datos no ofrecen suficiente proteccin.
Las propiedades de una buena tcnica de encriptacin son:
Ser relativamente simple para usuarios autorizados a encriptar y desencriptar datos
El esquema de encriptacin no depende de lo secreto del algoritmo sino del
secreto como un parmetro del algoritmo, llamada llave de encriptacin.
Extremadamente difcil para un intruso determinar la llave de encriptacin.

55

Encriptacin
Data Encryption Standard (DES).- substituye caracteres y los reordena en base a una llave de encriptacin, la cual
es proporcionada a usuarios autorizados va un mecanismo seguro. Lo importante es el mecanismo de
transmisin de la llave, ya que esta es compartida.

Advanced Encryption Standard (AES).- reemplaza al DES, y esta basado en el algoritmo de Rijndael, aunque sigue
siendo dependiente de llaves secretas compartidas.
La encriptacin de llave pblica esta basada en que cada usuario tenga dos llaves:
Llave publica.- es la llave publica publicada usada para encriptar los datos, pero no puede ser usada para desencriptarlos.
Llave privada.- es la llave solamente conocida por un individuo, y es usada para desencriptar los datos. No es necesario
transmitirla al sitio que hace la encriptacin.

Este esquema hace imposible o extremadamente difcil desencriptar datos dada solo la llave publica.
El esquema de encriptacin RSA de llave publica esta basado en la dificultad de factorizar un numero muy largo
(cientos de dgitos) en sus componentes primos.

56

Autentificacin
La autentificacin basada en contrasea es ampliamente usada, pero es susceptible al rastreo (sniffing)
en un ambiente de red

Los sistemas de desafo-respuesta (challenge-response) evitan la transmisin de contraseas


La base de datos enva una cadena de texto (aleatoriamente generada) al usuario
El usuario encripta la cadena y regresa el resultado
La base de datos verifica la identidad desencriptando el resultado

La firmas digitales son usadas para verificar la autenticidad de los datos


Se usa la llave privada (en orden inverso) para encriptar datos, y cualquiera puede verificar la autenticidad
usando la llave pblica (en orden inverso) para desencriptar los datos. Slo el poseedor de la llave privada pudo
haber creado los datos encriptados.
Las firmas digitales tambin ayudan a asegurar la no repudiacin: el que enva no puede posteriormente
reclamar que no ha creado los datos.

57

Certificados digitales
Son usados para verificar la autenticidad de las llaves publicas
Problema: cuando existe una comunicacin con el sitio Web, como saber si se esta comunicando con
un sitio genuino o con un impostor?
Solucin: usar la llave publica del sitio Web
Problema: como verificar si la llave publica en si misma es genuina?

Solucin:
Cada cliente (navegador) tiene llaves publicas de una autoridad certificadora.
Un sitio puede obtener su nombre o URL y la llave publica firmada por una autoridad certificadora; dicho
documento es llamado el certificado.
Un cliente puede usar la llave publica de la autoridad certificadora para verificar el certificado
Existen varios niveles de autoridades certificadoras. Cada una de ellas:
Presenta su propio certificado de llave publica firmado por una autoridad de ms alto nivel, y
Usa su llave privada para firmar el certificado de otra autoridad o sitio Web.

58

Transacciones

El SQL92 define el modelo de transacciones basado en las sentencias COMMIT y


ROLLBACK

Una transaccin es una unidad lgica de trabajo con una o ms sentencias SQL,
garantizando que sean atmicas con respecto a su recuperacin
Una transaccin en SQL comienza automticamente con una sentencia SQL (ej.
SELECT, INSERT, etc). Los cambios hechos por la transaccin no son visibles a otra
transaccin ejecutando concurrentemente hasta que la transaccin termina
Una transaccin puede ser completada en una de cuatro formas:

COMMIT termina la transaccin exitosamente, haciendo los cambios permanentes


ROLLBACK aborta la transaccin, deshaciendo cualquier cambio hecho por la transaccin
En el SQL programtico, la terminacin exitosa del programa finaliza la transaccin
exitosamente, inclusive si un COMMIT no hubiese sido ejecutado
En el SQL programtico, una terminacin anormal del programa aborta la transaccin

Niveles de serializacin en el
SQL92
El estndar SQL no asume que cada transaccin ejecute en una forma
serializable, y los sistemas comerciales le permiten al usuario especificar el
grado de control de concurrencia que desean.
En el SQL2, el mximo nivel de aislamiento es serializable, que significa que una
transaccin ejecutar en un instante y las otras transacciones ejecutarn hasta que
se haya completado completamente antes o despus.

Un nivel de lectura repetible (repeteable read) es cuando solo se leen registros


que se han comprometido; cuando se lee el mismo dato varias veces, siempre se lee
el mismo valor.
El nivel de lectura comprometida (read commited) lee datos que se han
comprometido, pero diferentes lecturas del mismo registro puede resultar en valores
distintos. Es posible que una transaccin pueda leer el elemento A dos veces y
obtenga diferentes valores, cada uno escrito por transacciones comprometidas.
El cuarto nivel es el de lectura no comprometida (read uncommited), en donde no
hay restricciones del todo para las transacciones que operan en este nivel. Solo a
este nivel es permitido que una transaccin lea datos sucios.

Soporte de transacciones en el
SQL92
Cada transaccin tiene un modo de acceso, un tamao del rea de
diagnsticos y un nivel de aislamiento.

Nivel de
aislamiento

Lectura sucia
(dirty read)

Lectura no
repetible
(nonrepeatable
read)

Registros
fantasmas
(phantom problem)

Read Uncommited

Pueden existir

Puede existir

Puede existir

Read commited

No

Puede existir

Puede existir

Repeteable reads

No

No

Puede existir

Serializable

No

No

No

Terminacin de Consultas SQL


COMMIT
Si se quiere hacer la actualizacin de resultados permanente.
Incrustado: EXEC SQL COMMIT;
ROLLBACK
Si se quiere descartar los resultados
Incrustado: EXEC SQL ROLLBACK;

Transacciones
Una nueva transaccin comienza con la siguiente sentencia que
involucre una transaccin

Las transacciones en SQL no pueden ser anidadas


La sentencia SET TRANSACTION configura el comportamiento de
una transaccin:

SET TRANSACTION [READ ONLY | READ WRITE] |


[ISOLATION LEVEL READ UNCOMMITTED | READ COMMITTED |
REPETEABLE READ | SERIALIZABLE]

Вам также может понравиться