INSTITUTO TECNOLÓGICO SUPERIOR “VIDA NUEVA”
CARRERA DE INFORMÁTICA
BASE DE DATOS II
TEMA: GENERAR UNA BASE DE DATOS EN PLSQL
TUTOR: ING. CARLOS MOREANO
INTEGRATES:
SANGOLUISA TATIANA
TITUAÑA DAYANA
QUITO-ECUADOR 2012-2013
OBJETIVOS
GENERAL:
Aprender diferentes objetos de la base de datos, que permitan modularizar el código de programación, como las funciones, procedimientos, vistas, índices y cursores.
ESPECÍFICOS:
Aplicar los conocimientos obtenidos en la creación de una base de datos.
Crear los códigos para la creación de los distintos procesos en PL/SQL de la base de datos.
Diseñar una base de datos por medio del sistema identidad relación.
Aprender a identificar cuáles son los requerimientos del cliente para identificar las clases y los atributos.
INTRODUCCIÓN SQL es un lenguaje de consulta para los sistemas de bases de datos relaciónales, pero que no posee la potencia de los lenguajes de programación. No permite el uso de variables, estructuras de control de flujo, bucles y demás elementos característicos de la programación. No es de extrañar, SQL es un lenguaje de consulta, no un lenguaje de programación. Sin embargo, SQL es la herramienta ideal para trabajar con bases de datos. Cuando se desea realizar una aplicación completa para el manejo de una base de datos relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de consulta del SQL y la versatilidad de los lenguajes de programación tradicionales. PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones y elementos propios de los lenguajes de programación. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos ORACLE, están son:
Procedimientos almacenados
Vistas
Índices
Cursores En este informe vamos a ver el lenguaje PL SQL y trataremos los siguientes temas: BASE DE DATOS: Es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso. SQL: Es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas. PL SQL: Es un lenguaje de programación que proporciona Oracle, soporta todas las consultas la manipulación de datos es la misma que en SQL.
MARCO TEÓRICO BASE DE DATOS Es una entidad en la cual se pueden almacenar datos de manera estructurada, con la menor redundancia posible. Diferentes programas y diferentes usuarios deben poder utilizar estos datos. Por lo tanto, el concepto de base de datos generalmente está relacionado con el de red ya que se debe poder compartir esta información. De allí el término base. "Sistema de información" es el término general utilizado para la estructura global que incluye todos los mecanismos para compartir datos que se han instalado.
SQL Es un sistema para la gestión de bases de datos producido por Microsoft basado en el modelo relacional. Sus lenguajes para consultas son T-SQL y ANSI SQL. Microsoft SQL Server constituye la alternativa de Microsoft a otros potentes sistemas gestores de bases de datos como son Oracle, PostgreSQL o MySQL Comandos Existen dos tipos de comandos SQL: DLL que permiten crear y definir nuevas bases de datos, campos e índices. DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.
Comandos DLL Comando Descripción CREATE Utilizado para crear nuevas tablas, campos e índices DROP
ALTER
Empleado para eliminar tablas e índices Utilizado para modificar las tablas agregando campos o cambiando la definición de los campos.
Comandos DML Comando Descripción
SELECT
INSERT
UPDATE
Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado Utilizado para cargar lotes de datos en la base de datos en una única operación. Utilizado para modificar los valores de los campos y registros especificados
DELETE Utilizado para eliminar registros de una tabla de una base de datos . PL/SQL Es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones y elementos propios de los lenguajes de programación. Puede combinar las consultas SQL y las instrucciones de procedimientos (condicional y procesamiento iterativo) para crear un tratamiento complejo y ser almacenados en la base de datos.
Para programar en PL/SQL es necesario conocer sus fundamentos. Como introducción vamos a ver algunos elementos y conceptos básicos del lenguaje.
PL/SQL no es CASE-SENSITIVE, es decir, no diferencia mayúsculas de minúsculas como otros lenguajes de programación como C o Java. Sin embargo debemos recordar que ORACLE es CASE-SENSITIVE en la búsquedas de texto.
Una línea en PL/SQL contiene grupos de caracteres conocidos como UNIDADES LEXICAS, que pueden ser clasificadas como:
Delimitadores
Identificadores
Literales
Comentarios
Expresiones
DELIMITADOR: Es un símbolo simple o compuesto que tiene una función especial en PL/SQL. Estos pueden ser:
Operadores Aritméticos
Operadores Lógicos
Operadores Relacionales
IDENTIFICADOR: Son empleados para nombrar objetos de programas en PL/SQL así como a unidades dentro del mismo, estas unidades y objetos incluyen:
Constantes
Cursores
Variables
Subprogramas
Excepciones
Paquetes
LITERAL: Es un valor de tipo numérico, carácter, cadena o lógico no representado por un identificador (es un valor explícito).
COMENTARIO: Es una aclaración que el programador incluye en el código. Son soportados 2 estilos de comentarios, el de línea simple y de multilínea, para lo cual son empleados ciertos caracteres especiales como son:
-- Línea simple
/* Conjunto de Líneas */
Tipos de datos en PL/SQL Cada constante y variable tiene un tipo de dato en el cual se especifica el formato de almacenamiento, restricciones y rango de valores validos. PL/SQL proporciona una variedad predefinida de tipos de datos. Casi todos los tipos de datos manejados por PL/SQL son similares a los soportados por SQL. A continuación se muestran los TIPOS de DATOS más comunes:
NUMBER (Numérico): Almacena números enteros o de punto flotante, virtualmente de cualquier longitud, aunque puede ser especificada la precisión (Número de digitos) y la escala que es la que determina el número de decimales.
-- NUMBER [(precisión, escala)] Saldo NUMBER(16,2); /* Indica que puede almacenar un valor numérico de 16 posiciones, 2 de ellas decimales. Es decir, 14 enteros y dos decimales */
CHAR (Caracter): Almacena datos de tipo caracter con una longitud máxima de 32767 y cuyo valor de longitud por default es 1
-- CHAR [(longitud_maxima)] nombre CHAR(20); /* Indica que puede almacenar valores alfanuméricos de 20 posiciones */
VARCHAR2 (Caracter de longitud variable): Almacena datos de tipo caracter empleando sólo la cantidad necesaria aún cuando la longitud máxima sea mayor.
-- VARCHAR2 (longitud_maxima) nombre VARCHAR2(20); /* Indica que puede almacenar valores alfanuméricos de hasta 20 posiciones */ /* Cuando la longitud de los datos sea menor de 20 no se rellena con blancos */
BOOLEAN (lógico): Se emplea para almacenar valores TRUE o FALSE.
hay_error BOOLEAN;
DATE (Fecha): Almacena datos de tipo fecha. Las fechas se almacenan internamente como datos numéricos, por lo que es posible realizar operaciones aritméticas con ellas.
Atributos de tipo. Un atributo de tipo PL/SQL es un modificador que puede ser usado para obtener información de un objeto de la base de datos. El atributo %TYPE permite conocer el tipo de una variable, constante o campo de la base de datos. El atributo %ROWTYPE permite obtener los tipos de todos los campos de una tabla de la base de datos, de una vista o de un cursor.
PL/SQL también permite la creación de tipos personalizados (registros) y colecciones (tablas de PL/SQL), que veremos en sus apartados correspondientes. Existen por supuesto más tipos de datos, la siguiente tabla los muestra: TIPOS DE RESTRICCIONES NOT NULL Obliga a que la columna tenga un valor no nulo. Los valores nulos son diferentes de 0 y el espacio en blanco. UNIQUE Evita valores repetidos en una columna, admitiendo valores nulos. CHECK Verifica que se cumpla una condición especifica DEFAULT Estable un valor por defecto para esta columna, si no se le asigna ninguno. PRIMARY KEY Una clave primaria identifica de forma única a un registro de una tabla. Establece columna o conjunto de columnas que hacen parte de la clave primaria. Solo puede existir una clave primaria por tabla. Puede ser referenciada como clave foránea por otras tablas. FOREIGN KEY Es una restricción que hace referencia a una clave en otra tabla, a menudo una clave primaria. Establece que el contenido de esta columna será uno de los valores contenidos en una columna de otra tabla o de la misma. Se usa claves foráneas para vincular múltiples tablas, como una tabla de clientes y una tabla que liste los artículos comprados por cada cliente.
CURSORES CURSORES El área de contexto es la memoria designada para procesar una instrucción SQL, la cual incluye
el número de registros procesados,
un apuntador a la representación de la instrucción SQL analizada y,
en el caso de una consulta, el conjunto de registros que regresan de la consulta.
Un cursor es un manejador o apuntador para el área de contexto. Por medio de éste un programa
PL/SQL
puede
controlar
el
área
de
contexto.
Los cursores implícitos son creados por Oracle para manejar alguna instrucción SQL y no
son
declarados
por
el
programador.
Los cursores explícitos son aquellos qwe se declaran, generalmente por medio de una consulta SQL. Pasos para procesar un cursor explícito 1. Declaración del cursor o
La consulta no debe contener la cláusula INTO.
o
Se puede hacer referencia a variables dentro de la cláusula WHERE.
CURSOR nombre_cursor IS instrucción_SELECT
o
También es posible declarar una lista de parámetros:
CURSOR nombre_cursor(param1 tipo1, ..., paramN tipoN) IS instrucción_SELECT
9. Abrir el cursor o
La sintaxis es:
OPEN nombre_cursor; o
Se examinan los valores de las variables
o
Se determina el conjunto activo
o
El apuntador para el conjunto activo se establece en el primer registro
10. Recuperar los resultados en variables PL/SQL o
Tiene dos formas:
FETCH cursor_name INTO lista_variables; o FECTH cursor_name INTO registro_PL/SQL; 11. Cerrar el cursor o
La sintaxis es:
CLOSE nombre_cursor; o
Cuando se cierra el cursor, es ilegal tratar de usarlo
o
Es ilegal tratar de cerrar un cursor que ya está cerrado o no ha sido abierto
PL/SQL utiliza cursores para gestionar las instrucciones SELECT. Un cursor es un conjunto de registros devuelto por una instrucción SQL. Técnicamente los cursores son fragmentos de memoria que reservados para procesar los resultados de una consulta SELECT que devuelvan más de una fila. TIPOS DE CURSORES
Cursores implícitos. Este tipo de cursores se utiliza para operaciones SELECT INTO. Se usan cuando la consulta devuelve un único registro.
Cursores explícitos. Son declarados y controlados por el programador. Se utilizan cuando la consulta devuelve un conjunto de registros. Se utilizan en consultas que devuelven un único registro por razones de eficiencia.
Un cursor se define como cualquier otra variable de PL/SQL y debe nombrarse de acuerdo a los mismos convenios que cualquier otra variable. Los cursores implícitos no necesitan declaración. Un cursor admite el uso de parámetros. Los parámetros deben declararse junto con el cursor. El siguiente ejemplo muestra la declaración de un cursor con un parámetro, identificado por p_continente.
declare cursor c_paises (p_continente INVARCHAR2) is SELECT CO_PAIS, DESCRIPCION FROM PAISES WHERE CONTINENTE = p_continente; begin /* Sentencias del bloque ...*/ end;
El siguiente diagrama representa como se procesa una instrucción SQL a través de un cursor.
SINTAXIS: CURSOR nombre_cursor IS sentencia_SELECT;
El nombre del cursor es un identificador PL/SQL, y ha de ser declarado en la sección declarativa del bloque antes de poder hacer referencia a él. APERTURA DE UN CURSOR OPEN nombre_cursor; EJEMPLO:
La cláusula INTO de la consulta es parte de la orden FETCH. Dicha orden tiene dos formas posibles: FETCH nombre_cursor INTO lista_variables; FETCH nombre_cursor INTO registro_PL/SQL; Nombre_cursor:Identifica a un cursor abierto y ya declarado. Lista_variables: Es una lista de variables PL/SQL previamente declaradas y separadas por comas. Registro_PL/SQL:Es un registro PL/SQL previamente declarado. En ambos casos, la variable o variablesde la cláusula INTO deben ser compatibles en cuanto a tipocon la lista de selección de la consulta.
Después de cada FETCH, se incrementa el puntero activo, para que
apunte a la
siguiente fila. De esta forma, cada FETCH devolverá filas sucesivas del conjunto activo, hasta que se devuelve el conjunto completo. Cuando se ha terminado de extraer el conjunto activo, debe cerrarse el cursor. Esta acción informa a PL/SQL de que el programa ha terminado de utilizar el cursor, y de que se pueden liberar los recursos con él asociados. Estos recursos incluyen las áreas de almacenamiento empleadas para contener el conjunto activo, así como cualquier espacio temporal utilizado en la determinación de dicho conjunto. La sintaxis para el cierre del cursor es: CLOSE nombre_cursor; CREACIÓN DE UN PROCEDIMIENTO ALMACENADO Un procedimiento PL/SQL es similar a los procedimientos de otros lenguajes de programación. Es un bloque con nombre que tiene la misma estructura que los bloques anónimos. La sintaxis es:
CREACIÓN DE UN PROCEDIMIENTO nombre_procedimiento: Nombre del procedimiento que se quiere crear Argumento: Nombre de un parámetro del procedimiento Tipo: Tipo del parámetro asociado Cuerpo_procedimiento: Bloque PL/SQL que contiene el código del procedimiento
tipodatos_parametro indica el tipo de datos que tendrá el parámetro según lo indicado en Tipos de datos Oracle/PLSQL. El uso deOR REPLACEpermite sobreescribir un procedimiento existente. Si se omite, y el procedimiento existe, se producirá, un error. LOS PARÁMETROS FORMALES: IN, OUT O IN OUT. IN indica que el parámetro es de entrada y no se podrá modificar. OUT indica que el parámetro es de salida con lo que el procedimiento devolverá un valor en él. IN OUT indica que el parámetro es de entrada/salida. Con lo que al llamar al procedimiento se le dará un valor que luego podrá ser modificado por el procedimiento y devolver este nuevo valor. TIPOS DE PROCEDIMIENTOS INSERTAR
ACTUALIZAR
ELIMINAR
BUSCAR
INDICES Los índices en SQL almacenan valores y punteros a las filas donde los valores se producen. Ejemplo SELECT stock, precio FROM
producto
WHERE nombre = ' ESCOBAS' ; La sentencia no dice si existe índice sobre la columna nombre y la consulta se llevara a cabo, exista índice o no. Si no existe, hay que recorrer secuencialmente la tabla producto fila por fila. Si Existe examina el índice y sigue al puntero para encontrar la(s) fila(s). La búsqueda en índices es muy rápida, pasar del índice a la fila, también es muy rápido ya que el índice informa al DBMS en qué lugar del disco está localizada la fila. Tiene la desventaja de que ocupa espacio adicional y que existirán tiempos adicionales en las operaciones INSERT y UPDATE. Sintaxis:
CREATE
UNIQUE
INDEX nombre-indice
ON nombre-tabla (nombre-columna(s); CREATE
UNIQUE
INDEX
indice1
ON producto (nombre) Para borrar un índice: DROP INDEX nombre-indice DROP INDEX indice1 VISTAS Una vista es una consulta que esta permanentemente almacenada en la base de datos y a la que se le asigna un nombre. Es como una tabla virtual. No puede ser modificada, gasta espacio pero es muy veloz para consultas y se actualiza automáticamente. Sintaxis: CREATE VIEW nombre-vista AS SELECT {* | {nombre-columna(s),} FROM {nombre-tabla(s),} [WHERE condición] [ORDER BY {expresion | nombre-columna [ASC | DESC]}]; CREATE VIEW vista 1 AS SELECT codpro, nombre, cantidad, valor FROM pedido, producto WHERE pedido.codpro = producto.codpro; Para eliminar una vista se utiliza la sentencia: DROP VIEW nombre-vista; INFORMES CON SQL
SQL se puede crear la estructura de la base de datos, se pueden actualizar estos, pero la herramienta más poderosa es para crear informes refinados, rápidos y bien formateados. Permitiendo un manejo sencillo sobre los títulos, cabeceras de columnas, subtotales y totales. Es el uso más común de SQL, consultas e impresión de informes. PRINCIPALES COMANDOS REMARK: Comentarios. Se puede abreviar a REM SET HEADSEP
: Indica cual es el carácter utilizado para partir un título en 2 o más líneas. TTITLE: Título superior BTITLE: Titulo inferior COLUMN: Columnas del informe BREAK ON: Donde imprimir subtotales o totales COMPUTE SUM: Hace que SQL calcule totales SET LINE SIZE: Caracteres por línea SET PAGE SIZE: Líneas por pagina SPOOL: Re direcciona el informe para un archivo.
/* Comentarios entre varias líneas */
Ejemplo: REM Programa ejemplo de informe con SQL REM Descripción : Informe de ventas por articulo. SET HEADSEP !
TTITLE ' INFORME DE VENTAS DETALLADO ! POR ARTICULO ' BTTILE
' COMPAÑÍA XYZ '
COLUMN nombre HEADING ' Nombre ! Producto ' format a18 word wrapped à siga en la siguiente línea COLUMN cantidad HEADING ' Unidades ' COLUMN valor
HEADING ' Valor ! Venta '
BREAK ON nompro SKIP 2 à salte 2 líneas antes de imprimir subtotales COMPUTE SUM OF valor ON nompro SET LINESIZE
80
SET PAGESIZE
50
SPOOL informe.lst à el informe es guardado en un archivo llamado informe.lst SELECT nombre, cantidad, valor FROM pedido, producto WHERE pedido.codpro = producto.codpro ORDER BY nompro; Generar una base de datos que permita mostrar las notas de los alumnos por medio del numero de cedula del alumno, se muestra las materias que imparte el profesor y visualizar las materias que se encuentre inscrito el alumno MODELO IDENTIDAD RELACION
DIAGRAMA RELACIONAL ENTRE TABLAS
CRACION DE LA BASE DE DATOS CODIGO CREATE DATABASE REGISTRO USE REGISTRO GO CREATE TABLE ALUMNO ( CIALU NVARCHAR(10)PRIMARY KEY, NOMALU NVARCHAR(70) NOT NULL, APEALU NVARCHAR(70) NOT NULL, DIRALU NVARCHAR(100) NOT NULL, TELALU NVARCHAR(10) NOT NULL, CELALU NVARCHAR(10) NOT NULL, EMAILALU NVARCHAR(50) NOT NULL, REPRESENTANTEALU NVARCHAR(50) NOT NULL, SEXOALU NVARCHAR(50) NOT NULL, CODICAR NVARCHAR(6)FOREIGN KEY (CODICAR) REFERENCES CARRERA (CODCAR)) GO CREATE TABLE PROFESOR ( CIPRO NVARCHAR(10)PRIMARY KEY, NOMPRO NVARCHAR(70) NOT NULL, APEPRO NVARCHAR(70) NOT NULL,
DIRPRO NVARCHAR(100) NOT NULL, TELPRO NVARCHAR(10) NOT NULL, CELPRO NVARCHAR(10) NOT NULL, EMAILPRO NVARCHAR(50) NOT NULL, TITULOSPRO NVARCHAR(50) NOT NULL, CODCAR NVARCHAR(6)FOREIGN KEY (CODCAR) REFERENCES CARRERA (CODCAR)) GO CREATE TABLE CARRERA ( CODCAR NVARCHAR(6)PRIMARY KEY, NOMCAR NVARCHAR(70) NOT NULL, DESCRIPCIONCAR NVARCHAR(100) NOT NULL) GO CREATE TABLE NIVEL ( CODNIV NVARCHAR(6)PRIMARY KEY, NOMNIV NVARCHAR(70) NOT NULL, DESCRIPCIONNIV NVARCHAR(100) NOT NULL, CODICAR NVARCHAR(7)FOREIGN KEY (CODICAR) REFERENCES CARRERA (CODCAR)) GO CREATE TABLE NOTAS( CODNOT NVARCHAR (6)NOT NULL, NOTA1 NVARCHAR (10) NOT NULL, NOTA2 NVARCHAR (10) NOT NULL, NOTAFINAL NVARCHAR (10) NOT NULL, CODIMAT NVARCHAR(7)FOREIGN KEY (CODIMAT) REFERENCES MATERIA (CODMAT)) GO CREATE TABLE MATERIA( CODMAT NVARCHAR (7) PRIMARY KEY , NOMMAT NVARCHAR(70) NOT NULL, CREDITOSMAT NVARCHAR(10) NOT NULL, FECINICIO DATETIME, FECFINAL DATETIME, CODALU NVARCHAR(10)FOREIGN KEY (CODALU) REFERENCES ALUMNO (CIALU), CODPRO NVARCHAR(10)FOREIGN KEY (CODPRO) REFERENCES PROFESOR (CIPRO), CODINIV NVARCHAR(6)FOREIGN KEY (CODINIV) REFERENCES NIVEL (CODNIV))
POCEDIMIENTOS ALAMACENADOS ELIMINAR CREATE PROCEDURE [dbo].[ELIMINAR_ALU] @CIALU NVARCHAR (10) AS DELETE FROM ALUMNO WHERE CIALU=@CIALU
INSERTAR CREATE PROCEDURE [dbo].[INGRESAR_ALU] @CIALU nvarchar(10), @NOMALU nvarchar(70), @APEALU nvarchar(70), @DIRALU nvarchar(100), @TELALU nvarchar(10), @CELALU nvarchar(10), @EMAILALU nvarchar(50), @REPRESENTANTEALU nvarchar(50), @SEXOALU nvarchar(50) AS BEGIN INSERT INTO ALUMNO(CIALU,NOMALU,APEALU,DIRALU,TELALU,CELALU,EMAILALU,R EPRESENTANTEALU,SEXOALU) VALUES (@CIALU,@NOMALU,@APEALU,@DIRALU,@TELALU,@CELALU,@EMAILA LU,@REPRESENTANTEALU,@SEXOALU) print 'REGISTROS INGRESADOS EXITOSAMENTE' END EXECUTE INGRESAR_ALU '1726032699','TATIANA','SANGOLUISA','GUAMANI','3006708','0984084873','TATI [email protected]','KARLA','FEMENINO' MODIFICAR CREATE PROCEDURE [DBO].[ACTUALIZAR_ALU] @CIALU NVARCHAR(10), @NOMALU NVARCHAR(70), @APEALU NVARCHAR(70), @DIRALU NVARCHAR(100), @TELALU NVARCHAR(10), @CELALU NVARCHAR(10), @EMAILALU NVARCHAR(50), @REPRESENTANTEALU NVARCHAR(50), @SEXOALU NVARCHAR(50) AS BEGIN IF EXISTS (SELECT * FROM ALUMNO WHERE CIALU=@CIALU) BEGIN UPDATE ALUMNO SET NOMALU=@NOMALU, APEALU=@APEALU, DIRALU=@DIRALU,
TELALU=@TELALU, CELALU=@CELALU, EMAILALU=@EMAILALU, REPRESENTANTEALU=@REPRESENTANTEALU, SEXOALU=@SEXOALU WHERE CIALU=@CIALU PRINT'REGISTRO ACTUALIZADO CORRECTAMENTE' END BUSCAR CREATE PROCEDURE [dbo].[BUSCAR_ALU] AS SELECT *FROM PROFESOR ORDER BY NOMPRO EXEC BUSCAR_ALU INDICES
VISTAS CREATE VIEW VIPROFESOR AS SELECT CIPRO,NOMPRO,APEPRO,DIRPRO,TELPRO FROM PROFESOR SELECT *FROM VIPROFESOR CURSORES DECLARE @CIPRO INT DECLARE @NOMPRO VARCHAR(70) DECLARE @APEPRO VARCHAR(70) DECLARE CURSOR1 SCROLL CURSOR FOR SELECT CIPRO, NOMPRO, APEPRO FROM PROFESOR OPEN CURSOR1 FETCH NEXT FROM CURSOR1 INTO @CIPRO ,@NOMPRO ,@APEPRO WHILE @@FETCH_STATUS = 0 BEGIN UPDATE PROFESOR SET EMAILPRO = LOWER(SUBSTRING(@NOMPRO,1,1)+@APEPRO+'@MIBASE.COM') WHERE CIPRO = @CIPRO FETCH NEXT FROM CURSOR1 INTO @CIPRO ,@NOMPRO ,@APEPRO END CLOSE CURSOR1 DEALLOCATE CURSOR1
CONCLUSIONES
Es necesario realizar el modelo identidad relación para saber que es lo necesario o que es lo que el cliente necesita.
Hay que plantear cuales son las clases y los atributos para poder identificar las claves primarias y las claves foráneas que hay en una base de datos
Se necesita realizar el diagrama para saber si las relaciones están realizadas correctamente para poder implementar los datos en cada tabla.
Los procedimientos se cra de acuerdo a los requerimientos del cliente.
Los índices en pl/sql se crean automáticamente al momento de crear cada tabla en el proceso.
RECOMENDACIONES
En necesario tener los programas adecuados para generar una base de datos.
WEBGRAFIA
http://es.wikipedia.org/wiki/Base_de_datos
http://es.kioskea.net/contents/66-introduccion-bases-de-datos
http://personal.lobocom.es/claudio/sql001.htm
http://basdatos.tripod.com/SQL.html
http://personales.unican.es/zorrillm/BDAvanzadas/Practicas/belen_plsql.pdf
http://www.devjoker.com/contenidos/catss/32/Cursores-en-PLSQL.aspx
http://www.slideshare.net/josemiguelguerreromontero/sqlprocedimientosalmacenados
http://es.scribd.com/doc/3589792/Manual-De-Oracle-Y-Pl-Sql
http://www.slideshare.net/josemiguelguerreromontero/sqlprocedimientosalmacenados