Beruflich Dokumente
Kultur Dokumente
Las tablas son las unidades bsicas de almacenamiento de datos. Se muestra los tipos de datos / datatypes disponibles en Oracle para seleccionar el tipo
Veremos cmo se crean las tablas en Oracle y como se definen las restricciones de registro de una tabla Oracle. Tambin indicamos sus caractersticas (tamao
mximo, peculiaridades, etc). Es importante conocer los tipos de datos disponibles en
de integridad asociadas a dichas tablas.
un Sistema Gestor de Base de Datos (SGBD), de esta forma podremos optimizar al
En ausencia de dominios, se definirn las columnas y se asociarn todas las mximo el uso de recursos de nuestras aplicaciones. A continuacin os indicamos todos
restricciones de integridad semnticas admitidas (Nulos, Claves Primarias, los tipos de datos de Oracle y sus caractersticas bsicas:
Claves Alternativas (Clasula UNIQUE)) y restricciones de integridad sobre valores
de columnas en la tabla (Clusula CHECK). TIPO CARACTERISTICAS OBSERVACIONES
Para crear una tabla es necesario tener el privilegio CREATE TABLE y un rea de Entre 1 y 2000 bytes como mximo. Aunque
Almacenamiento. se introduzca un valor ms corto que el
Cadena de caracteres
indicado en el tamao, se rellenar al tamao
CHAR (alfanumricos) de
indicado. Es de longitud fija, siempre ocupar
longitud fija
Sintaxis de creacin de tabla. lo mismo, independientemente del valor que
contenga
CREATE TABLE [esquema.]tabla
{(columna tipo_de_datos [DEFAULT expr]
Entre 1 y 4000 bytes como mximo. El
[restriccin_columna]|[restriccin_tabla] Cadena de caracteres de
VARCHAR2 tamao del campo depender del valor que
[,columna ] longitud variable
contenga, es de longitud variable.
[TABLESPACE nom_tablespace |
CLUSTER nom_cluster (columna [,columna])] | Cadena de caracteres de
VARCHAR En desuso, se utiliza VARCHAR2 en su lugar
[AS consulta] }; longitud variable
restriccin_columna y restriccin_tabla: son las restricciones impuestas a la Entre 1 y 2000 bytes como mximo. El juego
columna y tabla. Cadena de caracteres de
de caracteres del tipo de datos (datatype)
nom_tablespace: indica el espacio lgico donde se quiere almacenar la tabla. longitud fija que slo
NCHAR NCHAR slo puede ser AL16UTF16 UTF8. El
Si no se especifica se utiliza el asignado por defecto. almacena caracteres
nom_cluster: es el nombre del agrupamiento si la tabla forma parte de uno. Las juego de caracteres se especifica cuando se
Unicode
columnas listadas son las columnas que la tabla aporta al agrupamiento, crea la base de datos Oracle
generalmente, las claves primarias. Si se especifica un clster ya no se
especifica el tablespace ya que se utilizar el tablespace donde se
Entre 1 y 4000 bytes como mximo. El juego
encuentra el agrupamiento. Cadena de caracteres de
consulta: inserta los registros procedentes de una consulta. No se especificarn de caracteres del tipo de datos (datatype)
longitud variable que slo
los tipos de datos ya que se toman de la consulta. La restriccin PRIMARY KEY no NVARCHAR2 NCHAR slo puede ser AL16UTF16 UTF8. El
almacena caracteres
se copia y se aade con ALTER TABLE. juego de caracteres se especifica cuando se
Unicode
crea la base de datos Oracle
Lic. Vladimir Cotaquispe Gutirrez. 1 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 2 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE
Este tipo de datos est obsoleto (en desuso), Almacena datos binarios
en su lugar se utilizan los datos de tipo LOB no estructurados en Admiten hasta 8 terabytes.
(CLOB, NCLOB). Oracle recomienda que se archivos del sistema
convierta el tipo de datos LONG a alguno LOB El administrador de la base de datos debe
operativo, fuera de la
si an se est utilizando.
BFILE base de datos. Una asegurarse de que exista el archivo en disco y
columna BFILE almacena de que los procesos de Oracle tengan
No se puede utilizar en clasulas WHERE, permisos de lectura para el archivo.
un localizador del archivo
GROUP BY, ORDER BY, CONNECT BY ni
DISTINCT a uno externo que
contiene los datos
SELECT
Oracle utiliza su propio formato interno para
COUNT(DISTINCT(SUBSTR(ROWID,7,3)))
almacenar fechas.
"Numero ficheros " FROM facturacion
Admite ROWID a tablas que no sean de
Los tipos de datos DATE se almacenan en
UROWID ROWID universal Oracle, tablas externas. Admite tanto ROWID campos de longitud fija de siete octetos cada
lgicos como fsicos. uno, correspondiendo al siglo, ao, mes, da,
Almacena un punto en el hora, minuto, y al segundo.
DATE
Se admiten hasta 38 dgitos de precisin y son tiempo (fecha y hora)
portables a cualquier entre los diversos Para entrada/salida de fechas, Oracle utiliza
sistemas en que funcione Oracle. por defecto el formato DD-MMM-AA. Para
cambiar este formato de fecha por defecto se
utiliza el parmetro NLS_DATE_FORMAT.
Para declarar un tipo de datos NUMBER en un
CREATE UPDATE es suficiente con:
Para insertar fechas que no estn en el mismo
formato de fecha estndar de Oracle, se
nombre_columna NUMBER
puede utilizar la funcin TO_DATE con una
Almacena nmeros fijos y mscara del formato: TO_DATE (el 13 de
NUMBER opcionalmente se le puede indicar la precisin noviembre de 1992, DD del MES, YYYY)
en punto flotante
(nmero total de dgitos) y la escala (nmero
de dgitos a la derecha de la coma, decimales,
los coger de la precisin indicada):
Almacena datos de tipo
nombre_columna NUMBER (precision, escala) TIMESTAMP hora, fraccionando los
segundos
Si no se indica la precisin se tomar en
funcin del nmero a guardar, si no se indica Almacena datos de tipo
la escala se tomar escala cero. TIMESTAMP
hora incluyendo la zona
WITH TIME
horaria (explcita),
Lic. Vladimir Cotaquispe Gutirrez. 5 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 6 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE
De los tipos anteriores, los comunmente utilizados son: VARCHAR2 (cadenas de texto - Pueden ser definidas a la vez que se crea la tabla (dentro del CREATE TABLE)
no muy grandes), DATE (fechas, horas), NUMBER (nmeros), BLOB (ficheros de tipo o posteriormente (ALTER TABLE).
word, excel, access, video, sonido, imgenes, etc) y CLOB (cadenas de texto muy
grandes). - Se pueden definir a nivel de columna o a nivel de tabla.
Oracle permite definir y forzar que se verifiquen las reglas de integridad de los SELECT * FROM
datos declarando USER_CONSTRAINT
Restricciones de Integridad y definiendo Database Triggers. S WHERE
table_name=Emplea
dos;
Una Restriccin de Integridad, es un mtodo declarativo de definir una restriccin para
una columna de una tabla. Oracle soporta: Comprobar las columnas asociadas
1. Not Null. No admite valores nulos. Las columnas asociadas con cada restriccin se pueden consultar en la vista.
2. Unique. Slo admite valores nicos.
Lic. Vladimir Cotaquispe Gutirrez. 7 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 8 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE
Otras vistas del diccionario de datos tiles para este tema son ALL_CONSTRAINTS y [NOT NULL | [UNIQUE | PRIMARYKEY] |
[REFERENCES [esquema.]tabla [(columna)]
ALL_CONS_COLUMNS. [ON DELETE CASCADE] ] |
[CHECK (condicin) ] ]
Definicin de Restricciones al Crear una Tabla
Sintaxis: [[USING INDEX
[TABLESPACE
CREATE TABLE [<esquema>.]<tabla>
nom_tablespace ]]|
Restriccin: nombre que le damos a la restriccin. Por defecto, Oracle le signa SY_Cn,
siendo n un entero.
AS <subconsulta> NOT NULL: no admite valores nulos.
UNIQUE: los valores de la columna son nicos.
[<restriccin de tabla>] [, ] );
PRIMARYKEY: la columna es clave primaria.
REFERENCES: indica que la columna es clave ajena en una relacin de integridad
donde:
referencial.
<esquema> Nombre del propietario. Slo es necesario indicarlo si no es el ON DELETE CASCADE: Mantiene la integridad referencial eliminando los
mismo que el del esquema. registros del lado relacionado cuando se eliminan los registros del lado principal
de la relacin.
<tabla> Nombre de la tabla
CHECK: todo valor que se introduzca en la columna debe cumplir la condicin
<expresin> Especifica un valor por defecto que sera usado si una operacin Admite las mismas
expresiones que una clusula WHERE.
INSERT no especifica valor
USING INDEX: indica el tablespace donde se almacenan los ndices generados
<columna> Nombre de la columna por UNIQUE y
PRIMARYKEY.
<tipo de dato> Tipo de dato de la columna y su longitud DISABLE: permite desactivar la restriccin al crearla. Se puede activar con
ENABLE/DISABLE del
<restriccin de columna> Restriccin de integridad que se define como parte de la
definicin de una columna particular ALTER TABLE.
<restriccin de tabla> Restriccin de integridad que se define fuera de las definicin de las
columnas, es decir, a nivel de tabla
Lic. Vladimir Cotaquispe Gutirrez. 9 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 10 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE
A nivel de columna:
1. Restriccin NOT NULL
[CONSTRAINT <nombre>] UNIQUE
Tambin llamada de obligatoriedad. Slo se puede definir a nivel de columna, no de tabla.
A nivel de tabla:
Sintaxis:
[CONSTRAINT <nombre>] UNIQUE (<columna>[,])
[CONSTRAINT <nombre>] [NOT] NULL
donde:
donde:<nombre> Nombre de la restriccin
<nombre> Nombre de la restriccin
Ejemplo:
<columna> Nombre de la columna
CREATE TABLE Empleados (
Ejemplo:
CREATE TABLE Empleados (
nombre VARCHAR2(20) NOT NULL,
apellidos VARCHAR2(40) NOT NULL, nombre VARCHAR2(20),
Fecha_alta DATE
CONSTRAINT fecha_obli NOT NULL,
email VARCHAR2(25) UNIQUE,
);
CONSTRAINT apel_nom_unico UNIQUE (apellidos,nombre),
);
Lic. Vladimir Cotaquispe Gutirrez. 11 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 12 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE
Es una restriccin de clave primaria. Slo se puede definir una para cada tabla. Es una restriccin de integridad referencial. Designa a una o varias columnas como clave
ajena y establece una relacin de referencia con una clave primaria o clave unica (UNIQUE)
Esta restriccin equivale a una restriccin de unicidad (UNIQUE) y otra de de otra tabla o de la misma.
obligatoriedad
El valor de la clave ajena debe coincidir con un valor existente en la tabla referenciada
(NOT NULL) combinadas. (parent table) o ser nulo.
Igual que para UNIQUE, existen primary key y composite primary key (formadas por Las claves ajenas son puramente lgicas (estn basadas en valores de datos) y por tanto no
ms son punteros fsicos.
Las composite foreign key estn formadas por ms de una columna y deben ser
de una columna). stas segundas se definen a nivel de tabla.
definidas a nivel de tabla.
El ORACLE Server crea un ndice de valores nicos como mecanismo para controlar
Sintaxis:
la unicidad en este tipo de restricciones.
A nivel de columna:
Sintaxis:
[CONSTRAINT <nombre>]
A nivel de columna:
A nivel de tabla:
[CONSTRAINT <nombre>] PRIMARY KEY (<columna>[,])
[CONSTRAINT <nombre>]
donde:
);
Lic. Vladimir Cotaquispe Gutirrez. 13 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 14 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE
Ejemplo a nivel de columna: - ON DELETE SET NULL: pone las claves ajenas de las filas dependientes de la tabla
origen a nulos.
CREATE TABLE Empleados (
- La opcin por defecto, que se activa si no se incluye ON DELETE es no permitir la accin
dep NUMBER(4)
de eliminar la fila de la tabla padre (equivale a un ON DELETE NO
FOREIGN KEY (dep) Una columna puede tener asociadas tantas restricciones CHECK como se desee.
A nivel de columna no aparecen las palabras clave FOREIGN KEY. A nivel de tabla indican donde:
las columnas de la tabla origen (child table) que forman la clave ajena. <nombre> Nombre de la restriccin
Detrs de la palabra clave REFERENCES se indican la tabla y columnas de destino. <condicin> Una expresin que debe ser cierta para todas las filas de la tabla. A nivel
Lic. Vladimir Cotaquispe Gutirrez. 15 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 16 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE
);
del diccionario de datos para identificar el nombre de la restricciones y las columnas que
6. Aadiendo Restricciones en Tablas Existentes tienen asociadas.
Se emplea la sentencia ALTER TABLE para: Emplear la clasula DROP de la sentencia ALTER TABLE para eliminar la restriccin.
- Aadir o eliminar una restriccin, pero no se puede modificar su estructura o definicin. La opcin CASCADE hace que se eliminen todas las restricciones dependientes de la
[CASCADE];
ALTER TABLE <tabla>
donde:
ADD [CONSTRAINT <nombre>] <tipo de restriccin> (<columna>);
<tabla> Nombre de la tabla
donde:
<columna> Nombre de la columna afectada por la restriccin
<tabla> Nombre de la tabla
Lic. Vladimir Cotaquispe Gutirrez. 17 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 18 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE
Eliminar la restriccin de clave ajena para el supervisor en la tabla de Empleados. Se puede activar la comprobacin de una restriccin mediante la opcin ENABLE de
la sentencia ALTER TABLE.
ALTER TABLE Empleados
En el momento de la activacin, todos los datos de la tabla deben satisfacer la restriccin.
DROP CONSTRAINT emp_supervisor_fk;
En el caso de restricciones UNIQUE o PRIMARY KEY, se crea automticamente un ndice
Eliminar la restriccin de clave primaria de la tabla Departamentos y la clave ajena asociada asociado.
de empleados (Empleados.id-> Departamentos).
Tambin se puede incluir ENABLE durante la creacin de la tabla (CREATE TABLE).
ALTER TABLE Departamentos
Sintaxis:
DROP PRIMARY KEY CASCADE;
Tambin se puede incluir DISABLE durante la creacin de la tabla (CREATE TABLE) para <tabla> Nombre de la tabla
Desactivar una restriccin UNIQUE o PRIMARY KEY supone remover el ndice asociado.
Ejemplo:
Sintaxis:
Volver a activar la restriccin de clave primaria de la tabla de Empleados.
donde:
10.Restricciones en Cascada
<tabla> Nombre de la tabla
Un fenmeno que requiere especial atencin es la eliminacin de columnas de una tabla que
<nombre> Nombre de la restriccin son
ALTER TABLE Empleados - Eliminar todas las restricciones de integridad referencial que refieren (apuntan) a
Lic. Vladimir Cotaquispe Gutirrez. 19 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 20 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE
claves primarias o nicas (UNIQUE) definidas sobre las columnas borradas. PRCTICA - RESTRICCIONES
- Eliminar las restricciones multicolumna (composite) definidas sobre las columnas Disear la estructura del esquema de la base de datos ACADEM:
borradas. Ejemplo:
DEPARTAMENTOS (codigo, nombre) AREAS (codigo, nombre, departamento)
CREATE TABLE prueba1 (
PROFESORES (codigo, apellido1, apellido2, nombre_pila, activo, categoria, dedicacion,
pk NUMBER PRIMARY KEY, area) ASIGNATURAS (siglas, nombre, creditos, curso, anualidad, clase, horas_teoria,
horas_practica, grupos_teoria , grupos_practica, alumnos)
fk NUMBER,
LOCALES (codigo, nombre, docente, capacidad, edificio, situacion)
col1 NUMBER,
GRUPOS (curso, clase, codigo, nombre)
col2 NUMBER,
DOCENCIA (id, curso, clase, grupo, siglas, profesor, local, dia, hora, periodicidad)
CONSTRAINT fk_cons FOREIGN KEY (fk) REFERENCES prueba1,
CONSTRAINT ck1 CHECK (pk>0 AND col1>0),
areas.departamento departamentos
profesores.area areas
CONSTRAINT ck2 CHECK (col2>0) );
docencia.curso, clase, grupo grupos
docencia.profesor profesores
Al ejecutar
docencia.local locales
docencia.siglas asignaturas
ALTER TABLE prueba1 DROP (pk);
se produce un error porque pk es clave de la tabla padre de la integridad referencial. 1. Cambiar la definicin de la restriccin de clave primaria de la tabla Departamentos
para asignarle el nombre dep_pk.
Al ejecutar 2. Aadir la regla de negocio de que los profesores slo pueden tener una
dedicacin de tiempo completo (TC), o parcial de 6 horas (6 h) o de 3 horas (3 h).
ALTER TABLE prueba1 DROP (col1); Comprobar que se ha modelado bien intentando modificar la dedicacin del profesor
con codigo=1 al valor 20 y observando el mensaje de error que se produce.
se produce un error porque col1 es empleada por la restriccin multicolumna ck1.
3. Comprobar cuales son las restricciones que estn definidas en la tabla Locales. Una de
ellas no es necesaria al ser redundante. Detectarla y eliminarla. Realizar alguna
Los errores se evitan incluyendo CASCADE CONSTRAINTS:
operacin de tipo DML para demostrar que aunque dicha restriccin se ha eliminado,
ALTER TABLE prueba1 DROP (pk) CASCADE CONSTRAINTS; en realidad se sigue cumpliendo gracias a otra restriccin.
ALTER TABLE prueba1 DROP (col1) CASCADE CONSTRAINTS;
4. Desactivar la restriccin NOT NULL en la columna nombre de la tabla
Departamentos. Comprobar mediante alguna operacin UPDATE que est
desactivada. Volver a intentar activarla y averiguar qu efecto produce el cambio
producido por la operacin anterior. Resolver la situacin de forma que la restriccin
queda activada.
5. Definir la regla de negocio de que una asignatura tiene una hora semanal de clase (de
teora y/o de prctica) por cada 3 crditos. Comprobar antes de aadirla al
esquema, que dicha regla se cumple con los datos actuales.
Lic. Vladimir Cotaquispe Gutirrez. 21 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 22 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA