Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
Restricción NOT NULL. .............................................................................................................. 34
Restricción UNIQUE. .................................................................................................................. 35
Restricción PRIMARY KEY. ......................................................................................................... 35
Restricción FOREIGN KEY. ......................................................................................................... 35
Restricción CHECK. .................................................................................................................... 36
Añadir restricciones................................................................................................................... 36
Borrar restricciones. .................................................................................................................. 36
¿Cómo usar Oracle SQL Developer Data Modeler para construir sentencia DDL? ....................... 36
¿Cómo usar Oracle SQL Developer para construir el modelo físico? ........................................... 38
Comenzando con las sentencias SQL. ....................................................................................... 39
Creando sentencias SQL para poblar y manipular datos en el modelo físico. .............................. 48
SQL DML. ................................................................................................................................... 48
Sentencia SELECT................................................................................................................... 48
Sentencia INSERT. ................................................................................................................. 48
Sentencia DELETE. ................................................................................................................. 49
Sentencia UPDATE. ................................................................................................................ 49
Transacción de una base de datos. ........................................................................................... 49
¿Cómo usar Oracle SQL Developer para poblar y manipular los datos del modelo físico? .......... 50
¿Por qué desnormalizamos un modelo normalizado?.................................................................. 57
¿Cómo podemos desnormalizar?.............................................................................................. 58
Almacenamiento de valores calculados. ............................................................................... 58
Unión de tablas. .................................................................................................................... 59
Separación de tablas. ............................................................................................................ 59
Agregar valores asociados a la temporalidad. ...................................................................... 60
Creación de tablas. ................................................................................................................ 61
2
Experiencia de Aprendizaje 3: Implementación del modelo en una base de
datos.
Lenguaje SQL - Structured Query Language.
El precursor del lenguaje SQL fue el lenguaje SEQUEL (Structured English Query Language),
implementado por IBM como parte del proyecto System R, por la década de los 70 del siglo pasado.
En 1986 ANSI (American National Standards Institute) e ISO (International Standards Organization)
publicaron por primera vez la primera norma SQL, denominada SQL-86. Así nació uno de los
lenguajes más utilizados a nivel mundial.
A través de los años, el lenguaje SQL ha sufrido variaciones con la finalidad de establecer una
estructura unificada y comprensible por diversos profesionales y motores de base de datos.
El lenguaje SQL rápidamente se popularizó y fue incluido en los gestores de bases de datos más
populares como son Microsoft SQL Server, Oracle, SyBase, MySQL, Firebird, Informix, PostgreSQL,
DB2, etc. Y además de los gestores de bases de datos, muchos lenguajes de programación basan sus
motores de acceso a datos en el uso de comandos SQL para ejecutar los movimientos de datos de
las aplicaciones desarrolladas en su entorno.
Los comandos utilizados en SQL para ejecutar las diferentes acciones pueden ser muy sencillos para
obtener datos muy generales hasta muy complejos para obtener datos más detallados.
No obstante, aunque exista un estándar definido por ANSI, existen particularidades entre los
diferentes gestores de bases de datos en la gestión SQL. Por ejemplo: el lenguaje SQL de Oracle no
es exactamente el mismo que el de Microsoft SQL Server. Normalmente las diferencias son mínimas,
pero existen.
Los comandos de SQL se dividen en 4 grandes grupos:
1. Lenguaje de Definición de Datos (DDL - Data Definition Language): Permite definir la estructura
de las bases de datos. Por ejemplo:
CREATE: Sentencias de creación de objetos.
ALTER: Modificación de alguna estructura.
DROP: Eliminación de objetos.
RENAME: Cambiar nombre de los objetos.
TRUNCATE: Eliminación de todos los registros de una tabla.
COMMENT: Coloca un comentario en el diccionario de datos.
2. Lenguaje de Manipulación de Datos (DML - Data Management Language): Permite acceder a los
datos almacenados. Por ejemplo:
3
SELECT: Sentencias para consultar datos.
INSERT: Inserción de datos.
UPDATE: Modificación de datos.
DELETE: Eliminación de registros de una tabla.
MERGE: Actualiza e inserta datos.
3. Lenguaje de Control de Datos (DCL - Data Control Language): Permite definir controles de
seguridad sobre objetos de la base de datos. Son principalmente dos:
GRANT: Otorga permisos a los usuarios sobre los objetos de la base de datos.
REVOKE: Quita permisos a los usuarios sobre los objetos de la base de datos.
4. Lenguaje de Control de Transacciones (TCL - Transaction Control Lenguage): Permiten confirmar
(COMMIT) o deshacer (ROLLBACK) cambios realizados por las sentencias DML. Si se utiliza
SAVEPOINT se permite deshacer el trabajo realizado después de declarado el savepoint dentro
de una transacción.
4
Operadores: Permiten crear expresiones complejas. Pueden ser aritméticos (+, -, /, *), de
comparación (>, <, >=, …) o lógicos (AND, OR, NOT).
Funciones: Pueden ser de carácter, fecha, números, generales. Ejemplos: SYSDATE, NVL(),
ROUND(), etc. También existen funciones para conseguir valores complejos, pueden ser
agregadas o de grupo. Ejemplos: SUM(), MIN(), COUNT(), etc.
Constantes: Valores literales para las consultas. Pueden ser números, textos, caracteres, fechas,
etc.
5
Arquitectura de un Servidor de Base de Datos Oracle
Un servidor de base de datos Oracle consta de una instancia y una base de datos.
Una instancia Oracle es un medio de acceso a una base de datos Oracle por la que siempre abre
una única base de datos, la cual está formada por estructuras de procesos en segundo plano y
de memoria. Una instancia Oracle se compone de la estructura de la memoria SGA (Área Global
del Sistema) y de los procesos background que se utilizan para gestionar una base de datos.
La base de datos almacena y recupera la información relacionada. Una base de datos Oracle
tiene una estructura lógica y una física. La estructura física de la base de datos es el juego de
archivos del sistema operativo en la base de datos.
La estructura física incluye tres tipos de archivos: Archivos de control, archivos de datos y
archivos redo log online.
6
¿Cómo crear una base de datos en Oracle Cloud?
Para crear una base de datos en Oracle Cloud se deben seguir los siguientes pasos:
7
2. Al presionar el botón Next será desplegada la siguiente página donde debes presionar el botón
Continue.
3. Debes ingresar con tu correo institucional y la contraseña que definiste al crear tu cuenta en
Oracle Cloud.
8
4. Una vez dentro del portal debes seleccionar la opción Create an ATP database.
5. En el campo Display name puede colocar el nombre de la base de datos que creará. Se sugiere
no cambiar el nombre en el campo Database name.
9
6. Seleccione en tipo de carga de trabajo Transaction Processing y en tipo de despliegue Shared
Infrastructure. Finalmente se debe mantener seleccionada la opción Show only Always Free
configuration options.
7. Las siguientes opciones se deben dejar por defecto, ya que son las que se utilizan en nuestra
versión de convenio.
10
8. En la sección Create administrator credentials debes definir una contraseña para el usuario
ADMIN de la base de datos.
9. Las opciones Tipo de Acceso y Tipo de Licencia se deben dejar con los valores por defecto.
10. Finalmente, se debe presionar el botón Create Autonomous Database. La creación de la base
de datos demora unos minutos y aparece en estado PROVISIONING.
11
11. Una vez creada la base de datos aparece en estado AVAILABLE y es posible ver las acciones que
se pueden ejecutar.
12. Para poder conectarse a la base de datos es necesario bajar un archivo que nos permite realizar
la conexión. Debes presionar el botón DB Connections, en el campo Wallet type se debe
seleccionar Instance Wallet y luego presione el botón Download wallet.
12
13. Se debe ingresar la contraseña creada anteriormente y presionar el botón Download.
14. El archivo Zip descargado debe ser guardado porque será ocupado más adelante.
13
Una vez iniciado el programa, se debe presionar el icono + verde para crear una nueva conexión.
Luego, se debe colocar un nombre a la conexión en el campo Name y en el campo Tipo Conexión
seleccionar Cartera de Cloud. El usuario de la conexión debes ser ADMIN (en mayúsculas) y la
contraseña es la definida al crear la base de datos, es muy importante que en el campo Archivo de
Configuración sea seleccionado el archivo de cartera Cloud descargado anteriormente.
Para finalizar se debe presionar el botón Probar y luego Conectar, entonces se desplegará una
ventana donde se encuentra una hoja que permite trabajar en la base de datos.
14
¿Cómo crear un usuario para conectarse a la base de datos?
Cuentas de Usuarios de Base de Datos.
Desde el punto de vista de base de datos, un usuario es un conjunto de permisos que se aplican a
una conexión de base de datos, para que pueda manipular objetos de la base de datos y efectuar
acciones en la base de datos.
Para acceder a una base de datos, se debe especificar una cuenta de usuario de base de datos válida
y autenticarse correctamente según los requisitos de dicha cuenta. Cada usuario de base de datos
debería tener una cuenta de base de única. Esto es recomendable para evitar posibles problemas
de seguridad y proporcionar datos significativos cuando se efectúan ciertas auditorías. Sin embargo,
cuando los usuarios comparten una cuenta de base de datos común, el sistema operativo y las
aplicaciones deben proporcionar la seguridad para la base de datos.
15
Una cuenta de usuario tiene las siguientes características:
Nombre de usuario único: Los nombres de usuarios no pueden contener más de 30 caracteres,
ni contener caracteres especiales y deben comenzar con una letra.
Método de autenticación: El método más común de autenticación es una contraseña (o
password), pero Oracle 11g soporta los métodos de autenticación por contraseña, global y
externa (como la autenticación biométrica, certificado y token).
Tablespace por defecto: Este el lugar en el que el usuario creará objetos si no se especifica
ningún otro al momento de crear la cuenta. Si embargo, para que el usuario pueda crear objetos
en ese tablespace se le debe otorgar los privilegios que corresponden. Para este tablespace se
debe indicar cuánto espacio cuánto es el espacio que el usuario podrá usar.
Tablespace temporal: Es un lugar en el que la base de datos, por ejemplo, realiza el
ordenamiento de los datos y creará las tablas temporales del usuario. Para este tablespace no
se indica cuánto es el espacio que el usuario podrá usar.
Perfil de usuario: Es un conjunto de restricciones de recursos y contraseñas asignadas al
usuario. Si no se le asigna un perfil específico, la base de datos le asigna un perfil por defecto ya
definido en la base de datos.
Grupo consumidor inicial: Es una opción de que utiliza el gestor de recursos de la base de datos.
16
Estado de cuenta: Los usuarios solo pueden acceder a las cuentas cuando están desbloqueadas
(estado OPEN). Las cuentas pueden tener el estado de bloqueada o caducada.
En una base de datos Oracle existen varias cuentas predefinidas para efectuar las tareas de
administración de la base de datos y no para tareas rutinarias. Las cuentas de usuarios más
conocidas son SYS, SYSTEM y ADMIN las que tienen otorgado por defecto el rol de administrador de
base de datos (DBA). Además, la cuenta SYS es propietaria del diccionario de datos. Para conectarse
a la cuenta SYS, se debe utilizar la cláusula AS SYSDBA. Las cuentas ADMIN y SYSTEM tienen
otorgados roles especiales para efectuar la mayoría de las tareas de administración de la base de
datos. Las cuentas SYS y SYSTEM son cuentas necesarias en la base de datos, por lo tanto, no se
pueden eliminar.
17
privilegio de otorgar privilegios adicionales a otros usuarios o roles, que se denominan grupos de
privilegios relacionados.
Cada vez que se deben otorgar privilegios a los usuarios, siempre se debe seguir el principio del
menor privilegio que indica que los usuarios deben recibir la menor cantidad de privilegios para
realizar sus trabajos.
Los privilegios de usuarios deben ser revisados con regularidad para determinar la relevancia con
las responsabilidades actuales de los puestos.
Al hablar de privilegios surgen inmediatamente los conceptos de usuario y esquema de base de
datos. Un usuario se puede definir como conjunto de permisos que se aplican a una conexión de
base de datos. Un esquema es un conjunto de objetos como tablas, vistas, programas, secuencias,
etc. El esquema es propiedad de un usuario de la base de datos y tiene el mismo nombre que ese
usuario.
Los privilegios de usuario deben ser revisados periódicamente para determinar la relevancia de las
responsabilidades de trabajo actuales y determinar que privilegios están siendo realmente
utilizados por un usuario. Los mecanismos de control de privilegios de los roles de trabajo han de
ser bien definidos o mantenidos. Esta revisión periódica se da porque las organizaciones
constantemente están cambiando, el recurso humano también, nuevas personas son contratadas,
otras dejan la organización y otro grupo cambia de puesto y a su vez de responsabilidades.
18
Al momento de crear un usuario, se deben otorgar los privilegios mínimos para poder operar con
una base de datos. El privilegio CREATE SESSION para conectarse a la base de datos, es el privilegio
mínimo para cualquier usuario.
19
Disponibilidad de privilegios selectiva. Roles asignados a un usuario pueden ser activados o
desactivados temporalmente.
Mejora de la productividad. El uso de roles disminuye el número de privilegios almacenados en
el diccionario de datos de la base de datos.
Al momento de crear un usuario, se deben otorgar los roles mínimos para poder operar con una
base de datos. Cuando creas un nuevo usuario en la base de datos de Oracle, el usuario desea
realizar alguna acción como: Crear tablas o triggers bajo su propio esquema. Para realizar estas
acciones, se debe otorgar al usuario el rol de RESOURCE. Este rol incluye los siguientes privilegios
implícitamente:
CREATE TYPE.
CREATE TABLE.
CREATE CLUSTER.
CREATE TRIGGER.
CREATE OPERATOR.
CREATE SEQUENCE.
CREATE INDEXTYPE.
CREATE PROCEDURE.
20
¿Qué es un Tablespace?
Cuando se crea un objeto como tabla, vistas, claves primarias e índices se debe crear en un
tablespace determinado. Un tablespace es una unidad lógica de almacenamiento dentro de una
base de datos Oracle y es el nexo con el almacenamiento físico en el sistema de archivo del Sistema
Operativo. Cada tablespace se compone al menos de un datafile (archivo de datos) y un datafile solo
puede pertenecer a un tablespace.
Los tablespace de la base de datos los crea el DBA o un usuario que tenga el privilegio de sistema
CREATE TABLESPACE.
21
Luego, se debe presionar el botón derecho del mouse y se desplegará un menú contextual donde
se debe presionar Crear Usuario…
En la pestaña Roles Otorgados seleccionar marcar las opciones Otorgado y Valor por Defecto del rol
RESOURCE.
22
En la pestaña Privilegios del Sistema marcar la opción Otorgado del privilegio CREATE SESSION.
Finalmente, en la pestaña Cuotas se debe marcar la opción Ilimitado para el Tablespace DATA y
presionamos el botón Aplicar.
23
Entonces será desplegado un mensaje de confirmación de la creación del usuario.
Ahora, es posible crear una nueva conexión para conectar con el nuevo usuario.
24
Creación de base de datos.
Crear una base de datos implica indicar los archivos y ubicaciones de éstos. Sólo es posible crear
una base de datos con permisos de DBA (Data Base Administrator).
Si se desea crear una base de datos a través de SQL se usa la siguiente sentencia:
CREATE DATABASE PRUEBA;
Donde PRUEBA es el nombre de la base de datos. Esta instrucción bastaría para crear una base de
datos, pero en Oracle es necesario definir algunos parámetros:
CREATE DATABASE prueba
LOGFILE prueba.log
MAXLOGFILES 25
MAXINSTANCES 10
ARCHIVELOG
CHARACTER SET WIN1214
NATIONAL CHARACTER SET AL32UTF8
DATAFILE pruebal.dbf AUTOEXTEND ON MAXSIZE 500MB;
Para esta asignatura será utilizado Oracle Cloud y la base de datos se creará desde la página Web,
no se utilizarán sentencias SQL.
Creación de tablas.
En Oracle los nombres de las tablas deben cumplir con las siguientes condiciones:
Deben comenzar con una letra.
No deben tener más de 30 caracteres.
Solo se permiten utilizar letras del alfabeto (inglés), números o el signo de subrayado
(también los signos $ y #, pero esos se utilizan de manera especial, por lo que no son
recomendados).
No puede haber dos tablas con el mismo nombre dentro del mismo esquema. Pueden
coincidir los nombres si están en distintos esquemas.
No puede coincidir con el nombre de una palabra reservada SQL. Por ejemplo, no se puede
llamar SELECT a una tabla.
En el caso de que el nombre tenga espacios en blanco o caracteres nacionales (permitido
solo en algunas bases de datos). Entonces, se suele colocarlas entre comillas dobles. En el
25
estándar SQL 99 (respetado por Oracle) se pueden utilizar comillas dobles al poner el nombre
de la tabla a fin de hacerla sensible a las mayúsculas. Se diferenciará
entre “FACTURA” y “Factura”.
IMPORTANTE: Esto aplica para cualquier nombre de objeto en una base de datos.
26
Tipo de dato Descripción
La sintaxis básica para crear una tabla es usar CREATE TABLE seguido del nombre de la tabla,
después entre paréntesis se van declarando las columnas que conformarán la tabla, entre columna
y columna se debe usar el separador coma “,”. Las columnas deben tener un nombre de columna
representativo y un tipo de dato, de manera opcional se puede asignar un valor por defecto
(DEFAULT).
Por defecto la tabla será almacenada en el espacio y esquema del usuario que crea la tabla.
IMPORTANTE: Para indicar que la sentencia ha terminado se debe colocar el símbolo punto y coma
“;” al final de la sentencia.
27
Los corchetes “[ ]” en la sintaxis definida significa que es opcional.
Ejemplo:
CREATE TABLE PROVEEDOR(
nombre VARCHAR(25),
localidad VARCHAR(30) DEFAULT 'Santiago' );
IMPORTANTE: Las comillas simples se utilizan para los valores que son alfanúmericos.
Modificación de tablas.
Para modificar una tabla existe el comando ALTER TABLE que permite modificar las propiedades de
una tabla.
28
En el ejemplo, es agregada la columna fecha en la tabla FACTURA.
29
Eliminar una tabla.
La sentencia DROP TABLE seguida del nombre de una tabla, permite eliminar la tabla en cuestión.
Al borrar una tabla:
Desaparecen todos los datos de la tabla.
Cualquier vista y sinónimo referente a la tabla seguirá existiendo, pero ya no funcionará.
Las transacciones pendientes son aceptadas en aquellas bases de datos que tengan la
posibilidad de utilizar transacciones.
Solo se pueden eliminar las tablas sobre las que el usuario tiene permiso de borrado.
Normalmente, el borrado de una tabla es irreversible por lo que conviene ser muy cuidadoso con
esta operación. Sin embargo, existe en Oracle una posibilidad de recuperación mediante el
comando FLASHBACK TABLE si se ha configurado la papelera de reciclaje.
Este comando permite usar al final de la palabra PURGE. Este hace que el borrado de la tabla sea
irreversible porque la tabla no pasa a la papelera de reciclaje.
SINTAXIS ELIMINAR TABLA:
DROP TABLE nombreTabla;
DROP TABLE nombreTabla PURGE;
30
Creación de columnas auto-incrementables ALWAYS.
Define que no es necesario escribir explícitamente el valor de la columna en la sentencia de
inserción de datos, y si se coloca dándole un valor incluso válido, arrojará el siguiente error: “ORA-
32795: cannot insert into a generated always identity columna”.
Ejemplo:
CREATE TABLE PRUEBA(
idprueba NUMBER(19) GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombre VARCHAR2(50));
31
SINTAXIS SECUENCIA:
CREATE SEQUENCE NOMBRESECUENCIA START WITH valorentero
INCREMENT BY valorentero
MAXVALUE valorentero
MINVALUE valorentero
CYCLE | NOCYCLE;
A continuación, se detallan las cláusulas de la sintaxis:
START WITH: Indica el valor desde el cual comenzará la generación de números secuenciales.
Si no se especifica, se inicia con el valor que indique MINVALUE.
INCREMENT BY: Especifica el incremento, es decir, la diferencia entre los números de la
secuencia. Debe ser un valor numérico entero positivo o negativo diferente de 0. Si no se
indica, por defecto es 1.
MAXVALUE: Define el valor máximo para la secuencia. Si se omite, por defecto es
99999999999999999999999999.
MINVALUE: Establece el valor mínimo de la secuencia. Si se omite será 1.
CYCLE|NOCYCLE: Indica que, cuando la secuencia llegue a máximo valor se reinicie,
comenzando con el mínimo valor nuevamente. es decir, la secuencia vuelve a utilizar los
números. Si se omite, por defecto la secuencia se crea NOCYCLE.
Si no se especifica ninguna cláusula, excepto el nombre de la secuencia, por defecto comenzará en
1, se incrementará en 1, el mínimo valor será 1, el máximo será 999999999999999999999999999 y
NOCYCLE.
En el siguiente ejemplo se crea una secuencia llamada SEQ_LIBRO, estableciendo que comience en
1, sus valores estén entre 1 y 99999, se incremente en 1 y por defecto será NOCYCLE:
32
CREATE SEQUENCE SEQ_SOCIO
INCREMENT BY 5
MAXVALUE 1000000
CYCLE;
La secuencia anterior SEQ_SOCIO, incrementa sus valores en 5, el valor máximo es 1000000 y al
llegar al máximo valor recomenzará la secuencia desde el valor mínimo. No se especifican las otras
cláusulas, por lo tanto, por defecto el valor mínimo es 1 y el valor inicial es 1.
Restricción de tabla: En este caso las restricciones se colocan al final de la lista de columnas.
SINTAXIS RESTRICCIÓN TABLA:
…
columna1 definición1,
columna2 definición2,
…,
últimacolumna últimadefinición,
[CONSTRAINT nombre] tipo (listaColumnas)
[, … otras restricciones…]
…
Es buena práctica asignar un nombre a las restricciones, ya que el nombre que le asigna Oracle no
es representativo. Se sugiere la siguiente estructura:
33
3 letras
3 letras
del
Tipo de del
_ nombre _
restricción nombre
de la
de la tabla
columna
Por ejemplo, para la tabla ALUMNO donde la columna código del alumno es la clave primaria, el
nombre de la restricción podría ser PK_COD_ALU.
El tipo de restricción en el nombre de la restricción deben ser 2 letras, para cada tipo de restricción
se muestran las letras a usar:
NN: NOT NULL.
UN: UNIQUE.
PK: PRIMARY KEY.
FK: FOREIGN KEY.
CK: CHECK.
A continuación, se muestra la descripción de cada tipo de restricción:
Restricción Descripción
PRIMARY KEY Identifica en forma única cada fila de la tabla y puede ser
referenciada como foránea.
CHECK Especifica una condición que debe ser verdadera para los
valores que almacenará la columna.
34
Ejemplo:
CREATE TABLE CLIENTE(
idcliente VARCHAR(10) CONSTRAINT NN_IDC_CLI NOT NULL,
NOMBRE VARCHAR(50));
Para el ejemplo, se crea una restricción de NOT NULL en la columna idcliente de la tabla CLIENTE.
Restricción UNIQUE.
Usada para especificar que el valor de la columna debe ser único.
Ejemplo:
CREATE TABLE CLIENTE(
idcliente VARCHAR(10) CONSTRAINT UN_IDC_CLI UNIQUE,
NOMBRE VARCHAR(50));
Para el ejemplo, se crea una restricción de valor único en la columna idcliente de la tabla CLIENTE.
35
Restricción CHECK.
Usada para incorporar una validación que se debe cumplir almacenar el dato en la columna.
Ejemplo: Las restricciones incorporadas solo permiten valores entre 0 y 8000 para la columna
importe.
CREATE TABLE INGRESO(
cod NUMBER(5) PRIMARY KEY,
concepto VARCHAR2(40) NOT NULL,
importe NUMBER(11,2) CONSTRAINT CK1_IMP_ING CHECK (importe>=0) CONSTRAINT
CK2_IMP_ING CKECK (importe<=8000));
La siguiente restricción valida que el importe sea menor que el importe máximo.
CREATE TABLE INGRESO(
cod NUMBER(5) PRIMARY KEY,
concepto VARCHAR2(40) NOT NULL,
importe_max NUMBER(11,2),
importe NUMBER(11,2),
CONSTRAINT CK_IMP_ING CHECK (importe < importe_max));
La sintaxis vista hasta el momento permite agregar restricciones en la sentencia de creación de las
tablas. Además, es posible agregar restricciones cuando la tabla ya está creada.
Añadir restricciones.
Usada para agregar restricciones en una tabla existente.
SINTAXIS AGREGAR RESTRICCIÓN:
ALTER TABLE nombreTabla ADD [CONSTRAINT nombre] tipoRestriccion (columnas);
Borrar restricciones.
Usada para eliminar restricciones de una tabla.
SINTAXIS BORRAR RESTRICCIÓN:
ALTER TABLE nombreTabla DROP {PRIMARY KEY | UNIQUE (columnas) | CONSTRAINT
nombreRestriccion} [CASCADE];
¿Cómo usar Oracle SQL Developer Data Modeler para construir sentencia DDL?
Una vez que el modelo relacional está completo se puede generar el archivo que contiene el código
SQL que genera las tablas, restricciones, índices, claves foráneas y vistas. Para realizar esta tarea se
36
En la ventana del Editor de Archivo DDL se debe seleccionar la versión de código SQL a generar. Para
el caso de esta asignatura seleccione la versión de Oracle que esté utilizando o la más cercana.
Al presionar el botón Generar será desplegada la siguiente ventana donde se pueden seleccionar
los componentes del modelo que se desean incluir:
Una vez seleccionados los componentes se debe presionar el botón Aceptar, entonces será
generado un archivo con las sentencias DDL del modelo relacional. El archivo generado se puede
guardar para ser usado posteriormente en el SGBD seleccionado.
37
¿Cómo usar Oracle SQL Developer para construir el modelo físico?
Para construir el modelo físico es necesario conectarse a la base de datos a través de la herramienta
Oracle SQL Developer como se mostró en las secciones anteriores. Cuando esté conectado será
desplegada la siguiente ventana:
38
Como se puede apreciar en la imagen la conexión tiene un icono en forma de cilindro con un enchufe
que indica que está conectada. La presionar el signo + se muestran todos los objetos que puede
contener la instancia creada. Por ejemplo: Tablas, vistas, índices, paquetes, procedimientos,
funciones, operadores, etc.
En esta sección se mostrará cómo trabajar en Oracle SQL Developer Data Modeler con sentencias
DDL. Para comenzar se explicará el uso de algunos iconos importantes en la ventana donde se
escriben las sentencias SQL.
El icono permite ejecutar la(s) sentencia (s) que está(n) seleccionada(s) en la Hoja de Trabajo.
El icono permite ejecutar en forma secuencial todas las sentencias que estén escritas en la
Hoja de Trabajo.
El icono COMMIT permite confirmar las transacciones realizadas al ejecutar las sentencias
SQL.
El icono ROLLBACK permite deshacer las transacciones realizadas al ejecutar las sentencias
SQL.
Los símbolos -- se utilizan para colocar comentarios en las sentencias SQL. Al ser comentarios el
programa no lo tomará como sentencia a ejecutar.
39
descripcion VARCHAR2(300),
fecha_creacion DATE DEFAULT SYSDATE);
Una vez ejecutada la sentencia en la parte inferior aparecerá un mensaje indicando que la tabla fue
creada.
Para revisar si la tabla fue creada se debe validar en la opción Tablas de la conexión. Primero se
debe presionar el botón derecho sobre la opción y seleccionar Refrescar en el menú contextual
desplegado.
Entonces, aparecerá la tabla y al presionar el signo + serán desplegadas las columnas de la tabla.
Al hacer clic sobre el nombre de la tabla será desplegada información más detallada de las columnas
de la tabla DEPARTAMENTO.
40
Una vez creada la tabla se usarán dos sentencias para cambiar el nombre de la tabla. Para el ejemplo,
las sentencias se deben ejecutar por separado.
-- Renombrar tabla
ALTER TABLE DEPARTAMENTO RENAME TO DEPARTAMENTOS;
RENAME DEPARTAMENTOS TO DEPARTAMENTO;
Al ejecutar la primera sentencia es mostrado el siguiente mensaje:
Si se requiere agregar una columna a una tabla se puede realizar a través de una sentencia SQL. Para
el ejemplo, se agregará la columna fecha a la tabla DEPARTAMENTO.
-- Agregar columna a tabla
ALTER TABLE DEPARTAMENTO ADD (fecha DATE);
Una vez ejecutada la sentencia será mostrado un mensaje de confirmación del cambio y al actualizar
se puede ver que la columna fue incorporada a la tabla DEPARTAMENTO.
41
Ahora se modificará el tipo de dato de la columna fecha. Actualmente, el tipo de dato es DATE y
será cambiado a TIMESTAMP.
-- Modificar tipo de dato
ALTER TABLE DEPARTAMENTO MODIFY (fecha TIMESTAMP);
Al ejecutar la sentencia se muestra un mensaje de confirmación del cambio y al actualizar se observa
que el tipo de dato de la columna fecha fue cambiado.
Para eliminar la columna fecha desde la tabla DEPARTAMENTO se debe ejecutar la siguiente
sentencia:
-- Eliminar campo a tabla
ALTER TABLE DEPARTAMENTO DROP (fecha);
Al ejecutar la sentencia se muestra un mensaje de confirmación del cambio y al actualizar se puede
ver que la columna fecha ya no se encuentra en la tabla DEPARTAMENTO.
42
Otra modificación que se puede realizar en una tabla es cambiar el nombre de una columna. Para el
ejemplo, se cambiará el nombre de la columna iddepartamento por id_departamento con la
sentencia que se muestra a continuación:
-- Renombrar campo
ALTER TABLE DEPARTAMENTO RENAME COLUMN iddepartamento TO id_departamento;
Cuando la sentencia es ejecutada se muestra un mensaje de confirmación del cambio y al actualizar
se puede ver que el nombre de la columna iddepartamento fue cambiado por id_departamento.
43
Al ejecutar la sentencia se muestra un mensaje de confirmación de la eliminación y al actualizar la
tabla ya no se encuentra.
Una vez vistas las sentencias DDL serán revisadas las sentencias que permiten crear restricciones.
La siguiente sentencia permite generar una restricción donde no se permiten valores nulos en la
columna idempleado de la tabla EMPLEADO.
-- Constraint NOT NULL
CREATE TABLE EMPLEADO(
idempleado NUMBER(9) CONSTRAINT NN_IDE_EMP NOT NULL,
nombre VARCHAR2(100));
Al ejecutar la sentencia se muestra un mensaje de confirmación de la creación de la tabla y al
seleccionar la tabla se pueden apreciar las columnas.
IMPORTANTE: Para continuar con los ejemplos, es necesario eliminar la tabla EMPLEADO antes de
volver a crearla. No pueden existir dos tablas con el mismo nombre.
La siguiente sentencia permite generar una restricción donde los valores de la columna idempleado
de la tabla EMPLEADO deben ser únicos (aunque no sea clave primaria).
-- Constraint UNIQUE
CREATE TABLE EMPLEADO(
44
idempleado NUMBER(9) CONSTRAINT UN_IDE_EMP UNIQUE,
nombre VARCHAR2(100));
Una vez ejecutada la sentencia se muestra un mensaje de confirmación de la creación de la tabla y
al seleccionar la pestaña Restricciones de la tabla se puede apreciar el detalle de la restricción.
Con la sentencia que se muestra a continuación, se crea la tabla EMPLEADO donde se genera una
restricción de clave foránea para relacionarla con la tabla DEPARTAMENTO.
--Constraint FOREIGN KEY
CREATE TABLE EMPLEADO(
rut VARCHAR(10) CONSTRAINT PK_RUT_EMP PRIMARY KEY,
nombre VARCHAR(50),
id_departamento NUMBER(9) CONSTRAINT FK_IDD_DEP REFERENCES
DEPARTAMENTO(id_departamento));
Cuando es ejecutada la sentencia es desplegado un mensaje de confirmación de la creación de la
tabla y al seleccionar la tabla se puede ver el detalle de las columnas.
45
Al seleccionar la pestaña Restricciones se muestra el detalle de las restricciones creadas.
46
COD VARCHAR(10) PRIMARY KEY,
CONCEPTO VARCHAR2(40) NOT NULL,
IMPORTE NUMBER(11,2) CONSTRAINT CK1_IMP_ING CHECK (IMPORTE>=0) CONSTRAINT
CK2_IMP_ING CHECK (IMPORTE<=8000));
Al ejecutar la sentencia se muestra un mensaje de confirmación de la creación de la tabla y al
seleccionar la tabla se puede ver el detalle de las columnas.
La siguiente sentencia crea una restricción donde los valores que pueden ser ingresados en la
columna descripcionestadocivil son: Soltero, Casado, Viudo, Divorciado y Conviviente Civil.
-- Constraint CHECK
CREATE TABLE ESTADO_CIVIL (
idestadocivil NUMBER PRIMARY KEY,
descripcionestadocivil VARCHAR2(30) NOT NULL CONSTRAINT CK_DES_EST CHECK
(descripcionestadocivil IN ('Soltero','Casado','Viudo','Divorciado', 'Conviviente Civil')));
La ejecución de la sentencia muestra un mensaje de confirmación de la creación de la tabla y al
seleccionar la tabla se puede ver el detalle de las columnas.
47
Al seleccionar la pestaña Restricciones se muestra el detalle de las restricciones creadas.
Sentencia SELECT.
Permite consultar los datos que contenga una tabla.
SINTAXIS SELECT:
SELECT *
FROM NombreTabla;
La query anterior se lee: “Seleccionar todas las filas de la tabla NombreTabla”.
IMPORTANTE: El símbolo * en el SELECT significa que serán mostradas todas las columnas de la
tabla.
Es posible indicar cuales son las columnas que se desean mostrar y limitar las filas que devuelve la
consulta con el condicionador WHERE. Por ejemplo:
SELECT NombreColumna1, NombreColumna2
FROM NombreTabla
WHERE NombreCampo1=’HOLA MUNDO’;
La query anterior se lee: “Seleccionar solo el NombreColumna1 y NombreColumna2 desde la tabla
NombreTabla, cuando el NombreColumna1 es igual a Hola Mundo”.
Sentencia INSERT.
Permite ingresar filas en una tabla en específico.
48
SINTAXIS INSERT:
INSERT INTO NombreTabla (NombreColumna1, …, NombreColumnaN) VALUES (ValorColumna1,
…, ValorColumnaN);
En este caso se colocan explícitamente los nombres de las columnas de la tabla.
INSERT INTO NombreTabla VALUES (ValorColumna1, …, ValorColumnaN);
En este caso NO se colocan explícitamente los nombres de las columnas de la tabla.
Por ejemplo, si se desea ingresar datos a la tabla USUARIO que contiene las siguientes columnas:
Rut que es clave primaria, el nombre y su clave. La sentencia sería de la siguiente forma:
INSERT INTO USUARIO (rut, nombre, clave) VALUES (‘17934333K’,’María José’,’clave123’);
Como se puede observar se deben completar todas las columnas con valores (VALUES). El ingreso
de los registros estará siempre condicionado si la tabla cuenta con restricciones.
Sentencia DELETE.
Permite eliminar los registros que no sean necesarios en una tabla. No se recomienda eliminar
nunca registros de la base de datos a menos que sea estrictamente necesario.
SINTAXIS DELETE:
DELETE FROM NombreTabla;
La sintaxis anterior eliminará todos los registros de la tabla NombreTabla, por lo cual su ejecución
debe ser siempre tomada con precaución.
Es posible eliminar un grupo selectivo de registros de la base de datos, por ejemplo, eliminar
usuarios cuyo nombre sea “Cristobal”. La sentencia sería la siguiente:
DELETE FROM USUARIO
WHERE nombre=‘Cristobal’;
Sentencia UPDATE.
Permite modificar uno o varios datos de una o varias filas de una tabla.
SINTAXIS UPDATE:
UPDATE NombreTabla SET columna=nuevovalor;
Por ejemplo, si se desea cambiar el nombre de “Alfreddo” que fue mal digitado (duplicidad en la
“dd” de su nombre). La sentencia quedaría de la siguiente forma:
UPDATE ALUMNO SET nombre=’Alfredo’ WHERE nombre = ’Alfreddo’;
49
sentencias SQL que se ejecutan en una base de datos como una única operación, confirmándose o
deshaciéndose en grupo.
No todas las operaciones SQL son transaccionales. Sólo son transaccionales las operaciones
correspondientes al DML, es decir, sentencias SELECT, INSERT, UPDATE y DELETE
Para confirmar una transacción se utiliza la sentencia COMMIT, al ejecutarla los cambios se escriben
en la base de datos. Para deshacer una transacción se utiliza la sentencia ROLLBACK, al ejecutarla se
deshacen todas las modificaciones realizadas por la transacción en la base de datos, quedando la
base de datos en el mismo estado que antes de iniciarse la transacción.
¿Cómo usar Oracle SQL Developer para poblar y manipular los datos del modelo físico?
A continuación, se mostrará en detalle el uso de las sentencias SQL DML. Se crearán algunas tablas
para insertar, modificar, consultar y eliminar datos con las sentencias INSERT, UPDATE, SELECT y
DELETE. Primero se creará la tabla EMPRESA:
-- Creación tabla EMPRESA
CREATE TABLE EMPRESA (
idempresa NUMBER PRIMARY KEY,
nombreempresa VARCHAR2(30) NOT NULL,
fechacreacion DATE NOT NULL);
La tabla se visualiza de la siguiente forma:
Una vez creada la tabla se ejecutarán las siguientes sentencias para insertar 2 filas en la tabla:
-- Insertar datos en empresa
INSERT INTO EMPRESA VALUES(1,'Empresa 1','01-12-2009');
INSERT INTO EMPRESA VALUES(2,'Empresa 2','24-12-2009');
Al ejecutar las sentencias es mostrado un mensaje que indica que las filas fueron insertadas y al
seleccionar la pestaña Datos se puede ver que los datos fueron almacenados en la tabla.
50
IMPORTANTE: Los valores de las fecha y textos deben ser escritos entre comillas simples.
Ahora se crearán las tablas REGION, PROVINCIA y COMUNA que están relacionadas entre sí para
posteriormente insertar datos en ellas. La siguiente imagen es parte de un modelo relacional.
51
Al actualizar se pueden ver las tablas en la aplicación:
Al ingresar al detalle de la tabla PROVINCIA y seleccionar la pestaña Modelo se pueden ver las
relaciones entre las 3 tablas creadas.
IMPORTANTE: El nombre de las tablas comienza por ADMIN. que es el nombre del esquema
asociado al usuario de conexión a la base de datos.
Una vez creadas las tablas se procede a poblarlas con datos. Primero se comienza con la tabla
REGION porque no necesita datos que provengan de otra tabla, luego se insertan datos en la tabla
PROVINCIA porque necesita datos de la tabla REGION y finalmente, se insertan datos en la tabla
COMUNA ya que necesita datos de la tabla PROVINCIA.
Será creada una secuencia para la tabla REGION con la finalidad de ingresar números que se
incrementen automáticamente para la columna idregion. La siguiente sentencia crea la secuencia
SEQ_REG que comienza en el 1 y se incrementa en 1.
--Crear secuencia tabla REGION.
CREATE SEQUENCE SEQ_REG
START WITH 1
52
INCREMENT BY 1;
Si se necesita eliminar la secuencia se debe ejecutar la siguiente sentencia:
DROP SEQUENCE SEQ_REG;
Finalmente, serán ingresados 3 filas en la tabla REGION con las sentencias mostradas a continuación:
-- Insertar datos en tabla REGION
INSERT INTO REGION VALUES(SEQ_REG.nextval,'Región de Arica y Parinacota');
INSERT INTO REGION VALUES(SEQ_REG.nextval,'Región de Tarapacá');
INSERT INTO REGION VALUES(SEQ_REG.nextval,'Región de Antofagasta');
Para la columna idregion se asigna SEQ_REG.nextval que significa que insertará el siguiente valor
de la secuencia SEQ_REG. Los datos de la tabla quedarán de la siguiente forma:
Si se desea ordenar los datos por la columna idregion pero en forma descendente se debe
seleccionar el botón Ordenar… y será desplegada una ventana donde se puede seleccionar la
columna por la cual se ordenará y el tipo de ordenamiento (ascendente o descendente).
53
Para el ejemplo, fue seleccionada la columna idregion y el ordenamiento descendente. Al presionar
el botón Aceptar las filas se muestran de la siguiente manera:
Es posible restringir la cantidad de filas que devuelve la sentencia SELECT. Por ejemplo, si se desea
solo ver los datos de la región cuyo idregion es 1 se debe ejecutar la siguiente sentencia:
SELECT * FROM REGION
WHERE idregion = 1;
El resultado sería el siguiente:
54
En la aplicación también se pueden filtrar los datos, para el caso anterior se debe seleccionar la
columna en la opción Filtrar y colocar la condición, para el ejemplo se colocó idregion=1 para que
solo se muestre la fila de la región 1. Es necesario presionar Enter para que se aplique el filtro.
Para insertar datos en la tabla PROVINCIA se creará una secuencia para la columna idprovincia. La
siguiente sentencia crea la secuencia SEQ_PRO que comienza en el 10 y se incrementa en 10.
--Crear secuencia tabla PROVINCIA.
CREATE SEQUENCE SEQ_PRO
START WITH 10
INCREMENT BY 10;
Serán insertadas 2 provincias para la Región de Arica y Parinacota.
-- Insertar datos en tabla PROVINCIA
INSERT INTO PROVINCIA VALUES(SEQ_PRO.nextval,'Provincia Parinacota',1);
INSERT INTO PROVINCIA VALUES(SEQ_PRO.nextval,'Provincia Arica',1);
En la tabla los datos fueron almacenados de la siguiente forma:
Una vez ingresadas las provincias será actualizada la descripción de la provincia 10 con la siguiente
sentencia:
-- Actualizar datos en tabla PROVINCIA
UPDATE PROVINCIA SET descripcionprovincia='Nueva Provincia'
WHERE idprovincia=10;
55
Para el ejemplo, la descripción de la provincia 10 será actualizado a Nueva Provincia.
Si se ejecuta la siguiente sentencia de UPDATE sin el WHERE la descripción de todas las filas de la
tabla PROVINCIA será actualizada a Nueva Provincia.
UPDATE PROVINCIA SET descripcionprovincia='Nueva Provincia';
Si se requiere eliminar la provincia 10 de la tabla PROVINCIA se debe ejecutar la siguiente sentencia:
-- Eliminar datos en tabla PROVINCIA
DELETE FROM PROVINCIA
WHERE idprovincia=10;
Se puede apreciar que la provincia 10 ya no se encuentra en la tabla PROVINCIA.
Finalmente, se insertará una comuna para la provincia 20. En esta ocasión no se usará una secuencia
para insertar datos en la columna idcomuna.
-- Insertar datos en comuna
INSERT INTO COMUNA VALUES(1,'Arica',20);
La fila insertada queda de la siguiente forma:
56
¿Por qué desnormalizamos un modelo normalizado?
Una vez implementado el modelo relacional en el SGBD, no se deben olvidar algunos puntos:
¿El modelo cumple con los requerimientos de negocio en tiempos de respuesta a las consultas
realizadas?
Según las necesidades del negocio, si la cantidad de registros aumenta ¿Los tiempos de respuestas
de la base de datos seguirán siendo eficientes y eficaces?
Para poder asegurar que los tiempos de respuesta de la base de datos siempre sean los esperados
por el usuario hay que considerar los siguientes puntos antes de realizar alguna modificación
estructural en la base de datos:
¿Es el SGBD adecuado para soportar el volumen de datos que debe almacenar la base de datos?
¿El hardware utilizado es el requerido por el SGBD para cumplir con los tiempos de respuesta
requeridos?
¿La configuración de la red de comunicaciones entre los servidores es la adecuada?
¿Es el modelo relacional adecuado para la solución?
¿Las consultas a la base de datos son eficientes?
Si la respuesta a las preguntas anteriores es Sí, se debe considerar desnormalizar el modelo
relacional. La desnormalización es el proceso de procura optimizar el funcionamiento de una base
de datos por medio de agregar datos redundantes. A veces es necesario porque los actuales
sistemas de gestión de bases de datos (SGBD) implementan el modelo relacional de manera
limitada.
Es necesario aclarar que la desnormalización debe realizarse después de que haya existido o se haya
realizado una normalización.
El proceso de desnormalización del modelo es una alternativa para disminuir los tiempos de
respuesta, pero se debe considerar los siguientes riesgos y costos asociados:
1. Redundancia en el modelo, por lo tanto, en algunos casos existe la necesidad de aumentar
el almacenamiento.
2. Perder la integridad de los datos al realizar las tareas de mantención.
3. Asignar más del esfuerzo necesario en tratar de optimizar todo el proceso de negocio.
4. Se debe considerar un mayor esfuerzo en la mantención de los datos.
5. El rendimiento de una base de datos tras la normalización si es adecuado no debe
desnormalizarse.
6. Valoración acerca de qué se prefiere: si una mejor integridad o un mejor rendimiento.
57
7. Valorar la operatividad en el futuro, puesto que la desnormalización mejora el rendimiento,
pero la estructura dependerá de la aplicación.
La eficiencia de incluir estos cálculos en el modelo está directamente relacionada con la frecuencia
de consulta, ya que aplicar esta estrategia conlleva esfuerzo adicional en otras tareas. Debido a que
los valores deben ser recalculados cada vez que se realiza una actualización sobre los datos
(inserción, actualización y/o eliminación de registros).
Otro ejemplo, es agregar en la tabla MEDICO el campo total_atenciones que guardar la cantidad de
atenciones pertenecientes a cada médico.
58
Unión de tablas.
Otra forma de optimizar una consulta es tener que leer la menor cantidad de tablas y registros
posibles. En el caso de las tablas que tienen relaciones 1:M es recomendable unir las tablas en una
que contenga las columnas de las dos tablas. Se recomienda utilizar esta técnica solo cuando existen
poca cantidad de atributos en la tabla.
En el ejemplo, se unen las columnas de las tablas CATEGORIA y PRODUCTO para dejar solo la tabla
PRODUCTO.
Separación de tablas.
En algunos casos hay tablas que contienen datos que son claramente identificables y que son parte
esencial del negocio. En este caso se puede hacer la separación y asignar las columnas y restricciones
de negocio que correspondan a cada caso.
Por ejemplo, la tabla PERSONA se puede dividir en las tablas CLIENTE y PROSPECTO, las cuales tienen
columnas en común pero su significado es diferente para la empresa u organización.
59
Agregar valores asociados a la temporalidad.
Muchos procesos de negocio necesitan que se realicen comparaciones de datos y/o indicadores en
el tiempo. Es por eso que se debe identificar cuáles son los datos o indicadores y su temporalidad
más demandada en las consultas, para así agregar ese valor como campo en la tabla de destino.
En el ejemplo, se almacenan los productos con los respectivos precios que han tenido a lo largo del
tiempo. Para obtener el precio actual se debe buscar en la tabla PRECIOS cual es el rango de fechas
de inicio y fin más actual que se encuentra almacenado en la tabla.
En cambio, al colocar la columna valor_actual en la tabla PRODUCTO es más rápido encontrar cual
es el precio actual del producto.
60
Creación de tablas.
Finalmente, se pueden crear tablas con las columnas necesarias para realizar una consulta
específica. Generalmente, estas tablas no tienen relación con otras tablas.
En el ejemplo, la siguiente tabla almacena los relatores que realizaron un total de cursos menor al
promedio del año.
Para esta técnica se debe considerar que debe existir un proceso que inserte las filas en dichas
tablas.
61