manual oracle completo

242
1 Copyright © Computer Aided Education, S.A. Instalación 1. INTRODUCCIÓN O racle 10g es la última versión del servidor de bases de datos empresarial de Oracle. Oracle 10g es un producto de pago en contraposición con otros servidores de bases de datos de código abierto o licencia GPL y es un servidor orientado al mundo empresarial con grandes requerimientos de rendimiento, seguridad, etc. y, por lo tanto, no adecuado para aplicaciones sencillas con un volumen de datos reducido (donde pueden ser de utilidad otras bases de datos más sencillas, como Access). Con esta nueva versión de su servidor de bases de datos, Oracle da respuesta a la utilización cada vez más frecuente de servidores gratuitos (o mucho más baratos) del mundo GPL, como MySQL o Postgres; así como a la utilización de otros servidores de pago, como Microsoft SQL Server. Y para ello introduce una forma distinta de planificar la red de servidores de bases de datos. Esta nueva idea se conoce como “grid computing”, de ahí la g de la versión de Oracle 10g. El enfoque que se aplica en grid computing es utilizar “un grupo de servidores de bajo coste conectados por software Oracle. Con el Grid Computing de Oracle las aplicaciones se ejecutarán de forma más rápida que con mainframe. Y si un servidor falla, el grid de Oracle sigue funcionando, mientras que el Mainframe se para”. La evolución hacia redes con múltiples servidores de menor potencia (y costo) en lugar de grandes equipos o mainframe conlleva muchas ventajas y Oracle lo sabe.

Upload: lauritapeli

Post on 15-Sep-2015

76 views

Category:

Documents


21 download

DESCRIPTION

oracle

TRANSCRIPT

  • 1Copyright Computer Aided Education, S.A.

    Instalacin

    1. INTRODUCCIN

    Oracle 10g es la ltima versin del servidor de bases de datos empresarial de Oracle.Oracle 10g es un producto de pago en contraposicin con otros

    servidores de bases de datos de cdigo abierto o licencia GPL y es un servidor orientado al mundo empresarial con grandes requerimientos de rendimiento, seguridad, etc. y, por lo tanto, no adecuado para aplicaciones sencillas con un volumen de datos reducido (donde pueden ser de utilidad otras bases de datos ms sencillas, como Access).

    Con esta nueva versin de su servidor de bases de datos, Oracle da respuesta a la utilizacin cada vez ms frecuente de servidores gratuitos (o mucho ms baratos) del mundo GPL, como MySQL o Postgres; as como a la utilizacin de otros servidores de pago, como Microsoft SQL Server.

    Y para ello introduce una forma distinta de planicar la red de servidores de bases de datos. Esta nueva idea se conoce como grid computing, de ah la g de la versin de Oracle 10g.

    El enfoque que se aplica en grid computing es utilizar un grupo de servidores de bajo coste conectados por software Oracle. Con el Grid Computing de Oracle las aplicaciones se ejecutarn de forma ms rpida que con mainframe. Y si un servidor falla, el grid de Oracle sigue funcionando, mientras que el Mainframe se para.

    La evolucin hacia redes con mltiples servidores de menor potencia (y costo) en lugar de grandes equipos o mainframe conlleva muchas ventajas y Oracle lo sabe.

  • 2Instalacin

    Sin embargo, nosotros no nos centraremos en este asunto, sino que estudiaremos Oracle 10g desde el punto de vista del diseador y programador de bases de datos, conociendo los distintos objetos que puede crear, su integracin con herramientas de desarrollo, etc., por lo que es conveniente tener conocimientos bsicos de programacin.

    Oracle 10g aparece en distintas ediciones de forma que sea ms fcil acceder a las necesidades de las empresas, desde pequeas y medianas hasta grandes organizaciones.

    La posibilidad de elegir entre una u otra edicin permite que las empresas compren y utilicen el producto que mejor se adapte a su negocio e incluso a su presupuesto.

    A continuacin se detalla cada una de las ediciones disponibles:

    Oracle 10g Express Edition: se trata de la edicin gratuita. Como tal, dispone de la mayora de las caractersticas de Oracle 10g, aunque algunas de ellas estn realmente limitadas.

    Es la edicin ideal para estudiantes o todos aquellos que quieren experimentar con Oracle y ms tarde aumentar las prestaciones de su base de datos comprando una licencia de Oracle 10g.

    Oracle 10g Standard Edition y Standard Edition One: es una base de datos de caractersticas completas para pequeas y medianas empresas que requieren el desempeo, la disponibilidad y la seguridad de una base de datos empresarial a un bajo costo.

    Oracle 10g Enterprise Edition: es la edicin ms completa de Oracle 10g y es idnea para las organizaciones ms grandes y para los requisitos ms complejos. Todas las caractersticas de Oracle 10g estn disponibles en esta edicin, tanto referentes a OLTP como a OLAP.

    Oracle 10g Personal Edition: permite a los programadores generar todo tipo de aplicaciones sobre Oracle. Incluye todas las funciones de Oracle 10g Enterprise Edition, pero se autoriza su uso a un nico usuario, por lo que es til como sistema de desarrollo y prueba, no como servidor de produccin.

    sta es la edicin que utilizaremos a lo largo del curso.

    2. EDICIONES DE ORACLE 10g

    Utilizaremos la revisin

    Release 2 de Oracle 10g.

  • 3Copyright Computer Aided Education, S.A.

    Instalacin

    Oracle 10g est disponible para distintos sistemas operativos: Unix, Windows y Linux, incluyendo plataformas de 32 y 64 bits.

    Todas las ediciones estn disponibles para su prueba descargndolas gratuitamente desde el sitio web de Oracle. Posteriormente, deber comprar la correspondiente licencia para sus servidores de produccin.

    La eleccin de una u otra edicin se fundamenta en las necesidades empresariales. En muchas pequeas y medianas empresas es suciente con la edicin Standard; mientras que las grandes organizaciones requerirn de las prestaciones de la edicin Enterprise.

    La instalacin de Oracle 10g es relativamente sencilla, ya que se ha preparado un asistente para ello. Sin embargo, debido a que se tienen que tomar ciertas decisiones, es importante estudiarla.

    Una vez introducimos el CD de instalacin, aparecer la ventana que puede ver a continuacin.

    3. INSTALACIN

    Es necesario tener permisos

    de adminis-trador en el

    equipo donde se va a instalar

    Oracle 10g

  • 4Instalacin

    Debe pulsar el botn Install/Deinstall Products, con lo que iniciar el asistente de instalacin.

    Este asistente se divide en dos pasos que hay que realizar en este orden: preparar la instalacin y realizarla.

    Y es que previamente a instalar Oracle 10g, debemos asegurarnos de disponer del hardware y software necesarios. El instalador har una revisin de todo ello y, en caso necesario, instalar componentes adicionales o le avisar de posibles problemas.

    Podemos realizar una instalacin estndar del servidor de base de datos, con lo que simplemente indicaremos la ubicacin de la instalacin, qu edicin queremos instalar y si deseamos crear una base de datos inicial; o elegir la opcin de la instalacin avanzada, con lo que podremos establecer otras opciones.

    Veamos los pasos de una instalacin avanzada. En el primer paso del asistente debemos indicar la edicin que queremos instalar. El programa instalador es el mismo para cualquiera de las ediciones, por lo que deberemos elegir los componentes para los que disponemos de la correspondiente licencia.

    Nosotros elegiremos la edicin Personal Edition.

  • 5Copyright Computer Aided Education, S.A.

    Instalacin

    Tras elegir la edicin que queremos instalar, el asistente nos solicita que indiquemos el nombre y ubicacin del directorio home de la instalacin.

    Oracle puede instalarse ms de una vez en el mismo equipo siempre que se haga en directorios home distintos. De ah que no slo tengamos que indicar dicha ubicacin sino un nombre descriptivo.

    Seguidamente podemos indicar si queremos que durante el proceso de instalacin se cree una base de datos inicial. Podemos hacerlo ahora o ms tarde, una vez instalado el software del servidor de bases de datos.

    Nosotros instalaremos nicamente el software de base de datos para crear la base de datos despus y que vea cmo hacerlo.

    Finalmente, se muestra un resumen de la instalacin que se efectuar a continuacin por si necesitramos cambiar algn detalle. Deberemos pulsar en el botn Instalar para que se inicie la instalacin completa.

    Con estos sencillos pasos nalizaremos la instalacin del software del servidor de bases de datos. Despus, podremos crear las correspondientes bases de datos.

  • 6Instalacin

    Una vez instalado el software del servidor de bases de datos Oracle, el siguiente paso previo a crear cualquier base de datos (si no se ha creado una base de datos durante la instalacin anterior) es congurar adecuadamente la red.

    Para ello, se utiliza el Asistente de Conguracin de Red. Esta herramienta la encontrar en la carpeta Herramientas de Conguracin y de Migracin del grupo de programas de Oracle del men de Inicio.

    Tendr un grupo de este tipo por cada instalacin o directorio home de Oracle.

    Aunque ahora no entraremos en detalles, es necesario congurar un listener para que las aplicaciones cliente puedan solicitar servicios del servidor de bases de datos. Esto lo podemos hacer fcilmente con este asistente.

    El detalle ms importante a la hora de crear un listener es el protocolo o protocolos de red que se utilizarn.

    Como el propsito del listener es encargarse de las conexiones remotas, es decir, de aplicaciones situadas en equipos distintos al servidor, lo ms habitual es congurar nicamente el protocolo TCP/IP.

    Esto lo podemos ver en la gura de la pgina siguiente.

    4. ASISTENTE DE CONFIGURACIN DE RED

  • 7Copyright Computer Aided Education, S.A.

    Instalacin

    Si elige el protocolo TCP/IP, podr indicar en qu puerto atender el listener las solicitudes. El puerto predeterminado es el 1521.

    Es muy importante recordar que se debe crear al menos un listener antes de crear cualquier base de datos. Si se eligi crear una base de datos inicial durante la instalacin del servidor, esto se hace automticamente.

    El servidor de Oracle de-ber poder atender las

    solicitudes en dicho puerto, o lo que es lo

    mismo, deber tenerlo abierto si se utiliza un

    firewall para proteger la

    red.

  • 8Instalacin

    Durante la instalacin del software de servidor de bases de datos Oracle podemos hacer que se cree una base de datos inicial o decidir crearla ms tarde.

    Nosotros hemos elegido esta ltima opcin para que pueda ver ahora cmo creara una base de datos en cualquier momento utilizando la herramienta Asistente de conguracin de bases de datos.

    Este asistente est disponible en el grupo de programas del directorio home o raz de Oracle que acaba de instalar. En nuestro caso, el grupo se llamar Oracle - OraDb10g_home1. Busque el asistente en la carpeta Herramientas de Conguracin y Migracin.

    Si durante una instalacin estndar de Oracle 10g decidimos crear una base de datos, el asistente que acabamos de lanzar es ejecutado automticamente sin necesidad de ninguna interaccin con nosotros.

    Esto no permite que podamos anar un poco las caractersticas de nuestra base de datos, crendose una base de datos de carcter general.

    5. CREAR BASES DE DATOS

  • 9Copyright Computer Aided Education, S.A.

    Instalacin

    Si deseamos personalizar la base de datos que vamos a crear, podemos elegir la instalacin avanzada o ejecutar el asistente de conguracin de la base de datos que puede ver en la gura anterior.

    Una vez seleccionamos crear una nueva base de datos deberemos indicar el tipo de base de datos. Principalmente disponemos de dos opciones especiales o crear una base de datos de carcter general.

    Las opciones especiales son:

    Crear una base de datos preparada como Almacn de datos: para tareas de anlisis de datos OLAP.

    Crear una base de datos preparada para respaldar aplicaciones de Procesamiento de transacciones OLTP, como aplicaciones de comercio electrnico, procesamiento de pedidos, banca electrnica, etc.

    Al elegir uno u otro tipo de base de datos, sta se congurar con las propiedades ms adecuadas para esos propsitos, aunque siempre podremos cambiar dicha conguracin ms tarde. Nosotros elegiremos crear una base de datos de carcter general.

    En el siguiente paso debemos indicar el nombre de la base de datos. Este nombre consta de dos partes: su nombre en s y su dominio.

  • 10

    Instalacin

    El dominio suele corresponderse con el dominio de la red de ordenadores de la empresa aunque esto no es obligatorio. La combinacin de ambos detalles forman el Nombre de la Base de Datos Global, que tiene que ser nico en cada instancia del servidor.

    Por ejemplo, crearemos una base de datos para una tienda de comercio electrnico cticia de Internet. La tienda se llamar Tiendadetalles.com, por lo que el nombre global ser:

    bd.tiendadetalles.com

    Fjese que el nombre de la base de datos es bd y el nombre del dominio tiendadetalles.com. En la parte inferior vemos el SID o identicador de la instancia del servidor.

    Seguidamente accedemos a la pgina de opciones de gestin de la base de datos que estamos creando, donde indicaremos qu herramientas queremos utilizar para ello.

    Una de las herramientas incorporadas en cualquier instalacin de Oracle 10g es Enterprise Manager Database Control (DC).

    Esta herramienta slo permite gestionar una base de datos en particular, mientras que Enterprise Manager Grid Control (GC) permite gestionar ms de una a la vez.

    Nosotros utilizaremos Database Control, que es la opcin activada por defecto.

  • 11Copyright Computer Aided Education, S.A.

    Instalacin

    En este paso tambin podremos congurar ahora detalles respecto a las noticaciones de correo electrnico y a la forma de realizar copias de seguridad de la base de datos, pero lo veremos ms tarde.

    En el paso nmero 5 del asistente debe crear la contrasea o contraseas para las cuentas de usuario de la base de datos. Por defecto se crean cuatro usuarios de carcter administrativo: SYS, SYSTEM, DBSNMP y SYSMAN.

    Aqu puede establecer la misma contrasea para todos ellos o una distinta para cada uno.

    En el paso nmero 6 podemos congurar la forma en que se administrar el espacio en disco donde se almacenar la base de datos.

    Tenemos la opcin ms comn, que es almacenarla en un determinado sistema de archivos (por ejemplo, en cualquier particin formateada del disco duro) o dos opciones ms avanzadas, que delegan esta tarea en Oracle: Gestin de Almacenamiento Automatizada y Dispositivos Raw.

    En el paso nmero 7 elegiremos la ubicacin donde se guardarn los archivos de la base de datos. Podemos establecer una ubicacin determinada o elegir la predeterminada de la plantilla que hemos utilizado (base de datos de carcter general, en este caso).

    En un entorno de produccin es conveniente utilizar contra-seas distintas

    para cada cuenta admi-

    nistrativa.

  • 12

    Instalacin

    En el paso nmero 8 se establece el rea donde se crearn las copias de seguridad, conocida como rea de Recuperacin de Flash. Ya lo veremos.

    En el paso 9 el asistente tambin permite instalar ejemplos de bases de datos reales: de recursos humanos, procesamiento de rdenes o pedidos, historial de ventas, etc.

    Utilizar el paso 10 del asistente para denir varios ajustes o parmetros de la conguracin de la base de datos referentes a la memoria, al tamao de la base de datos, al juego de caracteres utilizado y al modo de conexin.

    Por ejemplo, en la cha o pestaa Juego de Caracteres podemos elegir el juego de caracteres de nuestro sistema operativo o Unicode, que permite almacenar caracteres de cualquier idioma.

    Si la aplicacin o aplicaciones que utilizarn la base de datos se pueden ejecutar en distintos idiomas, sera adecuado elegir almacenar la informacin de la base de datos en Unicode.

    Tambin podremos especicar el idioma por defecto de la base de datos y cmo se almacenarn las fechas. El formato de Espaa es da-mes-ao (dd-mm-aaaa).

    En el paso nmero 11 podremos revisar y cambiar la ubicacin de los archivos que la componen: archivos de control, archivos de datos y archivos de recuperacin (logs).

  • 13Copyright Computer Aided Education, S.A.

    Instalacin

    Como todava no conocemos estos conceptos, no cambiaremos ningn detalle aqu.

    Finalmente, el asistente nos pregunta si queremos crear una base de datos con todos los ajustes establecidos o guardarlos como una plantilla o modelo para crear bases de datos a partir de ella.

    Pulsando el botn Terminar, crear la base de datos. Veremos que muchos de los detalles que hemos tenido que elegir durante el asistente se pueden ajustar ms tarde, cuando tengamos ms conocimientos para ello.

  • 1Copyright Computer Aided Education, S.A.

    Arquitectura de una base de datos Oracle

    1. INSTANCIAS

    Una base de datos Oracle est compuesta por una serie de archivos que se almacenan en un sistema de archivos u otro medio de almacenamiento, segn como se haya congurado la base de datos.

    Pero para poder acceder a la informacin almacenada en estos archivos, es necesario que en el servidor de bases de datos se ejecute unos determinados procesos y que se reserve memoria del servidor para ello.

    El conjunto de esos procesos y de la memoria reservada recibe el nombre de instancia y es la parte lgica de una base de datos que permite acceder a los datos almacenados en sta.

    Como tal, la instancia de la base de datos tiene que estar iniciada para poder acceder a los datos. Si no es as, los datos seguirn estando disponibles en los correspondientes archivos pero no habr forma de acceder a ellos hasta que la instancia vuelva a levantarse.

    En Windows todo esto se corresponde con servicios, que son aplicaciones que actan de forma similar al sistema operativo, ya que se ejecutan normalmente en un segundo plano, sin que el usuario se d cuenta de ello.

    Aqu podemos ver los servicios de Windows que se generan al crear una base de datos y, por lo tanto, que representan una determinada instancia de la base de datos:

    OracleServiceSID: donde SID es el identicador de la base de datos (en este caso BD). Representa la instancia propiamente dicha.

  • 2Arquitectura de una base de datos Oracle

    OracleORACLE_HOMETNSListener: representa un listener que atiende las solicitudes del acceso a la base de datos.

    OracleDBConsoleSID: el cual permite conectarse a la principal herramienta de administracin de Oracle, Enterprise Manager.

    Como puede ver, estos tres servicios estn iniciados actualmente y tienen su inicio como automtico, lo que quiere decir, que se inician al hacerlo el sistema operativo.

    Por lo tanto, la instancia de nuestra base de datos bd.tiendadetalles.com est disponible y el listener que atender las peticiones tambin.

    Slo nos falta utilizar una aplicacin cliente para acceder a la base de datos y que solicitar estos servicios al listener.

    Por otra parte, durante la instalacin de Oracle se crea el grupo de Windows ora_dba, cuyos miembros reciben los privilegios necesarios para realizar tareas administrativas en el servidor (role SYSDBA, como despus veremos).

    Si necesita que un determinado usuario de Windows pueda realizar estas tareas, adalo al grupo ora_dba.

  • 3Copyright Computer Aided Education, S.A.

    Arquitectura de una base de datos Oracle

    Una de esas tareas administrativas es congurar adecuadamente la forma en que se comunica el servidor (o una instancia de base de datos) con las aplicaciones cliente.

    Aunque vimos que esto era sencillo conseguirlo con el Asistente de Conguracin de Red, debemos conocer la existencia de otras herramientas que nos permitirn modicar posteriormente dicha conguracin. Una de ellas, aunque no la nica, es Net Manager.

    Net Manager est disponible entre las herramientas de conguracin del grupo de programas de Oracle del men Inicio.

    El nombre Net Manager no es casual, ya que permite congurar la tecnologa conocida como Oracle Net.

    Oracle Net es un componente de software que se instala tanto en el servidor como en los equipos cliente y que es el responsable de establecer y mantener la comunicacin (conexiones) entre ellos. Para ello, se basa principalmente en dos aspectos o conceptos:

    El listener o proceso del servidor que espera las solicitudes de los clientes.

    Un mtodo para describir el servicio al que los clientes desean conectarse.

    2. ARQUITECTURA DE RED

  • 4Arquitectura de una base de datos Oracle

    Net Manager permite establecer ambos aspectos. En la carpeta Perl podemos indicar qu mtodos queremos poner a disposicin de las aplicaciones cliente para que puedan describir el servicio de base de datos Oracle al que desean acceder.

    Tenemos varios mtodos, aunque el ms utilizado es TNSNAMES, que consiste en la existencia de un archivo especial (tsnames.ora) donde se describe cmo realizar la conexin con el servidor. Normalmente no es necesario modicar los mtodos seleccionados.

    En la carpeta Nomenclatura de Servicios describimos las conexiones con las bases de datos disponibles en el servidor. Es una forma sencilla de indicar todo lo que tiene que conocer la aplicacin cliente para conectarse con dicha base de datos.

    Por ejemplo, vemos que aqu aparece un servicio con el nombre bd. Pues con el nombre de servicio bd, lo que realmente estamos describiendo es la forma de acceder a la base de datos bd.tiendadetalles.com del equipo SERVIDORBD a travs del puerto TCP/IP 1521.

    Qu quiere decir esto? Pues que las aplicaciones slo necesitan utilizar la descripcin del servicio bd para conectarse a esta base de datos.

  • 5Copyright Computer Aided Education, S.A.

    Arquitectura de una base de datos Oracle

    Si ms tarde cambiara la forma de conectarse con la base de datos, simplemente tendramos que cambiar la descripcin del servicio, pero las aplicaciones seguiran funcionando perfectamente.

    Si las carpetas anteriores describen la forma o mtodos en que las aplicaciones cliente intentarn conectarse con el servidor, la carpeta Listener muestra justamente lo contrario.

    Es decir, qu recursos (o listeners) estn congurados en el servidor para ello. La conguracin del listener se efecto al ejecutar el Asistente de Conguracin de Red, donde indicamos que se utilizara el protocolo TCP/IP a travs del puerto 1521.

    Tambin puede aparecer que se utiliza el protocolo IPC para conexiones en que el servidor y la aplicacin cliente estn en el mismo equipo.

    stos son los protocolos de red que se pueden congurar en un listener:

    IPC: para conexiones locales (servidor y cliente en el mismo equipo).

    Canalizaciones con nombre (Named pipes), TCP/IP y TCP/IP on SSL (comunicacin segura) para las conexiones remotas.

  • 6Arquitectura de una base de datos Oracle

    La conguracin del listener queda reejada en otro archivo especial (listener.ora).

    Vemos, por lo tanto, que esta herramienta nos permite descubrir y congurar apropiadamente tanto la forma en que las aplicaciones cliente intentarn establecer conexin con el servidor (pudiendo congurar una nomenclatura de servicio) como la forma en que el servidor aceptar dichas conexiones (a travs de un listener).

    La buena noticia es que la conguracin de todo esto suele realizarse automticamente con el Asistente de Conguracin de Red y al crear las bases de datos, por lo que slo tendremos que preocuparnos de ello cuando necesitemos congurar los equipos cliente.

    Pero sin lugar a dudas, la herramienta que ms utilizaremos tanto como administrador como para lo que ms nos preocupa ahora, que son las labores de diseador/programador de bases de datos, es Enterprise Manager.

    Se trata de una aplicacin web a la que podr acceder desde el grupo de programas de Oracle. Busque un elemento como Database Control - SID, donde en nuestro caso SID sera bd.

    3. ENTERPRISE MANAGER

  • 7Copyright Computer Aided Education, S.A.

    Arquitectura de una base de datos Oracle

    Enterprise Manager est disponible en dos versiones:

    Database Control: versin en la que slo se puede administrar una base de datos.

    Grid Control: versin capaz de administrar muchas bases de datos (grid computing).

    Nosotros utilizaremos la ms sencilla, esto es, Enterprise Manager Database Control, para administrar y crear nuestra base de datos.

    Debemos identicarnos en la pgina de inicio, utilizando una de las cuentas de usuario creadas durante la creacin de la base de datos bd.tiendadetalles.com. Por ejemplo, el usuario SYS, que es administrador de la base de datos.

    Una vez introducidos el nombre de usuario, la correspondiente contrasea y cmo queremos conectarnos, pulsaremos en el botn Conectar y accederemos al entorno de Database Control. Obsrvelo en la gura de la pgina siguiente.

    EM Database Control sirve tanto para administrar la instancia y base de datos como de cara al diseador o programador de la misma, permitiendo crear tablas, ndices, procedimientos almacenados, etc. La ventaja que tiene es que se puede utilizar desde cualquier equipo donde se disponga de un navegador web, ya que es lo nico que se necesita.

  • 8Arquitectura de una base de datos Oracle

    Ya sabemos que la instancia es la parte lgica de una base de datos, ya que acta de intermediario entre las solicitudes realizadas al listener y los datos propiamente almacenados en ella.

    Ahora debemos conocer de qu archivos fsicos est formada una base de datos Oracle. Y para ello, podemos utilizar EM Database Control en su cha o pestaa Administracin.

    En esta cha encontramos una seccin denominada Administracin de la Base de Datos. Aqu podremos encontrar todos los detalles de la base de datos.

    Una base de datos Oracle consta de:

    Al menos un archivo de control: donde se almacena informacin importante de la instancia, como su nombre, la fecha en la que fue creada y el estado de los archivos de copia de seguridad y recuperacin.

    Es necesario disponer de un archivo de control operativo, por lo que normalmente se dispone de ms de una copia.

    4. ARCHIVOS DE UNA BASE DE DATOS

  • 9Copyright Computer Aided Education, S.A.

    Arquitectura de una base de datos Oracle

    Aqu podemos ver que nuestra base de datos dispone de tres archivos de control. Podemos ver sus nombres y la ubicacin de cada uno de ellos.

    Archivos de recuperacin o Redo Logs: mantienen el seguimiento de las transacciones realizadas en la base de datos, de forma que pueda ser recuperada en caso de fallo o estado inconsistente de los datos.

    Ya que son cruciales para el buen funcionamiento de una base de datos, normalmente se mantiene ms de un grupo de archivos de recuperacin.

    Y, nalmente, archivos de datos: donde realmente se almacenarn los datos a los que tienen acceso las distintas aplicaciones que lo solicitan.

    En la gura siguiente podemos ver los archivos de datos de que consta la base de datos. Sin embargo, los archivos de datos no son una unidad de administracin, es decir, que no podemos realizar tareas de copia de seguridad o recuperacin de los archivos de datos sino de otro concepto superior, que son los tablespace.

    Cada archivo de datos pertenecer a un tablespace, pero en un tablespace podremos encontrar ms de un archivo de datos.

  • 10

    Arquitectura de una base de datos Oracle

    Oracle permite administrar los tablespace, estableciendo caractersticas como el tamao de bloque o unidad mnima que se puede leer/escribir de una base de datos; se pueden realizar tareas de copia de seguridad y restauracin de los tablespace; se puede poner como slo lectura el contenido de un tablespace o incluso ofine, etc.

    Utilizando el concepto de tablespace se facilita la labor del administrador, ya que ste no tiene que preocuparse de cmo se crean los archivos donde realmente se almacena la informacin.

    Como diseador o programador de bases de datos puede que se est preguntando para qu necesita conocer todo esto.

    No se preocupe, pronto entraremos a estudiar los objetos lgicos de una base de datos, como las tablas, ndices, vistas, procedimientos almacenados, etc.

    Sin embargo, es necesario conocer algunos aspectos de la arquitectura de una base de datos Oracle ya que, inevitablemente, nos los encontraremos al crear estos ltimos objetos.

  • 1Copyright Computer Aided Education, S.A.

    Tablas

    1. INTRODUCCIN

    Las tablas son el objeto principal de una base de datos relacional como Oracle, aunque no el nico.En las tablas es donde se guarda la distinta informacin,

    almacenndola en forma de registros o las que se componen de columnas o campos.

    As, si disponemos de una tabla para almacenar la informacin de los clientes de nuestra empresa, tendremos que en ella cada la o registro representa un determinado cliente, mientras que cada columna o campo de dicha la es un determinado detalle de dicho cliente: su nombre, sus apellidos, direccin, telfono, etc.

    El conjunto de tablas es algo que tenemos que crear con cuidado y detenimiento para que la base de datos sea eciente.

    Para ello, existen tcnicas de anlisis y diseo que se deben aplicar. En todo proyecto medianamente serio esto es necesario y slo en aquellos ejemplos muy sencillos no har falta (pero entonces, tampoco tiene sentido utilizar una herramienta tan potente como Oracle).

    Por lo tanto, supondremos que disponemos de un buen diseo de tablas (y ms tarde veremos que tambin de relaciones) y que deseamos crearlo en Oracle.

    Ese diseo se corresponder, en nuestro caso, con la base de datos necesaria para respaldar la aplicacin web de la tienda virtual de Internet TiendaDetalles.com, as que debe esperar tablas para almacenar los detalles de los clientes, de los productos que se venden, de los pedidos, etc.

    La herramienta adecuada para crear tablas y otros objetos es Enterprise Manager Database Control, ya que facilita esta labor de una forma totalmente visual.

  • 2Tablas

    Puede acceder a esta herramienta desde el men Inicio de Windows, ya que aparece en el grupo de programas de Oracle. Tambin puede hacerlo escribiendo directamente en su navegador la URL:

    http://NombreEquipo:1158/em/

    donde aqu se indica el puerto 1158, que es el predeterminado, pero puede ser cualquier otro que se asign al crear la base de datos.

    Para acceder a esta herramienta como administrador de la base de datos, puede utilizar el usuario SYS (con su correspondiente contrasea) y el rol SYSDBA en la lista Conectar como.

    Antes de crear cualquier tabla u otro tipo de objeto, es importante conocer que se almacenan en un determinado esquema o espacio de nombres.

    Los esquemas se corresponden con los usuarios de una base de datos, por lo que para poder guardar los objetos en un determinado esquema, deberemos haber creado previamente dicho usuario.

    Al crear la base de datos tambin se ha creado una serie de esquemas que podramos utilizar, pero que no es conveniente hacerlo, ya que se crearon con nes administrativos.

    As, las tablas, vistas y dems que encontraremos en un esquema como SYS son objetos del sistema y no tienen el propsito de guardar objetos de usuario.

  • 3Copyright Computer Aided Education, S.A.

    Tablas

    Por lo tanto, crearemos un usuario para utilizar su esquema y almacenar en l los distintos objetos.

    Para ello, sitese en la cha o pestaa Administracin y haga clic en el enlace a Usuarios en el apartado Usuarios y Privilegios de la seccin Esquema. Seguidamente, pulse en el botn .

    Cada cuenta de usuario viene protegida por una contrasea. Es decir, que si no se conoce sta, no se podr utilizar el usuario para acceder a la base de datos. De ah que sea muy importante utilizar contraseas lo sucientemente complejas.

    Adems, este usuario deber tener una determinada cuota en su tablespace para crear objetos. Como hemos elegido el tablespace predeterminado, ste ser USERS. Aplique dicha cuota de disco en la cha Cuotas.

  • 4Tablas

    Una vez creado el usuario (y, por lo tanto, el esquema), podremos empezar a pensar en las tablas que necesitamos para nuestra aplicacin.

    En la seccin Esquema encontramos enlaces para crear y editar los objetos ms importantes de una base de datos, como las tablas.

    Esta pgina representa la estructura habitual que encontraremos al trabajar en Database Control. Normalmente dispondremos de un campo de bsqueda y, debajo de l, la lista de objetos con los que estamos trabajando.

    En dicha lista podremos encontrar botones para crear, editar y eliminar dichos objetos.

    Por ejemplo, para crear una tabla, pulsaremos en el botn Crear de la lista de tablas (que inicialmente aparece vaca).

    En ocasiones nos encontraremos que en la misma pgina aparecen dos botones iguales: uno en la parte superior de una lista y otro en la parte inferior. Ambos botones realizan la misma funcin por lo que podemos utilizar cualquiera de ellos. Esto est pensado para facilitar el trabajo con listas largas de objetos.

    2. CREAR TABLAS

  • 5Copyright Computer Aided Education, S.A.

    Tablas

    Lo primero que tenemos que indicar al crear una tabla es si ser de tipo estndar u organizada por ndices. Nosotros elegiremos estndar.

    Seguidamente, accedemos a una pgina que se divide en dos partes: en la parte superior indicaremos caractersticas generales de la tabla, como su nombre, esquema o tablespace.

    Y en la parte inferior la lista de columnas o campos de la tabla, con todas sus caractersticas.

    Adems del nombre de cada campo, tambin debemos indicar el tipo de datos de los campos o columnas de la tabla.

    sta es sin duda la propiedad ms importante de un campo ya que determina o limita la informacin que puede almacenar.

    Oracle proporciona tipos de datos para prcticamente cualquier tipo de informacin que deseemos guardar. As, si se trata de texto, podremos utilizar tipos de datos de texto; si se trata de valores numricos, utilizaremos un tipo de datos adecuado para ello; si son fechas, lo mismo...

    Por ejemplo, para los campos de tipo NUMBER podremos especicar la precisin (columna tamao) y escala. La precisin representa el nmero total de dgitos que podr representarse (incluyendo la parte decimal), mientras que la escala es el nmero mximo de decimales.

    Finalmente, debemos indicar si se permiten o no los valore nulos (NULL).

    Un valor nulo o NULL es un valor especial ya que representa un valor desconocido o indeterminado. Por lo tanto, es diferente al valor 0 o a la cadena de texto vaca, ya que estos dos ltimos son valores vlidos.

    En algunos campos de una tabla tendr sentido permitir valores nulos. Por ejemplo, si no queremos exigir que nuestros clientes proporcionen su fecha de nacimiento, permitiremos los valores nulos en ese campo para que simplemente no necesiten indicarlo.

    Sin embargo, en otros casos esto no es posible. El identicador del cliente es tan importante (distingue un cliente de otro) que no puede ser NULL, por lo que no tiene sentido permitirlo.

    Oracle trans-formar los

    nombres introducidos

    a maysculas, siempre que

    no lo hayamos introducido entre comi-llas dobles,

    en cuyo caso respetar la

    combinacin de maysculas

    y minsculas utilizada y

    exactamente igual tendrn que ser refe-

    renciados pos-teriormente.

  • 6Tablas

    Aunque Oracle acepta acentos y caracteres latinos (como la ), no es conveniente utilizarlos en general en los nombres de bases de datos, tablas o campos. Tampoco es conveniente utilizar espacios en blanco, ya que diculta posteriormente las consultas.

    Adems, pasar a maysculas tanto el nombre de las tablas como de las distintas columnas.

    Finalmente, debemos aadir un detalle ms a la tabla, que es su clave principal o primaria.

    La clave principal de una tabla es aquel campo o conjunto de campos cuyos valores identican unvocamente cada registro. Es decir, que son distintos para cada uno de ellos.

    En ocasiones podemos encontrar un detalle que tiene estas caractersticas (podramos haber pensado utilizar el nmero del carn de identidad de nuestros clientes, por ejemplo) y en otros lo creamos nosotros mismos.

    Esto es lo que hemos hecho en esta tabla de Clientes con el campo IdCliente, as que vamos a indicar que es su clave principal o primaria.

    Para establecer la clave principal de una tabla, acceda a la cha Restricciones de la denicin de la tabla, seleccione el tipo de restriccin PRIMARY y pulse en Agregar.

    Si desea incluir caracteres que

    no aparecen en el alfabeto ingls u otros, como espacios

    en blanco, delimite el

    identificador con comillas

    dobles (").

  • 7Copyright Computer Aided Education, S.A.

    Tablas

    Acceder a una nueva pgina donde debe seleccionar la columna que formar la clave principal y pasarla desde la lista de Columnas Disponibles a la de Columnas Seleccionadas.

    La clave principal puede constar de ms de un campo, en cuyo caso situaramos todos esos campos en la lista Columnas Seleccionadas.

    Adems, al establecer un campo como clave principal, ya no se permiten valores nulos en l.

    RECUERDE: Durante la creacin de una tabla se aaden campos y se eligen sus tipos de datos. Finalmente, no debemos olvidar establecer su clave principal.

    Para continuar, he creado algunas tablas ms ya que ahora sabe cmo hacerlo: Tabla CarritoCompra: en esta tabla almacenaremos los

    detalles de los productos que el cliente ha decidido aadir a su compra (junto a las cantidades para cada uno de ellos).

    Recuerde que se trata de una aplicacin de comercio electrnico, donde el usuario aade productos en una especie de carrito o cesta de la compra para nalmente decidirse por comprarlos.

    Tabla Categorias: incluye la descripcin de cada categora de productos que tenemos en nuestra tienda virtual. Por ejemplo, artculos de decoracin, utensilios de cocina, etc.

    Tabla Ordenes: representa un pedido en rme efectuado por un cliente.

    3. TIPOS DE DATOS NUMRICOS

  • 8Tablas

    Tabla Productos: permite almacenar los detalles descriptivos sobre los productos que tenemos en la tienda virtual.

    En Oracle 10g disponemos de dos tipos principales de datos: los tipos del sistema y los tipos denidos por el usuario utilizando herramientas de programacin, como PL/SQL o Java.

    En cuanto a los tipos del sistema, podremos encontrar tipos numricos, de texto, fecha y hora, para datos grandes y otros.Empecemos con los tipos numricos.

    Oracle dispone de dos tipos de datos numricos: NUMBER para valores que se almacenan de forma exacta y con una determinada precisin; y el par BINARY_DOUBLE / BINARY_FLOAT para almacenar valores de coma otante.

    Esto quiere decir que normalmente utilizaremos el tipo NUMBER para representar la mayora de valores numricos, tanto enteros como con decimales.

    Al denir una columna o variable como NUMBER, podemos especicar dos caractersticas del tipo de datos: su precisin y escala.

    Por ejemplo, en la tabla Productos vemos que el campo IDPRODUCTO es de tipo NUMBER(6) o NUMBER(6, 0), donde el primer nmero representa la precisin o nmero mximo de dgitos del valor (contando tanto a la izquierda como a la derecha del separador decimal), y el segundo la escala o el nmero mximo de decimales del valor.

    Como en este caso queremos representar un valor entero, hemos indicado 0 para la escala. Oracle tambin acepta otros sinnimos de tipos enteros, como INT o INTEGER, pero siempre se almacenan como NUMBER.

  • 9Copyright Computer Aided Education, S.A.

    Tablas

    Para el caso del campo PESO permitiremos que ste tenga como mximo 8 dgitos de los cuales 3 sern para la parte decimal del valor.

    Finalmente, en el caso del campo PRECIO vemos cmo podemos almacenar valores monetarios. Como se puede necesitar gran precisin y los valores pueden ser muy grandes, se utiliza una precisin de 19 dgitos, de los cuales 4 sern para la parte decimal.

    A continuacin se muestran algunos ejemplos:

    Valor Tipo de datos Se almacena como123.89 NUMBER 123.89123.89 NUMBER(3) 124123.89 NUMBER(6, 2) 123.89123.89 NUMBER(6, 1) 123.9123.89 NUMBER(4, 2) Supera la precisin123.89 NUMBER(6, -2) 100

    Fjese que si la escala es negativa, realmente representa el nmero de dgitos signicativos a la izquierda del separador decimal.

    Para valores de coma otante, utilizaremos BINARY_DOUBLE y BINARY_FLOAT para ello.

    Tambin se admite el sinnimo FLOAT para representarlos.

    El uso ms frecuente de este tipo de datos lo encontramos cuando trabajamos con valores cientcos o tcnicos.

    La diferencia entre BINARY_DOUBLE y BINARY_FLOAT radica en el rango de valores que se pueden representar y, por lo tanto, tambin en el espacio que ocupan.

    BINARY_DOUBLE utiliza 9 bytes de almacenamiento (de los cuales 1 es para la longitud) y BINARY_FLOAT 5 bytes de almacenamiento (de los cuales 1 es para la longitud).

    Para almacenar cadenas de caracteres o texto en nuestra base de datos, disponemos de hasta cuatro tipos de datos: CHAR y VARCHAR2; y las correspondientes versiones para caracteres Unicode: NCHAR y NVARCHAR2.

    4. TIPOS DE DATOS DE TEXTO

  • 10

    Tablas

    Los tipos de datos que empiezan por una n almacenan las cadenas de caracteres con el formato o codicacin Unicode, lo que permite representar prcticamente cualquier carcter de cualquier idioma.

    Esto se consigue almacenando cada carcter como 2 bytes en lugar de un byte, que es la forma de almacenamiento de los tres tipos no Unicode.

    En resumen: se pueden representar ms caracteres en Unicode (adems de que se sabe con seguridad que el carcter se representar siempre de la misma forma, independientemente de la conguracin del servidor) pero tambin el nmero mximo de caracteres que puede almacenar un campo Unicode es justamente la mitad que uno no Unicode.

    Aclarado esto, tenemos el tipo CHAR para representar texto de longitud ja y el tipo VARCHAR2 para representar texto de longitud variable.

    En la tabla Productos puede ver dos campos de texto de longitud variable. En la columna Tamao se indica el nmero mximo de caracteres admitido.

    Tambin puede ver un campo de tipo CLOB. Este tipo se utiliza para almacenar grandes fragmentos de texto. VARCHAR2 admite un mximo de 4000 caracteres, por lo que si necesita ms, deber utilizar CLOB.

    Por ejemplo, hemos utilizado CLOB como el tipo de datos del campo DESCRIPCION de un producto.

    Para aplicacio-nes que pue-

    den ejecutarse en distintos

    pases o dis-tintos idiomas, utilice los tipos de datos Uni-

    code.

  • 11Copyright Computer Aided Education, S.A.

    Tablas

    Mientras que en la tabla Clientes (tal como vemos en la gura de la pgina anterior) tambin podemos encontrar el campo CODPOSTAL como un campo de tamao jo, con 5 caracteres como mximo. Por lo tanto, independientemente de lo que introduzcamos, siempre se guardarn 5 bytes o caracteres, rellenndose con espacios en blanco a su derecha, si es necesario.

    Oracle permite almacenar datos que representan fechas y horas. Estos valores se conocen como datetime.La ventaja de esto es que posteriormente se puede aplicar aritmtica

    o comparacin de fechas. Por ejemplo, se puede aadir un da, un mes, minutos, segundos, etc. a una fecha u hora.

    Si en lugar de ello se almacenan como cadenas de caracteres, entonces esto puede ser ms dicultoso de conseguir.

    Para representar fechas y horas, se utilizan los tipos de datos DATE y TIMESTAMP.

    En la tabla Clientes tenemos un campo de tipo DATE para almacenar la fecha y hora de nacimiento. Si no se indica la hora, se entiende que es la 00:00:00 del da en cuestin.

    Usualmente se introducen o se hace referencia a fechas/horas a travs de cadenas de texto. Por ejemplo, podramos utilizar la cadena 13/08/1971 para representar el 13 de agosto de 1971.

    Sin embargo, veremos que esto puede representar problemas ya que depender de la conguracin local del servidor el que se interprete una cadena de una forma u otra.

    Como regla general es mejor producir fechas con las funciones que para ello nos proporcione nuestro lenguaje de programacin que introducirlas directamente como cadenas de texto.

    Por su parte, el tipo TIMESTAMP se utiliza para marcar momentos precisos en el tiempo, ya que permite guardar hasta fracciones de segundo.

    Se puede utilizar el

    tipo CHAR(1) para repre-

    sentar valores booleanos;

    esto es, que son o verdade-

    ro ('1') o falso ('0'). 5. TIPOS DE DATOS DE FECHA Y HORA

  • 12

    Tablas

    stos son los principales tipos de datos que utilizar en las bases de datos Oracle, aunque es necesario comentar tambin la posibilidad de introducir datos XML.

    Oracle incorpora un tipo de datos para almacenar informacin en formato XML. Esto se podra hacer tambin mediante tipos de texto, pero con un tipo especco para ello conseguimos mayor funcionalidad.

    En Oracle 10g podremos hacer que el servidor interprete y valide los documentos XML de forma que se encargue de comprobar si estn bien formados e incluso si son vlidos respecto a un esquema XSD donde se especican los tipos de datos del documento XML y sus restricciones. Todo esto, como algo propio de la base de datos.

    Otros tipos de datos disponibles en Oracle 10g:

    TIMESTAMP WITH TIMEZONE: es una variante del tipo de datos TIMESTAMP en el que se incluye la zona horaria del servidor.

    TIMESTAMP WITH LOCAL TIMEZONE: en este caso la fecha y hora se almacena normalizada, lo que quiere decir que cuando se extrae de la base de datos, se proporciona transformada a la zona horaria del cliente que la recibe.

    INTERVAL YEAR TO MONTH: este tipo de datos es til cuando deseamos representar la diferencia entre dos fechas en las que nicamente el ao y el mes son importantes.

    INTERVAL DAY TO SECOND: este tipo de datos es til cuando deseamos representar la diferencia entre dos fechas concretas. Almacenan perodos de tiempo que incluyen das, horas, minutos y segundos.

    RAW: para almacenar informacin en formato binario, como imgenes, documentos, sonidos, vdeos, etc.

    LOB: permiten almacenar grandes cantidades de informacin. Un subtipo de LOB es CLOB (o NCLOB) para almacenar grandes cantidades de texto.

    BFILE: permite el acceso a datos binarios que no se almacenan en la propia base de datos, sino como archivos independientes.

  • 13Copyright Computer Aided Education, S.A.

    Tablas

    En muchas ocasiones deseamos que los valores que se almacenan en un campo sean nicos para cada registro, como ocurre en el caso de las claves principales de una tabla.

    Oracle puede encargarse de generar valores enteros nicos a travs del concepto de secuencia.

    Una secuencia es un objeto ms de un esquema, que podemos utilizar a la hora de generar nmeros enteros nicos.

    Por ejemplo, en lugar de tener que llevar la cuenta de los clientes que introducimos en una tabla, por qu no hacemos que sea Oracle el que se encargue de ello?

    Esto es tan fcil como crear una secuencia y solicitar los identicadores de cada registro en el momento de su creacin.

    Para crear secuencias, acceda al correspondiente enlace en el apartado Objetos de Base de Datos de la seccin Esquema. Seguidamente, pulse en el botn .

    Debemos indicar el nombre de la secuencia, que ser utilizado posteriormente cuando solicitemos un valor de la secuencia, el valor inicial y mximo, el intervalo entre cada valor generado y opciones de cach.

    En la seccin Valores podemos indicar:- El valor mnimo y mximo de la secuencia.- El valor inicial.- El intervalo entre cada valor generado.

    6. SECUENCIAS

  • 14

    Tablas

    Finalmente, vemos una seccin de opciones y otra de cach. En la de opciones podremos indicar qu debe ocurrir cuando se alcance el lmite impuesto (es decir, el valor mximo en una secuencia ascendente o mnimo en una descendente); y si deseamos que los nmeros se generen ordenadamente.

    Normalmente los valores de una secuencia se generan ordenadamente, por lo que no es necesario activar esta opcin.

    La seccin cach es muy importante, ya que permite que establezcamos (o no) la cach para la secuencia. La idea de la cach es que la primera vez que se utiliza la secuencia, no slo se reserva el valor devuelto sino un conjunto de valores (20 por defecto).

    Ms tarde, cuando se vuelve a solicitar un nmero, se coge de esta cach con lo que el proceso es ms rpido al no tener que acceder de nuevo a la secuencia hasta que se agoten los valores de la cach, momento en el que se vuelven a coger ms nmeros.

    A cambio de esta ventaja en las prestaciones, hay que tener en cuenta que si la base de datos es reiniciada por cualquier motivo, como un fallo en el servidor, los valores libres en cach se perdern, por lo que podramos tener huecos entre los valores generados por una secuencia. Si no se desea tener esos huecos, lo mejor es desactivar la cach.

    Ms tarde veremos cmo podemos solicitar valores de la secuencia. Normalmente crearemos una secuencia por cada campo clave principal donde lo necesitemos. Adems, es importante darse cuenta de que las secuencias y las tablas son objetos distintos e independientes.

  • 1Copyright Computer Aided Education, S.A.

    Relaciones

    1. INTRODUCCIN

    En todo diseo de una base de datos relacional nos encontramos con dos conceptos fundamentalmente: las tablas y las relaciones.

    Las tablas permiten almacenar la informacin necesaria, mientras que las relaciones tienen dos objetivos: facilitar la extraccin o consulta de dicha informacin y asegurar su integridad, es decir, mantener la base de datos en un estado coherente.

    Para esto ltimo se utiliza lo que se conoce como restricciones de integridad referencial. Aunque el nombre puede parecer complicado, veremos que no lo es tanto.

    Supondremos que disponemos del diseo de nuestra base de datos, por lo que no slo conocemos las tablas requeridas sino tambin qu relaciones existen entre ellas. Veamos pues, cmo implementar esta parte del diseo utilizando Oracle Enterprise Manager.

    Lo primero que tenemos que conocer es que podemos encontrar dos tipos de relaciones: 1 a muchos y Muchos a muchos.Una relacin 1 a muchos entre dos tablas promociona una de las

    tablas como principal y otra como secundaria.

    Qu quiere decir esto? Es mejor verlo con un ejemplo.

    Cojamos el caso de la relacin entre las tablas Categorias y Productos. Si piensa en ello, comprobar que una categora puede tener muchos productos relacionados, en el sentido de que estn clasicados dentro de la misma; y, sin embargo, un producto slo puede pertenecer a una determinada categora.

    Vemos, por lo tanto, que aqu la tabla principal o parte 1 es la de Categorias y la tabla secundaria o parte muchos es la de Productos.

    Este tipo de relaciones es muy fcil de representar en una base de datos Oracle:

    1.- Debe crear un campo adicional en la tabla secundaria que haga referencia a la tabla principal.

    2.- Debe establecer la relacin.

    2. RELACIONES 1 A MUCHOS

  • 2Relaciones

    Aqu lo que estamos haciendo ahora es representar la relacin 1 a muchos entre las tablas Categorias y Productos con el nuevo campo IdCategoria. De esta forma, para cada producto ser muy fcil conocer en qu categora est clasicado.

    El dato que se guardar en este nuevo campo es justamente el identicador o clave principal de la categora (tabla principal de la relacin), por lo que este campo debe ser del mismo tipo que aquel o, al menos, de un tipo de datos compatible.

    Finalmente, debemos decidir si permitiremos valores nulos para el campo que hace referencia a una categora o no. Esto depende mucho de la naturaleza de la relacin.

    Debe preguntarse: tiene sentido disponer de un producto del que no conocemos su categora? Si la respuesta puede ser s, entonces permita los valores nulos; en caso contrario, no lo permita.

    Y cundo puede tener sentido en este caso? Bien, imagine que se elimina una categora.

    Si desea que los productos de esa categora sigan existiendo en la base de datos, tal vez sea conveniente permitir valores nulos en el campo IdCategoria de la tabla Productos. De esta forma, se podra representar un producto de una categora eliminada.

    Como puede ver, permitir los valores nulos suele complicar el diseo (y programacin) de la base de datos. Pero es algo que tenemos que estudiar para ver si lo necesitamos.

    Aunque no es obligatorio, por claridad

    le recomenda-mos que utilice el mismo nom-bre en ambas

    tablas. As, si el campo

    clave principal de la tabla

    Categorias es IDCATEGORIA, cree un nuevo

    campo con las mismas

    caractersticas y nombre en la

    tabla Produc-tos.

  • 3Copyright Computer Aided Education, S.A.

    Relaciones

    Tras aadir el campo que representa la relacin, debemos denirla realmente. Esto se consigue creando una restriccin del tipo FOREIGN KEY en la estructura de la tabla secundaria.

    Para ello, nos situaremos en la cha Restricciones, elegiremos el tipo FOREIGN y pulsaremos en el botn Agregar.

    En la nueva pgina web se nos explica la naturaleza de una restriccin FOREIGN, haciendo referencia a la posibilidad de reejar la relacin existente entre dos tablas.

    Si no especicamos un nombre, Oracle genera uno automticamente. Sin embargo, en este tipo de restricciones es mucho mejor introducir un nombre descriptivo, ya que posteriormente podremos necesitarlo.

    Por ejemplo, con FK_Productos_Categorias reejamos que se trata de una relacin de clave externa (Foreign Key), de forma que la tabla Productos (tabla secundaria) hace referencia a la tabla Categorias (tabla principal).

    Seguidamente debemos indicar las columnas de la tabla secundaria y principal que establecen la relacin. En la gura anterior vemos que se establece una relacin entre las tablas Categorias y Productos a travs del campo IdCategoria de ambas tablas.

    De esta forma ira creando las relaciones entre las distintas tablas.

    Ve cmo es til que ambos campos tengan el mismo nom-

    bre? De esta forma, es fcil identificarlos.

  • 4Relaciones

    Hemos comentado que uno de los objetivos de las relaciones es mantener la base de datos en un estado coherente.Tal vez no ha entendido muy bien a qu nos estbamos reriendo

    y tiene razn. Bien, lo que esto quiere decir es que los datos que se almacenan en las distintas tablas deben cumplir una serie de restricciones y no poder almacenar cualquier valor.

    Con el ejemplo de las tablas Categorias y Productos se ve muy bien. Imagine que est introduciendo un nuevo producto en el catlogo de la tienda.

    Lgicamente necesita conocer en qu categora lo incluir y, lo que es incluso ms importante, que esa categora exista en la tabla Categorias.

    Por qu? Porque si no es as, incluira un producto de una categora inexistente.

    Para que esto lo controle la propia base de datos, la restriccin de tipo FOREIGN tiene que estar activada.

    Es decir, que la columna Desactivado de dicha restriccin debe indicar el valor No. Por defecto, la restriccin se crea de esta forma, pero posteriormente podramos desactivarla temporalmente si as lo necesitamos.

    Adicionalmente, podemos indicar qu ocurre cuando se modican o eliminan registros de la tabla principal. Volvamos a nuestro ejemplo:

    ---> Qu debe ocurrir cuando se modica el valor del identicador de una categora en la tabla Categorias?

    Si est activada la restriccin FOREIGN y dicha categora dispone de productos relacionados, Oracle no permitir la modicacin.

    3. RESTRICCIONES DE INTEGRIDAD REFERENCIAL

    Puede desacti-var una restric-cin FOREIGN accediendo a su edicin en EM Database

    Control.

  • 5Copyright Computer Aided Education, S.A.

    Relaciones

    ---> Qu debe ocurrir cuando se elimine una categora en la tabla Categorias?

    En este caso tenemos hasta tres opciones:

    No permitirlo si la categora tiene productos relacionados. Eliminar tambin esos productos relacionados (en cascada). Establecer a NULL el campo IDCATEGORIA de los productos

    relacionados.

    Si deseamos aplicar la operacin ON DELETE CASCADE u ON DELETE SET NULL, no podremos hacerlo directamente aqu sino que ser necesario indicarlo mediante un comando SQL de modicacin de la tabla.

    Una forma de ejecutar un comando SQL directamente contra el motor de base de datos es hacerlo mediante la herramienta sqlplus. Esta herramienta aparece en el grupo de programas de Oracle - Desarrollo de aplicaciones, pero si desea acceder a ella como administrador de la base de datos (SYSDBA), es mejor ejecutarla directamente con el comando sqlplusw /nolog.

    Con ello, acceder a una ventana o consola donde lo primero es conectarse con el usuario oportuno y despus ejecutar los distintos comandos SQL que necesite. Obsrvelo en la gura adjunta.

  • 6Relaciones

    Si desea aplicar ON DELETE CASCADE u ON DELETE SET NULL, deber hacerlo mediante un comando ALTER TABLE o en el momento de crear la tabla de la misma forma, pero con el comando CREATE TABLE.

    Desgraciadamente EM Database Control no lo permite hacer visualmente.

    La sintaxis sera:

    ALTER TABLE tablaSecundaria ADD CONSTRAINT restriccion FOREIGN KEY (campo) REFERENCES tablaPrincipal (campo) ON DELETE CASCADE;

    Al exigir las restricciones de integridad referencial, nos aseguramos de que la base de datos se mantendr en un estado coherente.

    Adems, podemos indicar qu queremos que ocurra cuando se elimina un registro que tiene registros relacionados en otras tablas.

    Por defecto, esto no se permitir, pero podremos indicar que tambin se eliminen esos registros relacionados si activamos la opcin de hacerlo en cascada.

    Esta opcin no est disponible para las actualizaciones en cascada, algo que s que est disponible en otras bases de datos.

    Otras relaciones 1 a muchos que puede encontrar en esta base de datos son:

    - Los carritos de la compra contienen productos (tablas CarritoCompra y Productos).

    - Los clientes realizan rdenes de compra (tablas Clientes y Ordenes).

    - ...

  • 7Copyright Computer Aided Education, S.A.

    Relaciones

    Continuamos la leccin estudiando otro tipo de relacin menos frecuente pero que tambin puede aparecer en una base de datos: las relaciones muchos a muchos.

    Por ejemplo, piense que en una orden de compra pueden aparecer varios productos (junto a la cantidad en que se compran) y, adems, un producto puede aparecer en varias rdenes de compra.

    Por lo tanto, estamos identicando una relacin muchos a muchos entre las tablas Productos y Ordenes.

    Las relaciones muchos a muchos no se pueden representar directamente en una base de datos relacional, sino que se tienen que seguir estos pasos:

    1.- Crear una nueva tabla en la que aparecern dos campos representando las claves principales de las tablas relacionadas. Estos dos campos constituirn la clave principal de la nueva tabla.

    Adicionalmente pueden aparecer ms campos en esta tabla, propios de la relacin.

    2.- Una vez creada la tabla adicional, establecer una relacin 1 a muchos entre la nueva tabla y cada una de las tablas implicadas.

    Aqu puede ver la tabla LineasOrden, que reeja justamente la relacin Muchos a muchos entre las tablas Ordenes y Productos. Fjese que la clave principal de esta nueva tabla es el par (IdOrden, IdProducto), es decir, las claves de las tablas implicadas.

    4. RELACIONES MUCHOS A MUCHOS

  • 8Relaciones

    Fjese cmo se utiliz la herramienta sql*plus para generar las dos restricciones FOREIGN, estableciendo la eliminacin en cascada.

    Recuerde que si no desea aplicar las operaciones ON DELETE CASCADE u ON DELETE SET NULL, podr crear las restricciones de integridad referencial ms fcilmente desde EM Database Control.

    Fjese todo lo que estamos consiguiendo con las relaciones y la integridad referencial:

    Al aadir nuevos registros, nos aseguramos de que los valores de las claves externas existen en las tablas principales a las que hacen referencia.

    Al eliminar un registro en la tabla principal, ocurrir lo mismo en los registros relacionados de la tabla secundaria.

    Aunque denir las relaciones y exigir la integridad referencial va a dicultar la programacin, ya que se tienen que cumplir todas estas restricciones, facilitamos que no se pueda dejar la base de datos en un estado inconsistente.

  • 1Copyright Computer Aided Education, S.A.

    Propiedades de tabla

    1. VALORES PREDETERMINADOS

    Durante el diseo de las tablas en Oracle, vemos que principalmente tenemos que hacer dos cosas: crear las columnas que las constituyen (indicando el tipo de datos de cada una de ellas) y establecer su clave principal.

    Despus, cuando comprobamos que necesitamos algo ms para poder extraer resultados tiles de la informacin almacenada en la base de datos y para mantener su integridad, establecemos las correspondientes relaciones o restricciones de clave externa.

    Oracle permite anar todava ms el diseo de las tablas, incluyendo conceptos que nos permiten representar lo ms elmente posible la naturaleza de la informacin que en ellas se almacena.

    Valores predeterminados, restricciones de valor, restricciones de unicidad, etc. hacen que la base de datos incluya por s misma cierta lgica y no slo datos.

    Como resultado de todo esto, tendremos que la propia base de datos se encargar de comprobar y exigir la coherencia de la informacin almacenada independientemente de la aplicacin que interacta con ella.

    Una caracterstica que podemos establecer siguiendo este razonamiento es incluir el valor predeterminado de las columnas o campos de una tabla.

    Qu es esto? Pues el valor que se insertar en el campo si no se indica ninguno. El valor predeterminado debe ser acorde al tipo de datos de la columna.

    Por ejemplo, uno de los campos de la tabla Productos es IMAGEURL, donde se indica la ubicacin y nombre de una pequea imagen representativa del producto.

    Podramos preparar una imagen genrica para los casos en que no se disponga de ninguna imagen particular del producto. Pues esa imagen puede ser el valor predeterminado de este campo.

    El valor predeterminado de un campo se establece en la columna Valor por Defecto, como puede ver en la gura de la pgina siguiente.

  • 2Propiedades de tabla

    El valor predeterminado puede ser tanto una constante como una expresin, pero debe ser de un tipo acorde al tipo de datos del campo de la tabla.

    Fjese: como el campo IMAGEURL es de tipo VARCHAR2, espera una cadena de texto, por lo que debe incluirse entre comillas simples. Es decir, que si no se indica una imagen particular, cada producto tendr la imagen sinfoto.gif por defecto.

    Si el campo fuera numrico, incluiramos un nmero; si fuera de tipo fecha y hora, una fecha correcta.

    Veamos otro ejemplo. Como se ha comentado anteriormente, podemos utilizar una expresin para obtener el valor predeterminado. Lo importante es que esa expresin se evale a un valor correcto para el campo en cuestin. En la gura de la pgina siguiente vemos que se ha utilizado la funcin SYSDATE para obtener la fecha y hora actual del servidor. Estos detalles sern el valor predeterminado del campo FechaOrden de la tabla Ordenes.

    Por lo tanto, cuando se cree una orden, tendr como fecha la de ese momento. Esto no quiere decir que no podamos insertar un valor distinto. Aunque un campo tenga valor predeterminado, siempre podremos insertar uno distinto.

    La cuestin es que si no lo hacemos, tendr el valor predeterminado.

  • 3Copyright Computer Aided Education, S.A.

    Propiedades de tabla

    Otra caracterstica asociada con una columna que podemos utilizar son las restricciones de valor o restricciones Check.

    El concepto es parecido al de las restricciones de integridad referencial, ya que estas ltimas restringen el valor que pueden tener ciertas columnas a los valores almacenados en otra columna de una tabla distinta (un producto debe tener una categora existente en la tabla Categorias, por ejemplo).

    Las restricciones Check son parecidas a esto pero los valores que puede albergar una columna de tabla no hacen referencia a otra columna de otra tabla, sino a un conjunto de valores conocidos y establecidos directamente en la restriccin.

    Con un ejemplo se ve todo ms claro. Fjese en la tabla Ordenes. Vemos que para cada orden nos guardamos tanto la fecha de expedicin de la orden (campo FechaOrden) como la fecha real del envo de la orden (campo FechaEnvio).

    Como ambos campos son del tipo DATE, pueden albergar cualquier fecha/hora correcta. Pero, tiene sentido que la fecha de envo de la orden sea anterior a la fecha de expedicin?

    2. RESTRICCIONES CHECK

  • 4Propiedades de tabla

    Claramente no, ya que no deberamos permitir que se guarde una fecha de envo anterior a la fecha en la que realmente se crea la orden.

    Para establecer esta restriccin, debemos utilizar una restriccin Check. Podr hacerlo en la cha Restricciones de la tabla, desplegando el tipo de restriccin, eligiendo CHECK y despus pulsando el botn Agregar.

    Con esta restriccin queremos asegurar que nunca se guardar una fecha de envo posterior a la fecha de creacin de la orden.

    Fjese que se indica un nombre descriptivo (utilizaremos el prejo CK para las restricciones de Check) y el campo Condicin de Control establece dicha restriccin.

    Es intersante darse cuenta de que aqu podemos comparar dos fechas directamente porque tanto el campo FechaOrden como FechaEnvio son de tipo DATE. Si las hubisemos guardado como caracteres, esto no sera tan sencillo, teniendo que convertirlas previamente a un tipo de fecha.

    La Condicin de Control no puede incluir referencias a funciones no deterministas, es decir, que no devuelven siempre el mismo valor con los mismos parmetros. Por ejemplo, no puede utilizar la funcin SYSDATE, ya que devuelve un valor distinto (la fecha y hora actual) cada vez que se invoca.

    Adicionalmente, con el atributo Validar podremos indicar si queremos aplicar la restriccin incluso para los datos que ya pudieran almacenarse en la tabla.

    Adems tambin podemos activar o desactivar la restriccin.

  • 5Copyright Computer Aided Education, S.A.

    Propiedades de tabla

    En la gura siguiente aparece la restriccin Check que acabamos de crear junto a otras de este tipo que genera Oracle automticamente.

    Por ejemplo, cada vez que indicamos que un campo no puede tener valores nulos, Oracle implementa esta caracterstica con una restriccin Check.

    Veamos otro ejemplo de restriccin Check. Vamos a exigir que la direccin de correo electrnico que introduce cada cliente tiene que incluir siempre el carcter arroba (@).

    Una expresin que podramos utilizar como Condicin de control de la restriccin sera:

    INSTR(EMAIL, '@') 0

    En este caso utilizamos la funcin INSTR, que devuelve la posicin inicial de una expresin en una cadena de caracteres. Nosotros buscamos el carcter arroba @ en el campo Email.

    La restriccin comprueba que la posicin inicial de este carcter sea distinto de cero; es decir, que exista el carcter arroba en el valor del campo Email.

    En resumen vemos que las restricciones Check permiten introducir restricciones o limitaciones de sentido comn en la propia denicin de la tabla.

    Al guardarlas como parte de la tabla, es Oracle el que se encarga de aplicarlas cuando se insertan nuevos registros o cuando se actualizan los existentes, por lo que nuestras aplicaciones no tienen que preocuparse de ello.

    Si desea deshabilitar

    temporalmente una restriccin

    Check, active el atributo

    Desactivado. Esto puede ser necesario, por

    ejemplo, cuan-do se importan

    datos prove-nientes de otra base de datos

    donde la infor-macin puede

    no respetar la restriccin establecida.

  • 6Propiedades de tabla

    Otros ejemplos de restricciones Check que podramos utilizar en nuestra base de datos:

    - Cantidad > 0: para exigir que la cantidad comprada de un producto en cierta orden sea siempre positiva.

    - Edad BETWEEN 18 AND 120: La edad de los clientes tiene que estar entre los 18 y 120 aos.

    - Sexo IN ('Masculino', 'Femenino'): El campo Sexo slo puede almacenar la palabra Masculino o Femenino.

    En resumen, podemos utilizar constantes, funciones y operadores del lenguaje propio de Oracle, conocido como PL/SQL.

    Cuando estudiamos la forma de establece la clave principal de una tabla, indicamos que, de esta forma, cada registro se identicaba unvocamente, ya que no poda haber valores repetidos para la clave principal.

    Las restricciones UNIQUE son parecidas en este aspecto, ya que no permiten que en un campo haya valores repetidos, pero se diferencian de las claves principales en que s que pueden admitir valores NULL. Adems, podemos denir varias restricciones UNIQUE en una tabla, pero sta slo podr tener una clave principal (compuesta por uno o ms campos).

    Por lo tanto, podemos utilizar restricciones UNIQUE para garantizar que no se introducen valores duplicados en campos que no forman la clave principal de la tabla.

    Por ejemplo, en la tabla Clientes podra tener sentido garantizar que los clientes no introducen direcciones de correo electrnico repetidas.

    Crear una restriccin de este tipo es igual que en el resto de los casos. Accederemos a la cha Restricciones de la correspondiente tabla, elegiremos UNIQUE en la lista de tipo de restriccin y pulsaremos en el botn Agregar.

    3. RESTRICCIONES UNIQUE

  • 7Copyright Computer Aided Education, S.A.

    Propiedades de tabla

    Deber elegir el campo o conjunto de campos que se vern afectados por la restriccin UNIQUE en la lista Columnas Disponibles y pasarlo a la lista de Columnas Seleccionadas mediante el botn Mover.

    Para este tipo de restricciones, utilizaremos un nombre que empiece con el prejo UN, como puede ver en la gura anterior.

    Tenga en cuenta que Oracle no evala como iguales dos campos con el valor NULL, por lo que aceptar ms de un valor NULL almacenado en el campo EMAIL de esta tabla.

    Este comportamiento puede ser distinto en otras bases de datos, como Microsoft SQL Server.

    Y es que el valor NULL es distinto a cualquier otro, por lo que slo puede preguntarse si es nulo o no, pero no compararlo con otro, aunque sea otro valor nulo.

  • 1Copyright Computer Aided Education, S.A.

    ndices

    1. INTRODUCCIN

    Los ndices son uno de los objetos de una base de datos que menos frecuentemente se utilizan, y que, sin embargo, pueden determinar en gran medida las prestaciones de la base de datos.

    Los ndices son estructuras que se utilizan para acceder rpidamente a la informacin almacenada en las tablas. La idea principal es evitar recorrer la tabla para lo que, en lugar de ello, se accede al ndice.

    Debido a esto, durante el diseo inicial de las tablas podemos anticipar la utilizacin de alguno de los ndices pero no de todos.

    Normalmente, el diseador de bases de datos debe estar atento al uso que se est haciendo de la base de datos; es decir, a las consultas ms frecuentes, y generar nuevos ndices si ello contribuye a mejorar su rendimiento.

    Sin embargo, aunque pueda parecer que la creacin de ndices es algo que mejora las prestaciones de la base de datos, no tiene por qu ser siempre as.

    Si pensamos que normalmente ser ms rpido consultar un ndice que recorrer toda una tabla, entendemos que los ndices son tiles cuando queremos consultar la informacin de una tabla.

    Sin embargo, si pensamos en lo que ocurre cada vez que insertamos nuevos registros o que modicamos/eliminamos los existentes en una tabla, veremos que la presencia de ndices puede ralentizar estos procesos ya que tambin tienen que ser actualizados.

    Esto nos debe hacer pensar que un buen diseo de ndices es crucial en nuestra base de datos y que segn las caractersticas de sta, ser adecuado utilizarlos en mayor o menor medida.

    Como regla general, aunque sin poder tomarla al pie de la letra, podemos pensar en la creacin de ndices cuando la operacin ms frecuente contra la tabla es la consulta de sus datos; por otra parte, deberemos evitar crear muchos ndices si lo ms frecuente es insertar, actualizar o eliminar registros en dicha tabla.

    En esta leccin veremos qu considerar durante el diseo de los ndices y ofreceremos toda una serie de directrices que nos pueden ayudar en este proceso, pero teniendo en cuenta que muchas veces es necesario realizar pruebas del rendimiento de la base de datos para encontrar el mejor conjunto de ndices.

  • 2ndices

    Lo primero que tenemos que saber es que Oracle utiliza los ndices para llevar a cabo algunas de las restricciones que establecemos en nuestras tablas, como las de clave principal y restricciones UNIQUE.

    Aqu vemos que la tabla Clientes tiene un ndice asociado con la columna IdCliente porque sta es la clave principal de la tabla, y un ndice establecido para la columna Email, que se cre automticamente tambin al establecer la restriccin UNIQUE en dicho campo.

    Las restricciones de clave principal y UNIQUE generan automticamente ndices en la denicin de la tabla, ya que es la forma que tiene Oracle de implementarlas.

    Sin embargo, usted establece restricciones desde un punto de vista lgico y para mantener la integridad de los datos, mientras que crea ndices cuando est estudiando la optimizacin de la base de datos.

    En la pgina siguiente podemos ver la estructura de un ndice. Se trata del ndice segn el campo IdCliente de la tabla Clientes.

    En un ndice encontramos tres tipos de registros o nodos: el nodo raz, los nodos intermedios (ramas) y los nodos hoja.

    2. CREAR NDICES

  • 3Copyright Computer Aided Education, S.A.

    ndices

    El nodo raz es desde donde parte toda la estructura, que se ampla con los nodos intermedios y que llega a las hojas de datos o donde encontramos los enlaces a la informacin almacenada en la tabla.

    Por ejemplo, imagine la consulta todos aquellos clientes cuyo IdCliente est contenido entre el 158 y el 271.

    Cuando Oracle recibe esta consulta, comprueba qu valor almacenado en el nodo raz del ndice es el ms apropiado para empezar a buscar y elige el 157.

    Fjese que en el ndice slo se almacena el valor de IdCliente (columna clave del ndice) y no el resto de detalles que tenemos en la tabla Clientes.

    Este valor apunta a un nodo intermedio que nalmente da paso a las hojas donde se incluye un puntero o enlace a los datos buscados en la tabla.

    Como el ndice se mantiene ordenado, las consultas en las que solicitamos rangos de datos continuos, como la del ejemplo, se benecian en gran medida del ndice.

    Veamos cmo podramos crear nosotros los ndices que estimemos oportuno. Para ello, si se encuentra editando una tabla, sitese en la cha ndices y elija Crear ndice en la lista de Acciones. Finalmente, pulse en el botn Ir.

  • 4ndices

    Tambin puede crear ndices independientemente de las tablas, utilizando el enlace adecuado en el apartado Objetos de Base de Datos de la pgina de administracin.

    Imagine que es frecuente consultar la base de datos para conocer los productos de una determinada categora. Por ejemplo, podramos incluir un ltro en la aplicacin web que accede a la base de datos para que el usuario elija el tipo o categora de productos que quiere comprar.

    En este caso, disponer de un ndice segn el identicador de la categora en la tabla Productos podra acelerar el acceso a dicha informacin, ya que en el ndice dispondramos de la ubicacin exacta de cada producto de dicha categora.

    Seguramente utilizar este ndice sea ms efectivo que recorrer toda la tabla, sobre todo si sta tiene muchos productos.

    A la hora de crear un ndice debemos indicar su nombre, la tabla a la que har referencia y sobre qu columnas actuar o tendr almacenadas en su estructura (claves del ndice).

    Podemos elegir entre dos tipos de ndice: Estndar (B-Tree) o Bitmap.

  • 5Copyright Computer Aided Education, S.A.

    ndices

    Los ndices que se utilizan en una base de datos OLTP, como la nuestra, son los ndices Estndar o B-TREE. Los ndices Bitmap se utilizan en bases de datos OLAP.

    En la parte inferior de la pgina es donde indicaremos la tabla y qu columna o conjunto de columnas formarn parte del ndice.

    Vemos que hemos escrito un 1 para la columna IDCATEGORIA. De esta forma indicamos que el ndice se formar a partir de esta columna o campo de la tabla.

    En el caso de que en el ndice se incluya ms de una columna, deberemos indicar el orden (1, 2, 3, ....) en que queremos utilizarlas.

    Esto es muy importante, ya que puede determinar que se utilice o no el ndice ante una consulta.

    En general, utilice ndices en aquellas tablas en las que no sea muy frecuente la insercin o modicacin de datos, sino ms bien su consulta. Pero, adems, recuerde las siguientes indicaciones:

    Tener en cuenta campos en los que sus valores tengan un alto grado de unicidad. Por ejemplo, no es adecuado crear un ndice en un campo donde se almacene el sexo de una persona, ya que slo puede haber dos posibles valores: hombre o mujer.

    Tener en cuenta campos en los que se realicen consultas de intervalos: IdProducto entre el 10 y el 35, Ordenes enviadas durante el mes de agosto, etc. Se reeren a consultas en las que se utilizan la clusula BETWEEN o los operadores , = del lenguaje SQL.

    Campos que aparecen en clusulas ORDER BY o GROUP BY del lenguaje SQL. Ya que estos comandos ordenan el resultado de la consulta, es til tener un ndice en dichos campos porque los enlaces a los registros ya estarn ordenados.

    Utilice ndices para mejorar el rendimiento de consultas con clusulas JOIN o GROUP BY del lenguaje SQL.

    Los campos que acten como clave externa en una relacin con otra tabla son candidatos para establecer ndices.

    Siempre debe poner el orden

    anterior en las columnas

    que ms se utilicen.

  • 6ndices

    Ya sea durante la creacin del ndice o, posteriormente al editarlo, podemos establecer una serie de propiedades y opciones del ndice que debemos conocer.

    La primera de ellas la tenemos aqu en la cha General del ndice. Junto a la columna o columnas que lo forman, podemos indicar cmo deben mantenerse ordenados los valores del ndice: ascendente o descendentemente.

    Por defecto, el orden es ascendente. En nuestro caso esto signica que en el ndice se guardar el identicador de la categora de cada producto ascendentemente.

    Este detalle debe concordar con el orden en que normalmente se utilizarn los valores clave del ndice: si las consultas reclaman un determinado orden en su resultado, ese orden es el que debera elegir para el ndice.

    Con el botn Agregar Expresin de Columna podemos hacer que se guarde el resultado de una determinada expresin en la que interviene la columna indizada en lugar de su valor real.

    Esto se utiliza mucho en columnas de texto para evitar la necesidad de utilizar funciones a la hora de comparar cadenas de caracteres.

    Por ejemplo, una forma rpida de asegurarnos de comparar dos cadenas sin tener en cuenta la combinacin de maysculas y minsculas que tienen es pasarlas ambas a maysculas o a minsculas.

    Para ello podemos utilizar las funciones UPPER y LOWER, respectivamente.

    Pues bien, si utiliza esta estrategia en sus consultas SQL, seguramente ser mejor guardar los valores de la columna en maysculas (o minsculas) en el ndice.

    De esta forma, se utilizar el valor almacenado en el ndice en lugar de tener que ejecutar la funcin UPPER o LOWER para cada registro afectado por la consulta SQL

    Podemos utilizar cualquier funcin, incluso aquellas que nosotros mismos creemos, pero siempre que sean deterministas.

    3. OPCIONES DE NDICE

    Para que se utilice el

    ndice, debe escribir la mis-

    ma expresin en su consulta SQL que en la definicin del

    ndice.

  • 7Copyright Computer Aided Education, S.A.

    ndices

    En la cha Opciones encontraremos otras propiedades del ndice.

    Si el campo o conjunto de campos que usted ha elegido para crear el ndice tiene la caracterstica de ser nico para los registros de la tabla, debe especicarlo en la propiedad nico.

    Oracle utiliza un ndice nico cuando establecemos restricciones UNIQUE.

    Oracle no almacena entradas en el ndice para aquellos registros con el valor NULL.

    Por lo tanto, aunque establezcamos la propiedad nico para el ndice, podra existir una tabla con mltiples valores NULL en el campo del ndice.

    La propiedad Inverso se utiliza cada vez menos. Sirve para almacenar, en forma inversa, los valores en el ndice con el objetivo de que est balanceado.

    Qu signica esto? Bien, para entenderlo es mejor pensar en el ndice como en un rbol. Si el rbol crece siempre de un lado (por ejemplo, de su lado derecho), entonces el rbol no est balanceado.

    Esto puede ocurrir cuando los registros que se crean en la tabla tienen valores del ndice ascendentes (por ejemplo, cuando en el ndice se incluye un campo cuyos valores provienen de una secuencia ascendente).

    En este caso, y para facilitar el que el rbol se mantenga balanceado, podramos guardar los valores de forma inversa en el ndice.

  • 8ndices

    Sin embargo, esto tena ms sentido en versiones anteriores de Oracle, ya que actualmente el servidor utiliza tcnicas para que el rbol que representa un ndice se mantenga siempre balanceado.

    En Paralelo podremos especicar que se cree el ndice utilizando ms de un proceso. Esto puede acelerar la creacin de un ndice en una tabla con muchos registros.

    A cambio, la necesidad de almacenamiento aumenta considerablemente (aunque nicamente durante la creacin del ndice).

    Con la propiedad En Lnea podremos indicar si durante la creacin del ndice se aceptan operaciones DML, es decir, si la tabla est operativa o no durante la creacin del ndice.

    Tenga en cuenta que la creacin de un ndice puede ser una tarea que consuma bastante tiempo, por lo que mantener operativa la tabla es una ventaja muy importante.

    Con la propiedad Calcular Estadsticas podremos hacer que se recopilen estadsticas de uso del ndice durante su creacin. Estas estadsticas son las que pueden hacer que Oracle decida utilizar el ndice o no durante las consultas.

    Puede ser interesante cuando se crea un ndice respecto de una tabla con muchos registros.

    La ltima propiedad del ndice, Sin ordenar, es til cuando sabemos que los valores que se incluyen en el ndice ya estn ordenados de por s. Entonces no hace falta que se realice este paso durante la creacin del ndice.

    Esto puede suceder con tablas organizadas por ndice, como despus veremos, o cuando los valores del ndice son generados mediante una secuencia.

    Por ltimo, cabe comentar que es importante tambin en qu tablespace se crea el ndice. Por defecto, se crea en el mismo que la tabla a la que hace referencia, como puede comprobar en la cha General del ndice.

    Esto tiene la ventaja de que es ms fcil realizar la copia de seguridad de una tabla y todas sus estructuras relacionadas, como los ndices.

    Es convenien-te crear los ndices una

    vez insertadas grandes canti-

    dades de datos en una tabla

    y no antes, de forma que no sea necesario

    actualizar tam-bin el ndice

    cada vez.

  • 9Copyright Computer Aided Education, S.A.

    ndices

    Sin embargo, de cara a conseguir mejores prestaciones en el acceso a los datos de la tabla, si el ndice se crea en una tablespace distinto puede ser mejor.

    Si los tablespaces se almacenan fsicamente en discos duros distintos, acceder (en paralelo) al ndice y a la tabla puede aumentar signicativamente las prestaciones del servidor ante consultas complejas.

    Crear los ndices ms adecuados para nuestra base de datos no es una tarea ni muchos menos sencilla. Normalmente es necesario realizar pruebas con datos reales para ello.

    Cuando Oracle decide utilizar un ndice para acceder a la informacin solicitada en una consulta, tiene que encontrar la entrada apropiada en el ndice y despus utilizar su enlace para obtener la ubicacin real de los datos en la tabla.

    Incluso realizando estos dos pasos (encontrar la entrada en el ndice y seguir el enlace hasta los datos en la tabla), normalmente el acceso a la informacin es mucho ms rpido que recorrer toda la tabla.

    Oracle permite aprovechar la idea del ndice en la propia organizacin de las tablas, creando lo que se conoce como una tabla organizada por ndice.

    Una tabla de este tipo almacena los registros de la misma forma que un ndice B-Tree, pero en el que cada hoja no slo incluye la columna clave del ndice, sino todas las columnas de la tabla.

    El orden en que quedan almacenados los registros de la tabla viene dado por el campo que es la clave principal de la tabla, por lo que es obligatorio establecer esta restriccin.

    A diferencia de una tabla estndar, en que los registros se almacenan en el orden en que se crean, una tabla organizada por ndice almacena sus registros ordenados por su clave principal.

    Est claro, por lo tanto, que esto puede venir muy bien en ciertos tipos de aplicaciones donde es habitual solicitar informacin ordenada por el campo que es clave principal de la tabla y donde los registros se crean ordenadamente.

    4. TABLAS ORGANIZADAS POR NDICES

  • 10

    ndices

    Por ejemplo, la tabla Ordenes de nuestra base de datos es un claro ejemplo de esto. Los registros de dicha tabla se crean ascendentemente segn el campo IdOrden.

    Esto quiere decir que no vamos a provocar gran sobrecarga en el servidor por mantener ordenados fsicamente esos registros si creamos una tabla organizada por ndice, y, sin embargo, s que podemos obtener todas las ventajas que implica tener un ndice para acceder a los datos de la tabla.

    Otra ventaja de este tipo de tablas es que no se duplica la informacin, ya que no es necesario crear un ndice explcitamente para los valores de su clave principal.

    Usted debe indicar el tipo de la tabla en el primer paso del asistente de creacin de tablas. Obsrvelo en la gura adjunta.

    Dependiendo de las caractersticas de la tabla, es conveniente una cosa u otra. As, en nuestra base de datos tendra bastante sentido haber elegido la organizacin por ndice para las tablas, ya que los valores de las claves principales vienen generados por secuencias ascendentes.

    Sin embargo, debe tener en cuenta las tres operaciones de manipulacin de datos, INSERT, UPDATE y DELETE, a la hora de decidirse por un tipo de tabla u otro.

    Usted conoce las ventajas y desventajas de los ndices, pues aplquelas a las tablas.

  • 11Copyright Computer Aided Education, S.A.

    ndices

    Las tablas organizadas por ndice tambin aceptan otros ndices adicionales, por lo que no slo podemos obtener la ventaja del acceso segn su clave principal, sino todas las ventajas de los ndices en s.

    La confeccin del conjunto de ndices apropiado no es sencilla por lo que slo entender lo mejor posible cmo funcionan nos puede ayudar a realizarla.

    Debemos entender que los ndices tienen el objetivo de acelerar el acceso a los datos, por lo que son de especial utilidad en aquellas tablas donde lo ms frecuente es la seleccin o extraccin de informacin y no su modicacin.

    Los ndices se utilizan cuando Oracle recibe la solicitud de una consulta. En ese momento tiene dos opciones: bien recorrer la tabla o bien utilizar el ndice.

    Cuando la tabla tiene muchos registros, es lgico pensar que ser mucho ms rpido utilizar el ndice, ya que normalmente ser mucho ms pequeo y, adems, dispondr de cierto orden.

    Sin embargo, si la consulta realizada afecta a un porcentaje elevado de registros de la tabla, no obtendremos ninguna ventaja al utilizar el ndice, ya que nalmente tendremos que acceder a la mayora de los datos de la tabla.

    Oracle decide qu hacer consultando las estadsticas de uso de los distintos ndices y en funcin del tamao de la tabla. La mayora de las veces elegir utilizar el ndice (sobre todo cuando en la consulta intervienen varias tablas en las que hemos denido ndices para las claves externas).

    Como contrapartida a esta situacin en la que los ndices pueden ser de gran utilidad, tenemos las operaciones de insercin (INSERT), modicacin (UPDATE) y eliminacin (DELETE) de registros.

    En estos casos no slo se ve afectada la tabla, sino tambin los ndices. Adems, en el caso de una tabla organizada por ndice esto puede ser incluso peor, ya que puede implicar modicar la ubicacin de almacenamiento de los registros para seguir mantenindolos ordenados.

    5. CUNDO SE UTILIZAN LOS NDICES?

  • 12

    ndices

    Esta circunstancia, junto al hecho ineludible de que los ndices tambin ocupan espacio ya que, al n y al cabo, estn almacenando informacin que ya disponemos en las tablas, hacen que veamos la necesidad de analizar con cuidado cada situacin y experimentar hasta conseguir un buen diseo de ndices.

  • 1Copyright Computer Aided Education, S.A.

    El lenguaje SQL (I)

    1. INTRODUCCIN

    El lenguaje SQL es un lenguaje estndar para el acceso y manipulacin de bases de datos relacionales como Oracle.Esto quiere decir que aprender SQL es algo indispensable para

    cualquier programador o administrador de bases de datos, ya que se va a encontrar constantemente con la necesidad de consultar o modicar los datos almacenados.

    Oracle no es una excepcin, aunque dispone de una versin un poco personalizada del lenguaje SQL que acepta que en lo fundamental es compatible con el estndar ANSI.

    Por otra parte, el lenguaje SQL