BASE DE DATOS
MODELO RELACIONAL
Introducción: El modelo relacional a finales de los 60. En 1970 publica el documento “A Relational Model of data for Large Shared Data Banks” (“Un modelo relacional de datos para grandes bancos de datos compartidos”). Es uno de los documentos más influyentes de toda la historia de la informática.
Objetivo: Codd perseguía estos objetivos con su modelo:
Independencia física: La forma de almacenar los datos, no debe influir en su manipulación lógica. Si la forma de almacenar los datos cambia, los usuarios no tienen siquiera porque percibirlo y seguirán trabajando de la misma forma con la base de datos. Esto permite que los usuarios y usuarias se concentren en qué quieren consultar en la base de datos y no en cómo está realizada la misma.
Independencia lógica: Las aplicaciones que utilizan la base de datos no deben ser modificadas porque se modifiquen elementos de la base de datos. Es decir, añadir, borrar y suprimir datos, no influye en las vistas de los usuarios. De una manera más precisa, gracias a esta independencia el esquema externo de la base de datos es realmente independiente del modelo lógico.
Flexibilidad: La base de datos ofrece fácilmente distintas vistas en función de los usuarios y aplicaciones.
Uniformidad: Las estructuras lógicas siempre tienen una única forma conceptual (las tablas).
Sencillez: Facilidad de manejo (algo cuestionable, pero ciertamente verdadero si comparamos con los sistemas gestores de bases de datos)
Historia del modelo relacional:
1970: Codd publica las bases del modelo relacional
1971-72: Primeros desarrollos teóricos
1973-78: Primeros prototipos de base de datos relacional. Son el SYSTEM R de IBM. En ese sistema se desarrolla Sequel que con el tiempo cambiara su nombre a SQL
1979: Aparece Oracle, el primer SGBD comercial relacional (ganando en unas semanas al SYSTEM/38 de IBM).
Implementa SQL y se convertirá en el sistema gestor de base de datos relacionales líder del mercado.
1981: Aparece Informix como SGBD relacional para Unix
1983: Aparece DB2, el sistema gestor de base de datos relacionales de IBM
1984-1988: ANSI normaliza el SQL (SQL/ANSI). SQL es ya de hecho el lenguaje principal de gestión de base de datos relacionales.
1990-1999: Manifiesto de Darwen y Date en el que animan a reinterpretar el modelo relacional desde una perspectiva de objetos. Aparece el modelo objeto/relacional, el SGBD abierto PostgreSQL como remodelacion de la antigua Ingres, utilizando de forma nativa de el lenguaje SQL (en lugar de Quel).
2003-2011: ISO publica el estandar SQL 2003. En el que añade SQL/PSM al estandar, Estar ISO. SQL 2006, 2008, 2011.
RELACIÓN O TABLA
El elemento fundamental es lo que se conoce como relación, aunque mas habitualmente se le llama tabla (o tambien array o matriz).
Atributos: Referido a cada propiedad de los datos que se almacenan en la relación (nombre, dni, ...).
Tuplas: Referido a cada elemento de la relación. Por ejemplo si una relación almacenas personas, una tupla representaría a una persona en concreto.
TUPLA
Cada una de las filas de la relación. Se corresponde con la idea clásica de registro. Representa por tanto cada elemento individual de esa relación. Tiene que cumplir que:
Cada tupla se debe corresponder con un elemento del mundo real.
No puede haber dos tuplas iguales (con todos los valores iguales)
DOMINIO
La forma de indicar el contenido de un dominio se puede hacer utilizando dos posibles técnicas:
Intensión: Se define el nomino indicando la definición exacta de sus posibles valores. Por intensión se puede definir el dominio de edades de los trabajadores como: números enteros entre el 16 y el 65 (un trabajador sólo podría tener una edad entre 16 y 65 años).
Extensión: Se indican algunos valores y se sobreentiende el resto gracias a que se autodefinen con los anteriores. Por ejemplo el dominio localidad se podría definir por extensión así: Palencia, Valladolid, Villamuriel de Cerrato,...
GRADO
Indica el de una relación en base al número de columnas (atributos) de la misma. Lógicamente cuanto mayor es el grado de una relación, mayor es su complejidad al manejarla.
CARDINALIDAD
Número de tuplas de una relación, o número de filas de una tabla.
SINÓNIMOS
tienen distintos sinónimos según la nomenclatura utilizada.
Termino 1 Termino 2 Termino 3
relación = tabla = fichero
tupla = fila = registro
atributo = columna = campo
grado = nº de columnas = nº de campos
cardinalidad = nº de filas = nº de registros
DEFINICIÓN FORMAL DE RELACIÓN
Una relación está formada por estos elementos:
Nombre: Identifica la relación.
Cabecera de relación: Conjunto de todos los pares atributo-domino de la relación: donde n es el grado.
Cuerpo de la relación: Representa el conjunto de n tuplas {t1, t2,... tn} que forman la relación. Cada tupla es un conjunto de n pares atributo-valor, donde Vij es el valor j del dominio Di asociado al atributo Ai.
Esquema de la relación: Se forma con el nombre R y la cabecera.
PROPIEDADES DE LAS TABLAS (O RELACIONALES)
*Cada tabla tiene un nombre distinto
*Cada atributo de la tabla toma un solo valor en cada tupla
*Cada atributo tiene un nombre distinto en cada tabla (aunque puede coincidiren tablas distintas)
*Cada tupla es única (no hay tuplas duplicadas)
*El orden de los atributos no importa
*El orden de las tuplas no importa
TIPOS DE TABLA
Persistentes. Sólo pueden ser borradas por los usuarios:
Bases. Independientes, se crean indicando su estructura y sus ejemplares. Contienen tanto datos como metadatos.
Vistas. Son tablas que sólo almacenan una definición de consulta, resultado de la cual se produce una tabla cuyos datos proceden de las bases o de otras vistas e instantáneas.
Instantáneas. Son vistas (creadas de la misma forma) que sí que almacenan los datos que muestra, además de la consulta que dio lugar a esa vista. Sólo modifican su resultado (actualizan los datos) siendo refrescadas por el sistema cada cierto tiempo (con lo que tienen el riesgo de que muestren algunos datos obsoletos.
Temporales. Son tablas que se eliminan automáticamente por el sistema. Pueden ser de cualquiera de los tipos anteriores.
CLAVES
Clave candidata
Conjunto de atributos que identifican unívocamente cada tupla de la relación. Es decir columnas cuyos valores no se repiten en ninguna otra tupla de esa tabla.
Clave primaria
Clave candidata que se escoge como identificador de las tuplas. Se elige como primaria la candidata que identifique mejor a cada tupla en el contexto de la base de datos.
Clave alternativa
Cualquier clave candidata que no sea primaria.
Clave externa, ajena o secundaria
Son los datos de atributos de una tabla cuyos valores están relacionados con atributos de otra tabla.
NULOS
Las bases de datos relacionales permiten más posibilidades para el valor nulo (null), aunque su significado no cambia: valor vacío. No obstante en las bases de datos se utiliza para diversos fines.
En claves secundarias indican que el registro actual no está relacionado con ninguno. En otros atributos indica que la tupla en cuestión carece de dicho atributo: por ejemplo en una tabla de personas un valor nulo en el atributo teléfono indicaría que dicha persona no tiene teléfono.
Es importante indicar que el texto vacío ‘ ’, no significa lo mismo en un texto que el nulo; como tampoco el valor cero significa nulo.
RESTRICCIONES
Inherentes
Son aquellas que no son determinadas por los usuarios, sino que son definidas por el hecho de que la base de datos sea relacional. Las más importantes son:
*No puede haber dos tuplas iguales
*El orden de las tuplas no es significativo
*El orden de los atributos no es significativo
*Cada atributo sólo puede tomar un valor en el dominio en el que está inscrito
Semánticas
Clave principal (primary key)
También llamada clave primaria. Marca uno o más atributos como identificadores de la tabla. De esa forma en esos atributos las filas de la tabla no podrán repetir valores ni tampoco dejarlos vacíos.
Unicidad (unique)
Impide que los valores de los atributos marcados de esa forma, puedan repetirse. Esta restricción debe indicarse en todas las claves alternativas.
Obligatoriedad (not null)
Prohíbe que el atributo marcado de esta forma quede vacío (es decir impide que pueda contener el valor nulo, null).
Integridad referencial (foreign key)
Sirve para indicar una clave externa (también llamada secundaria y foránea) sobre uno o más atributos. Los atributos marcados de esta forma sólo podrán contener valores que estén relacionados con la clave principal de la tabla que relacionan (llamada tabla principal).
Regla de validación (check)
Condición lógica que debe de cumplir un dato concreto para darlo por válido. Por ejemplo restringir el campo sueldo para que siempre sea mayor de 1000, sería una regla de validación. También por ejemplo que la fecha de inicio sea mayor que la fecha final.
Disparadores o triggers
Se trata de pequeños programas grabados en la base de datos que se ejecutan automáticamente cuando se cumple una determinada condición. Sirven para realizar una serie de acciones cuando ocurre un determinado evento (cuando se añade una tupla, cuando se borra un dato, cuando un usuario abre una conexión…)
LAS 12 REGLAS DE CODD
Estas reglas en la práctica las cumplen pocos sistemas relacionales. Las reglas son:
(1) Información. Toda la información de la base de datos (metadatos) debe estar representada explícitamente en el esquema lógico. Es decir, todos los datos están en las tablas.
(2) Acceso garantizado. Todo dato es accesible sabiendo el valor de su clave y el nombre de la columna o atributo que contiene el dato.
(3) Tratamiento sistemático de los valores nulos. El DBMS debe permitir el tratamiento adecuado de estos valores. De ese modo el valor nulo se utiliza para representar la ausencia de información de un determinado registro en un atributo concreto.
(4) Catálogo en línea basado en el modelo relacional. Los metadatos deben de ser accesibles usando un esquema relacional. Es decir la forma de acceder a los metadatos es la misma que la de acceder a los datos.
(5) Sublenguaje de datos completo. Al menos debe de existir un lenguaje que permita el manejo completo de la base de datos. Este lenguaje, por lo tanto, debe permitir realizar cualquier operación sobre la misma.
(6) Actualización de vistas. El SGBD debe encargarse de que las vistas muestren la última información. No son válidas vistas que muestren datos que no están al día.
(7) Inserciones, modificaciones y eliminaciones de dato nivel. Cualquier operación de modificación debe actuar sobre conjuntos de filas o registros, nunca deben actuar registro a registro.
(8) Independencia física. Los datos deben de ser accesibles desde la lógica de la base de datos, aun cuando se modifique el almacenamiento. La forma de acceder a los datos no varía porque el esquema físico de la base de datos, cambie.
(9) Independencia lógica. Los programas no deben verse afectados por cambios en las tablas. Que las tablas cambien no implica que cambien los programas.
(10) Independencia de integridad. Las reglas de integridad deben almacenarse en la base de datos (en el diccionario de datos), no en los programas de aplicación.
(11) Independencia de la distribución. El sublenguaje de datos debe permitir que sus instrucciones funciones igualmente en una base de datos distribuida que en una que no lo es.
(12) No subversión. Si el SGBD posee un lenguaje procedimental que permita crear bucles de recorrido fila a fila, éste no puede utilizarse para incumplir o evitar las reglas relacionales anteriores. Especialmente la regla 7 no puede ser incumplida por ningún lenguaje del SGBD.
PASO DE ENTIDAD/RELACIÓN DE CHEN AL MODELO RELACIONAL
Transformación de las entidades fuertes
En principio las entidades fuertes del modelo Entidad Relación son transformados al modelo relacional siguiendo estas instrucciones:
Entidades. Las entidades pasan a ser tablas
Atributos. Los atributos pasan a ser columnas o atributos de la tabla.
Identificadores principales. Pasan a ser claves primarias
Identificadores candidatos. Pasan a ser claves candidatas.
TRANSFORMACIÓN DE RELACIONES
Relaciones varios a varios
En las relaciones varios a varios (n a n en la cardinalidad mayor, la cardinalidad menor no cuenta para esta situación), la relación se transforma en una tabla cuyos atributos son: los atributos de la relación y las claves de las entidades relacionadas (que pasarán a ser claves externas).
Relaciones de orden n
Las relaciones ternarias, cuaternarias y n-arias que unen más de dos relaciones se transforman en una tabla que contiene los atributos de la relación más los identificadores de las entidades relacionadas.
Relaciones uno a varios
Las relaciones binarios de tipo uno a varios no requieren ser transformadas en una tabla en el modelo relacional. En su lugar la tabla del lado varios (tabla relacionada) incluye como clave externa1 el identificador de la entidad del lado uno (tabla principal).
Relaciones uno a uno
*Colocar la clave de una de las entidades como clave externa de la otra tabla (da igual cuál), teniendo en cuenta que dicha clave será clave alternativa además de ser clave secundaria.
*Generar una única tabla con todos los atributos de ambas entidades colocando como clave principal cualquiera de las claves de las dos entidades. La otra clave será marcada como clave alternativa.
Relaciones cero a uno
Se trata de relaciones entre dos entidades con cardinalidad máxima de 1 en ambas direcciones, pero en una de ellas la cardinalidad mínima es 0. En este caso la solución difiere respecto a la anterior solución.
Relaciones cero a cero
En el caso de que en ambos extremos nos encontremos con relaciones 0 a 1, entonces la solución es la misma, pero la clave que se copia en la tabla para ser clave secundaria, debe de ser tomada de la entidad que se relacione más con la otra (la que esté más cerca de tener la cardinalidad 1 a 1 en el otro extremo).
Relaciones recursivas
Las relaciones recursivas se tratan de la misma forma que las otras, sólo que hay que imaginar que la tabla se divide en dos, una por cada rol. Teniendo en cuenta eso, la solución es idéntica a lo ya resuelto en los casos anteriores.
ENTIDADES DÉBILES
Toda entidad débil incorpora una relación implícita con una entidad fuerte. Esta relación no necesita incorporarse como tabla en el modelo relacional (al tratarse de una relación n a 1), bastará con añadir como atributo y clave foránea en la entidad débil, el identificador de la entidad fuerte.
RELACIONES ISA
(1) Tanto las superentidades como las subentidades generarán tablas en el modelo relacional (en el caso de que la ISA sea de tipo total, se podría incluso no hacer la superentidad y pasar todos sus atributos a las subentidades, pero no es recomendable porque puede complicar enormemente el esquema interno).
(2) Los atributos se colocan en la tabla a la que se refiere a la entidad correspondiente
(3) En el caso de que las subentidades no hereden el identificador con la superentidad, se colocará en las subentidades el identificador de la superentidad como clave secundaria, además será clave alternativa.
(4) Si la ISA es exclusiva o no, no cambia el esquema relacional, pero sí habrá que tenerlo en cuenta para las restricciones futuras en el esquema interno (casi siempre se realizan mediante triggers), ya que en las exclusivas no puede haber repetición de la clave de la superentidad en ninguna subentidad.
(5) No varía el resultado por ser total o parcial la relación ISA, el modelo relacional no puede marcar esa posibilidad.
NOTAS FINALES
El modelo conceptual entidad/relación es el verdadero mapa de la base de datos. Hay aspectos que no se reflejan al instante, por ejemplo el hecho de si la cardinalidad mínima es 0 o uno, o la obligatoriedad en una relación,.... Especial cuidado hay que tener con las relaciones ISA. Son aspectos a tener en cuenta en el siguiente modelo (en el interno) al crear por ejemplo índices y restricciones.
MOTORES DE BASE DE DATOS
Representación de esquemas de bases de datos relacionales
PIEZA(Tipo, Modelo, Nombre, Apellido1, Apellido2)
EMPRESA(CIF, Cod_Empresa, Nombre, Dirección)
SUMINISTROS(Tipo,Modelo, Cod_Empresa, Precio)
EXISTENCIAS(Tipo, Modelo, N_Almacen, Cantidad)
En ese tipo de esquemas es difícil ver las relaciones en los datos, algo que sí se ve muy bien en los esquemas entidad relación.
Grafos relacionales
Es un esquema relacional en el que hay líneas que enlazan las claves principales con las claves secundarias para representar mejor las relaciones.
Ejemplo:
ESQUEMAS RELACIONALES DERIVADOS DEL MODELO ENTIDAD/RELACIÓN
Hay quien los llama esquemas entidad/relación relacionales, pero en general se consideran variantes del modelo entidad/relación.
Modelo de patas de gallo
Quizá el modelo más famoso sea el llamado modelo de pata de gallo (crow’s foot en inglés) utilizado en la metodología Information Engineering (Ingeniería de la Información) que tiene bastante popularidad; de hecho es el tipo de notación habitual en la mayoría de herramientas CASE.
Estilo Access
Se ha hecho muy popular la forma de presentar esquemas relacionales del programa Microsoft Access.
Ejemplo:
Completando esquemas
Sin duda los esquemas más completos son los que reflejan no sólo las cardinalidades sino también todas las restricciones (e incluso los tipos de datos, aunque esto ya es una competencia del esquema interno).
SIMBOLO EJEMPLO SIGNIFICADO
Subrayado DNI Clave principal
Subrayado Clave 2 Clave alternativa
discontinuo
° Nombre° No admite valores nulos (restricción NOT NULL)
° Nombre° No admite duplicados (restricción UNIQUE)
PROBLEMAS DEL ESQUEMA RELACIONAL
Una vez obtenido el esquema relacional resultante del esquema entidad/relación que representa la base de datos, normalmente tendremos una buena base de datos.
Redundancia. Se llama así a los datos que se repiten continua e innecesariamente por las tablas de las bases de datos. Cuando es excesiva es evidente que el diseño hay que revisarlo, es el primer síntoma de problemas y se detecta fácilmente.
Ambigüedades. Datos que no clarifican suficientemente el registro al que representan. Los datos de cada registro podrían referirse a más de un registro o incluso puede ser imposible saber a qué ejemplar exactamente se están refiriendo.
Pérdida de restricciones de integridad. Normalmente debido a dependencias funcionales. Más adelante se explica este problema. Se arreglan fácilmente siguiendo una serie de pasos concretos.
Anomalías en operaciones de modificación de datos. El hecho de que al insertar un solo elemento haya que repetir tuplas en una tabla para variar unos pocos datos.
FORMAS NORMALES
Las formas normales se corresponde a una teoría de normalización iniciada por el propio Codd y continuada por otros autores (entre los que destacan Boyce y Fagin). Codd definió en 1970 la primera forma normal, desde ese momento aparecieron la segunda, tercera, la Boyce-Codd, la cuarta y la quinta forma normal.
La teoría de formas normales es una teoría absolutamente matemática, pero en el presente manual se describen de forma más intuitiva.
PRIMERA FORMA NORMAL (1FN)
Es una forma normal inherente al esquema relacional. Es decir toda tabla realmente relacional la cumple.
Se dice que una tabla se encuentra en primera forma normal si impide que un atributo de una tupla pueda tomar más de un valor.
DEPENDENCIAS FUNCIONALES
Dependencia funcional
Se dice que un conjunto de atributos (Y) depende funcionalmente de otro conjunto de atributos (X) si para cada valor de X hay un único valor posible para Y. Simbólicamente se denota por X-Y.
Por ejemplo el nombre de una persona depende funcionalmente del DNI; es decir para un DNI concreto sólo hay un nombre posible. En la tabla del ejemplo anterior, el departamento no tiene dependencia funcional, ya que para un mismo DNI puede haber más de un departamento posible.
Dependencia funcional completa
Un conjunto de atributos (Y) tiene una dependencia funcional completa sobre otro conjunto de atributos (X) si Y tiene dependencia funcional de X y además no se puede obtener de X un conjunto de atributos más pequeño que consiga una dependencia funcional de Y (es decir, no hay en X un determinante formado por atributos más pequeños).
Dependencia funcional elemental
Se produce cuando X e Y forman una dependencia funcional completa y además Y es un único atributo.
Dependencia funcional transitiva
Es más compleja de explicar, pero tiene también utilidad. Se produce cuando tenemos tres conjuntos de atributos X, Y y Z. Y depende funcionalmente de X (X-Y), Z depende funcionalmente de Y (Y-Z). Además X no depende funcionalmente de Y (Y-X). Entonces ocurre que X produce una dependencia funcional transitiva sobre Z.
SEGUNDA FORMA NORMAL (2FN)
Ocurre si una tabla está en primera forma normal y además cada atributo que no sea clave, depende de forma funcional completa respecto de cualquiera de las claves. Toda la clave principal debe hacer dependientes al resto de atributos, si hay atributos que depende sólo de parte de la clave, entonces esa parte de la clave y esos atributos formarán otra tabla.
TERCERA FORMA NORMAL (3FN)
Ocurre cuando una tabla está en 2FN y además ningún atributo que no sea clave depende transitivamente de las claves de la tabla. Es decir no ocurre cuando algún atributo depende funcionalmente de atributos que no son clave.
Ejemplo:
FORMAL NORMAL DE BOYCE-CODD
(FNBC o BCFN)
Ocurre si una tabla está en tercera forma normal y además todo determinante es una clave candidata. Ejemplo:
La cuestión es que un tutor o tutora puede trabajar en varias materias. En dichas materias hay varios responsables, pero cada tutor sólo tiene asignado uno. El detalle importante que no se ha tenido en cuenta, es que el o la responsable sólo puede ser responsable de una materia.
CUARTA FORMA NORMAL (4FN) DEPENDENCIAS MULTIVALUADAS
Dependencia multivaluada
Para el resto de formas normales (las diseñadas por Fagin, mucho más complejas), es importante definir este tipo de dependencia, que es distinta de las funcionales. Si las funcionales eran la base de la segunda y tercera forma normal (y de la de Boyce-Codd), éstas son la base de la cuarta forma normal.
Una dependencia multivaluada de X sobre Y (es decir X->>Y), siendo X e Y atributos de la misma tabla, ocurre cuando Y tiene un conjunto de valores bien definidos sobre cualquier valor de X. Es decir, dado X sabremos los posibles valores que puede tomar Y.
Cuarta forma normal
Ocurre esta forma normal cuando una tabla está en forma normal de Boyce Codd y toda dependencia multivaluada no trivial es una dependencia funcional. Son triviales aquellas dependencias multivaluadas en las que el conjunto formado por el determinante y el implicado no forman la clave primaria de la tabla y además el implicado no forma parte del determinante: es decir si X->>Y y además Y - X y X,Y no es la clave de la tabla, tenemos una dependencia multivaluada no trivial (como ocurre en el ejemplo anterior).
QUINTA FORMA NORMAL (5FN)
Dependencias de JOIN o de reunión
Una proyección de una tabla es la tabla resultante de tomar un subconjunto de los atributos de una tabla (se trata de la operación proyección, 2, del álgebra relacional). Es decir una tabla formada por unas cuantas columnas de la tabla original.
Quinta forma normal o forma normal de proyección-unión
Ocurre cuando una tabla está en 4FN y cada dependencia de unión (JOIN) en ella es implicada por las claves candidatas.
Es la más compleja y polémica de todas. Polémica pues no está claro en muchas ocasiones está muy claro que el paso a 5FN mejore la base de datos. Fue definida también por Fagin.
FORMA NORMAL DE DOMINIO CLAVE (FNDC)
En este caso no se basó en dependencias entre los datos, sino que se basó en restricciones de dominio y restricciones de clave.
Restricciones de dominio. Se trata de la restricción que hace que un determinado atributo obtenga sólo ciertos valores, los que estén de acuerdo a la definición de un determinado dominio.
Restricción de clave. Es la restricción que permite que un atributo o un conjunto de atributos forme una clave candidata.
MOTORES DE BASE DE DATOS 2
SQL
SQL (por sus siglas en inglés Structured Query Language; en español lenguaje de consulta estructurada) es un lenguaje específico del dominio utilizado en programación, diseñado para administrar, y recuperar información de sistemas de gestión de bases de datos relacionales. Una de sus principales características es el manejo del álgebra y el cálculo relacional para efectuar consultas con el fin de recuperar, de forma sencilla, información de bases de datos, así como realizar cambios en ellas.
DDL
Permite crear y modificar la estructura de una base de datos
- CREATE: Utilizado para crear nuevas tablas, campos e índices.
- ALTER: Utilizado para modificar las tablas agregando campos o cambiando la definición de los campos.
- DROP: Empleado para eliminar tablas e índices.
- TRUNCATE: Empleado para eliminar todos los registros de una tabla.
- COMMENT: Utilizado para agregar comentarios al diccionario de datos.
- RENAME: Tal como su nombre lo indica es utilizado para renombrar objetos.
DML
Permite recuperar, almacenar, modificar, eliminar, insertar y actualizar datos de una base de datos.
- SELECT: Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado.
- INSERT: Utilizado para cargar de datos en la base de datos en una única operación.
- UPDATE: Utilizado para modificar los valores de los campos y registros especificados
- DELETE: Utilizado para eliminar registros de una tabla de una base de datos.
VERSIÓN DE SQL
Sin embargo hay que avisar que todos los ejemplos han sido probados para Oracle, mientras que no se puede decir lo mismo para SQL estándar. En el caso de SQL estándar, el software PostgreSQL se ha tenido muy en cuenta ya que parece el más respetuoso actualmente con el estándar.
FORMATO DE LAS INSTRUCCIONES EN LOS APUNTES
En este manual en muchos apartados se indica sintaxis de comandos. Esta sintaxis sirve para aprender a utilizar el comando, e indica la forma de escribir dicho comando en el programa utilizado para escribir SQL.
SELECT * | {[DISTINCT] columna | expresión [alias], ...}
FROM tabla;
Otras veces se describen códigos de ejemplo de un comando. Los ejemplos se escriben también con fondo naranja claro, pero sin el reborde. Ejemplo:
SELECT columna FROM tabla;
El texto columna hay que cambiarlo por un nombre concreto de columna (nombre, apellidos,...), al igual que tabla se refiere a un nombre de tabla concreto.
texto en negrita. Sirve para indicar texto o símbolos que hay que escribir de forma literal, pero que no son palabras reservadas del lenguaje.
[ ] (corchetes). Los corchetes sirven para encerrar texto que no es obligatorio en el comando, es decir para indicar una parte opcional.
| (barra vertical). Este símbolo (|), la barra vertical, indica opción. Las palabras separadas con este signo indican que se debe elegir una de entre todas las palabras.
HISTORIA DEL LENGUAJE SQL
En 1979 Oracle presenta la primera implementación comercial del lenguaje. Poco después se convertía en un estándar en el mundo de las bases de datos avalado por los organismos ISO y ANSI. En el año 1986 se toma como lenguaje estándar por ANSI de los SGBD relacionales. Un año después lo adopta ISO, lo que convierte a SQL en estándar mundial como lenguaje de bases de datos relacionales.
FUNCIONAMIENTO
componentes de un entorno de ejecución SQL
Según la normativa ANSI/ISO cuando se ejecuta SQL, existen los siguientes elementos a tener en cuenta en todo el entorno involucrado en la ejecución de instrucciones SQL:
° Un cliente SQL. Software conectado al agente que funciona como interfaz entre el agente SQL y el servidor SQL. Sirve para establecer conexiones entre sí mismo y el servidor SQL.
° Un servidor SQL (puede haber varios). El software encargado de manejar los datos a los que la instrucción SQL lanzada por el agente hace referencia. Es el software que realmente realiza la instrucción, los datos los devuelve al cliente.
posibles agentes SQL. posibles modos de ejecución SQL
ejecución directa. SQL interactivo
Las instrucciones SQL se introducen a través de un cliente que está directamente conectado al servidor SQL; por lo que las instrucciones se traducen sin intermediarios y los resultados se muestran en el cliente.
Ejecución incrustada o embebida
Las instrucciones SQL se colocan como parte del código de otro lenguaje que se considera anfitrión (C, Java, Pascal, Visual Basic,...). Al compilar el código se utiliza un precompilador de la propia base de datos para traducir el SQL y conectar la aplicación resultado con la base de datos a través de un software adaptador (driver) como JDBC u ODBC por ejemplo.
Ejecución a través de clientes gráficos
Se trata de software que permite conectar a la base de datos a través de un cliente. El software permite manejar de forma gráfica la base de datos y las acciones realizadas son traducidas a SQL y enviadas al servidor.
Ejecución dinámica
Se trata de SQL incrustado en módulos especiales que pueden ser invocados una y otra vez desde distintas aplicaciones.
PROCESO DE LAS INSTRUCCIONES SQL
El proceso de una instrucción SQL es el siguiente:
(1) Se analiza la instrucción. Para comprobar la sintaxis de la misma
(2) Si es correcta se valora si los metadatos de la misma son correctos. Se comprueba esto en el diccionario de datos.
(3) Si es correcta, se optimiza, a fin de consumir los mínimos recursos posibles.
(4) Se ejecuta la sentencia y se muestra el resultado al emisor de la misma.
ELEMENTOS DEL LENGUAJE SQL
CODIGO SQL
Comandos. Las distintas instrucciones que se pueden realizar desde SQL
SELECT. Se trata del comando que permite realizar consultas sobre los datos de la base de datos. Obtiene datos de la base de datos. A ésta parte del lenguaje se la conoce como DQL (Data Query Language, Lenguaje de consulta de datos); pero es parte del DML del lenguaje.
DML. Data Manipulation Language (Lenguaje de manipulación de datos). Modifica filas (registros) de la base de datos. Lo forman las instrucciones INSERT, UPDATE, MERGE y DELETE.
DDL. Data Definition Language (Lenguaje de definición de datos). Permiten modificar la estructura de las tablas de la base de datos. Lo forman las instrucciones CREATE, ALTER, DROP, RENAME y TRUNCATE.
DCL. Data Control Language (Lenguaje de control de datos). Administran los derechos y restricciones de los usuarios. Lo forman las instrucciones GRANT y REVOKE.
Instrucciones de control de transacciones (DTL). Administran las modificaciones creadas por las instrucciones DML. Lo forman las instrucciones ROLLBACK y COMMIT. Se las considera parte del DML.
NORMAS DE ESCRITURA
*En SQL no se distingue entre mayúsculas y minúsculas.
*Las instrucciones finalizan con el signo de punto y coma
*Cualquier comando SQL (SELECT, INSERT,...) puede ser partidos por espacios o saltos de línea antes de finalizar la instrucción
*Se pueden tabular líneas para facilitar la lectura si fuera necesario
*Los comentarios en el código SQL comienzan por /* y terminan por */ (excepto en algunos SGBD)
DDL
El DDL es la parte del lenguaje SQL que realiza la función de definición de datos del SGBD. Fundamentalmente se encarga de la creación, modificación y eliminación de los objetos de la base de datos (es decir de los metadatos). Por supuesto es el encargado de la creación de las tablas.
Cada usuario de una base de datos posee un esquema. El esquema suele tener el mismo nombre que el usuario y sirve para almacenar los objetos de esquema, es decir los objetos que posee el usuario.
CREACIÓN DE BASE DE DATOS
Esta es una tarea administrativa que se comentará más profundamente en otros temas. Por ahora sólo se comenta de forma simple. Crear la base de datos implica indicar los archivos y ubicaciones que se utilizarán para la misma, además de otras indicaciones técnicas y administrativas que no se comentarán en este tema.
Lógicamente sólo es posible crear una base de datos si se tienen privilegios DBA (DataBase Administrator) (SYSDBA en el caso de Oracle).
El comando SQL de creación de una base de datos es CREATE DATABASE. Este comando crea una base de datos con el nombre que se indique.
OBJETOS DE BASE DE DATOS
Según los estándares actuales, una base de datos es un conjunto de objetos pensados para gestionar datos. Estos objetos están contenidos en esquemas, los esquemas suelen estar asociados al perfil de un usuario en particular.
En el estándar SQL existe el concepto de catálogo que sirve para almacenar esquemas. Así el nombre completo de un objeto vendría dado por: catálogo.esquema.objeto
Si no se indica el catálogo se toma el catálogo por defecto. Si no se indica el esquema se entiende que el objeto está en el esquema actual. En Oracle, cuando se crea un usuario, se crea un esquema cuyo nombre es el del usuario.
CREACION DE TABLAS
Deben cumplir las siguientes reglas (reglas de Oracle, en otros SGBD podrían cambiar):
*Deben comenzar con una letra
*No deben tener más de 30 caracteres
*Sólo se permiten utilizar letras del alfabeto (inglés), números o el signo de subrayado (también el signo $ y #, pero esos se utilizan de manera especial por lo que no son recomendados)
*No puede haber dos tablas con el mismo nombre para el mismo esquema (pueden coincidir los nombres si están en distintos esquemas)
*No puede coincidir con el nombre de una palabra reservada SQL (por ejemplo no se puede llamar SELECT a una tabla)
TIPOS DE DATOS
A la hora de crear tablas, hay que indicar el tipo de datos de cada campo. Necesitamos pues conocer los distintos tipos de datos. Estos son:
DESCRIPCIÓN TIPOS DE ESTANDAR SQL ORACLE SQL
Texto de anchura CHARACTER(n) CHAR(N)
fija CHAR(n)
Texto de anchura CHARACTER VARYING (N) VARCHAR 2(N)
variable VARCHAR (N)
Texto de anchura
fija para caracteres NATIONAL CHARACTER(n) NCHAR(N)
nacionales
DOMINIOS
En Oracle se echa de menos una instrucción que forma parte del estándar SQL y que permite crear dominios. Sin embargo en SQL estándar sí hay esa posibilidad y de hecho es muy interesante. Se trata de
CREATE DOMAIN: CREATE DOMAIN name [AS] data_type [ DEFAULT expression ] [ restricciones [ ... ] ]
CONSULTAR LAS TABLAS DEL USUARIO
Todas las bases de datos disponen de posibilidades para consultar el diccionario de datos. Siguiendo las reglas de Codd, la forma de consultar los metadatos es la misma que en el resto de tablas. Es decir existen tablas (en realidad vistas) que en lugar de contener datos, contienen los metadatos. En el caso de SQL estándar, el diccionario de datos es accesible mediante el esquema de información (INFORMATION_SCHEMA), un esquema especial que contiene el conjunto de vistas con el que se pueden consultar los metadatos de la base de datos. En concreto la vista INFORMATION_SCHEMA.TABLES obtiene una vista de las tablas creadas. Es decir:
SELECT * FROM INFORMATION_SCHEMA.TABLES
BORRAR TABLAS
La orden DROP TABLE seguida del nombre de una tabla, permite eliminar la tabla en cuestión.
Al borrar una tabla:
*Desaparecen todos los datos
*Cualquier vista y sinónimo referente a la tabla seguirá existiendo, pero ya no funcionará (conviene eliminarlos)
*Las transacciones pendientes son aceptadas (COMMIT), en aquellas bases de datos que tengan la posibilidad de utilizar transacciones.
*Lógicamente, sólo se pueden eliminar las tablas sobre las que tenemos permiso de borrado.
MODIFICAR TABLAS
De forma estándar (SQL estándar) se hace:
ALTER TABLE nombreViejo RENAME TO nombreNuevo;
En Oracle se realiza mediante la orden RENAME (que permite el cambio de nombre de cualquier objeto). Sintaxis: RENAME nombreViejo TO nombreNuevo;
Borrar contenido de tablas
Oracle dispone de una orden no estándar para eliminar definitivamente los datos de una tabla; es la orden TRUNCATE TABLE seguida del nombre de la tabla a borrar. Hace que se elimine el contenido de la tabla, pero no la estructura de la tabla en sí. Incluso borra del archivo de datos el espacio ocupado por la tabla.
RESTRICCIONES
Una restricción es una condición de obligado cumplimiento para una o más columnas de la tabla. A cada restricción se le pone un nombre, en el caso de no poner un nombre (algo poco recomendable) entonces el propio Oracle le coloca el nombre que es un mnemotécnico con el nombre de tabla, columna y tipo de restricción.
Su sintaxis general es:
{CREATE TABLE nombreTabla | ALTER TABLE nombreTabla {ADD | MODIFY}} (campo tipoDeDatos [propiedades] [[CONSTRAINT nombreRestricción ]] tipoRestricción (columnas) [,siguienteCampo…] [,CONSTRAINT nombreRestricción tipoRestricción (columnas) ...)
Las restricciones tienen un nombre, se puede hacer que sea la base de datos la que les ponga nombre, pero entonces sería críptico. Por eso es mejor ponerle un nombre nosotros para que sea más fácil de recordar.
COMMIT
Consolidar, confirmar o hacer un commit se refiere, en el contexto de la ciencia de la computación y la gestión de datos, a la idea de confirmar un conjunto de cambios provisionales de forma permanente. Un uso popular es al final de una transacción de base de datos.
Una sentencia
COMMIT
en SQL finaliza una transacción de base de datos dentro de un sistema gestor de base de datos relacional (RDBMS) y hace visibles todos los cambios a otros usuarios. El formato general es emitir una sentencia BEGIN WORK
o BEGIN TRANSACTION
(o la que sea para el lenguaje SQL en cuestión), una o más sentencias SQL, y entonces la sentencia COMMIT
.
ROLLBACK
En SQL, ROLLBACK es un comando que causa que todos los cambios de datos desde la última sentencia BEGIN WORK, o STAR TRANSACTION sean descartados por el sistema de gestión de base de datos relacional (RDBMS), para que el estado de los datos sea revertida a la forma en que estaba antes de que aquellos cambios tuvieran lugar.
Una sentencia ROLLBACK también publicará cualquier punto de recuperación existente que pudiera estar en uso.
ESTADO DE LOS DATOS DURANTE LA TRANSACCIÓN
Si se inicia una transacción usando comandos DML hay que tener en cuenta que:
*Se puede volver a la instrucción anterior a la transacción cuando se desee
*Las instrucciones de consulta SELECT realizadas por el usuario que inició la transacción muestran los datos ya modificados por las instrucciones DML
*El resto de usuarios ven los datos tal cual estaban antes de la transacción, de hecho los registros afectados por la transacción aparecen bloqueados hasta que la transacción finalice. Esos usuarios no podrán modificar los valores de dichos registros.
*Tras la transacción todos los usuarios ven los datos tal cual quedan tras el fin de transacción. Los bloqueos son liberados y los puntos de ruptura borrados.
INSTRUCCIONES DDL
Los índices son objetos que forman parte del esquema que hacen que las bases de datos aceleren las operaciones de consulta y ordenación sobre los campos a los que el índice hace referencia.
Se almacenan aparte de la tabla a la que hace referencia, lo que permite crearles y borrarles en cualquier momento.
Lo que realizan es una lista ordenada por la que Oracle puede acceder para facilitar la búsqueda de los datos. cada vez que se añade un nuevo registro, los índices involucrados se actualizan a fin de que su información esté al día. De ahí que cuantos más índices haya, más le cuesta a Oracle añadir registros, pero más rápidas se realizan las instrucciones de consulta.
SECUENCIAS
Una secuencia sirve para generar automáticamente números distintos. Se utilizan para generar valores para campos que se utilizan como clave forzada (claves cuyo valor no interesa, sólo sirven para identificar los registros de una tabla). Es decir se utilizan en los identificadores de las tablas (campos que comienzan con la palabra id), siempre y cuando no importe qué número se asigna a cada fila.
Es una rutina interna de la base de datos la que realiza la función de generar un número distinto cada vez. Las secuencias se almacenan independientemente de la tabla, por lo que la misma secuencia se puede utilizar para diversas tablas.
SINÓNIMOS
En Oracle, un sinónimo es un nombre que se asigna a un objeto cualquiera. Normalmente es un nombre menos descriptivo que el original a fin de facilitar la escritura del nombre del objeto en diversas expresiones.
creación
Sintaxis: CREATE [PUBLIC] SYNONYM nombre FOR objeto;
objeto es el objeto al que se referirá el sinónimo. La cláusula PUBLIC hace que el sinónimo esté disponible para cualquier usuario (sólo se permite utilizar si disponemos de privilegios administrativos).
borrado
DROP SYNONYM nombre
CONSULTAS
Consultas de datos con SQL, DQL
DQL es la abreviatura del Data Query Language (lenguaje de consulta de datos) de SQL. El único comando que pertenece a este lenguaje es el versátil comando SELECT
Este comando permite:
*Obtener datos de ciertas columnas de una tabla (proyección)
*Obtener registros (filas) de una tabla de acuerdo con ciertos criterios (selección)
*Mezclar datos de tablas diferentes (asociación, join)
*Realizar cálculos sobre los datos
*Agrupar datos
SINTAXIS SENCILLA DEL COMANDO SELECT
SELECT * | {[DISTINCT] columna | expresión [[AS] alias], ...} FROM tabla;
Donde:
*El asterisco significa que se seleccionan todas las columnas
*DISTINCT. Hace que no se muestren los valores duplicados.
*COLUMNA. Es el nombre de una columna de la tabla que se desea mostrar
*EXPRESION. Una expresión válida SQL
*ALIAS. Es un nombre que se le da a la cabecera de la columna en el resultado de esta instrucción.
CÁLCULOS
Aritméticos
Los operadores + (suma), - (resta), * (multiplicación) y / (división), se pueden utilizar para hacer cálculos en las consultas. Cuando se utilizan como expresión en una consulta SELECT, no modifican los datos originales sino que como resultado de la vista generada por SELECT, aparece un nueva columna. Ejemplo:
SELECT nombre, precio,precio*1.16 FROM articulos;
Esa consulta obtiene tres columnas. La tercera tendrá como nombre la expresión utilizada, para poner un alias basta utilizar dicho alias tras la expresión:
SELECT nombre, precio, precio*1.16 AS precio_con_iva FROM articulos;
CONCATENACIÓN DE TEXTOS
Todas las bases de datos incluyen algún operador para encadenar textos. En SQLSERVER es el signo + en Oracle son los signos ||. Ejemplo (Oracle):
SELECT tipo, modelo, tipo || '-' || modelo "Clave Pieza" FROM piezas;
CONDICIONES
Se pueden realizar consultas que restrinjan los datos de salida de las tablas. Para ello se utiliza la cláusula WHERE. Esta cláusula permite colocar una condición que han de cumplir todos los registros, los que no la cumplan no aparecen en el resultado.
Ejemplo: SELECT Tipo, Modelo FROM Pieza WHERE Precio>3;
OPERADORES DE COMPARACIÓN
OPERADOR SIGNIFICADO
> mayor que
< menor que
>= mayor o igual que
<= menor o igual que
= igual
<> distinto
!= distinto
VALORES LÓGICOS
OPERADOR SIGNIFICADO
AND Devuelve verdadero si las expresiones a su izquierda
y derecha son ambas verdades
OR Devuelve verdadero si cualquiera
de las dos expresiones a izquierda
y derecha del OR, son verdaderas
NOT Invierte la lógica de la expresión
que esta a su derecha.
BETWEEN
El operador BETWEEN nos permite obtener datos que se encuentren en un rango. Uso:
SELECT tipo,modelo,precio FROM piezas WHERE precio BETWEEN 3 AND 8;
Saca piezas cuyos precios estén entre 3 y 8 (ambos incluidos).
IN
Permite obtener registros cuyos valores estén en una lista de valores:
SELECT tipo,modelo,precio FROM piezas WHERE precio IN (3,5, 8);
Obtiene piezas cuyos precios sean 3, 5 u 8 (no valen ni el precio 4 ni el 6, por ejemplo).
LIKE
Se usa sobre todo con textos, permite obtener registros cuyo valor en un campo cumpla una condición textual. LIKE utiliza una cadena que puede contener estos símbolos:
SÍMBOLO SIGNIFICADO
% Una serie cualquiera de carecteres
_ Un carácter cualquiera
IS NULL
Devuelve verdadero si el valor que examina es nulo:
SELECT nombre,apellidos FROM personas WHERE telefono IS NULL
Esa instrucción selecciona a la gente que no tiene teléfono. Se puede usar la expresión IS NOT NULL que devuelve verdadero en el caso contrario, cuando la expresión no es nula.
PRECEDENCIA DE OPERADORAS
A veces las expresiones que se producen en los SELECT son muy extensas y es difícil saber que parte de la expresión se evalúa primero, por ello se indica la siguiente tabla de precedencia (tomada de Oracle):
ORDEN DE LA PRECEDENCIA OPERADOR
1 *(Multiplicar) / (dividir)
2 + (Suma) - (Resta)
3 || (Concatenación)
4 Comparaciones (>, <, !=, ...)
5 IS [NOT] NULL, [NOT ]LIKE, IN
6 NOT
7 AND
8 OR
DISEÑO DE BASE DE DATOS
El orden inicial de los registros obtenidos por un SELECT no guarda más que
una relación
respecto al orden en el que fueron introducidos.
ORDER BY
En esa cláusula se coloca una lista de campos que indica la forma de ordenar. Se
ordena primero por el primer campo de la lista, si hay coincidencias por el segundo, si
ahí también las hay por el tercero, y así sucesivamente.
Se puede colocar las palabras ASC O DESC (por defecto se toma ASC). Esas palabras
significan en ascendente (de la A a la Z, de los números pequeños a los grandes) o en
descendente (de la Z a la a, de los números grandes a los pequeños) respectivamente.
FUNCIONES
Todos los SGBD implementan funciones para facilitar la creación de consultas
complejas. Esas funciones dependen del SGBD que utilicemos.
Todas las funciones devuelven un resultado que procede de un determinado cálculo.
La mayoría de funciones precisan que se les envíe datos de entrada (parámetros o
argumentos) que son necesarios para realizar el cálculo de la función. Este resultado,
lógicamente depende de los parámetros enviados. Dichos parámetros se pasan entre
paréntesis. De tal manera que la forma de invocar a una función es:
nombreFunción[(parámetro1[, parámetro2,...])]
FUNCIONES NUMÉRICAS
ROUND(n,decimales): Redondea el número al siguiente número con el
número de decimales indicado más cercano.
ROUND(8.239,2) devuelve 8.24
TRUNC(n,decimales): Los decimales del número se cortan para que
sólo aparezca el número de decimales indicado
MATEMATICOS:
MOD(n1,n2) Devuelve el resto resultado de dividir n1 entre
POWER(valor,exponente) Eleva el valor al exponente indicado
SQRT(n) Calcula la raíz cuadrada de n
SIGN(n) Devuelve 1 si n es positivo, cero si vale cero y -1
si es negativo
ABS(n) Calcula el valor absoluto de n
EXP(n) Calcula e
n
, es decir el exponente en base e del
número n
LN(n) Logaritmo neperiano de n
LOG(n) Logaritmo en base 10 de n
SIN(n) Calcula el seno de n (n tiene que estar en
radianes)
COS(n) Calcula el coseno de n (n tiene que estar en
radianes)
TAN(n) Calcula la tangente de n (n tiene que estar en
radianes)
ACOS(n) Devuelve en radianes el arco coseno de n
ASIN(n) Devuelve en radianes el arco seno de n
ATAN(n) Devuelve en radianes el arco tangente de n
SINH(n) Devuelve el seno hiperbólico de n
COSH(n) Devuelve el coseno hiperbólico de n
TANH(n) Devuelve la tangente hiperbólica de n
FUNCIONES DE TRABAJO CON NULOS
NVL(valor,sustituto): Si el valor es NULL, devuelve el valor sustituto;
de otro modo, devuelve valor
NVL2(valor,sustituto1,
sustituto2): Variante de la anterior, devuelve el valor
sustituto1 si valor no es nulo. Si valor es nulo
devuelve el sustituto2
COALESCE(listaExpresiones): Devuelve la primera de las expresiones que no es
nula.
NULLIF(valor1,valor2): Devuelve nulo si valor1 es igual a valor2. De
otro modo devuelve valor1
FUNCIONES DE FECHA Y MANEJO DE FECHA E INTERVALOS
Las fechas se utilizan muchísimo en todas las bases de datos. Oracle proporciona dos
tipos de datos para manejar fechas, los tipos DATE y TIMESTAMP.
INTERVALOS
Los intervalos son datos relacionados con las fechas en sí, pero que no son fechas. Hay
dos tipos de intervalos el INTERVAL DAY TO SECOND que sirve para representar días,
horas, minutos y segundos; y el INTERVAL YEAR TO MONTH que representa años y
meses.
SUBCONSULTAS EN LA INSTRUCCION UPDATE
La instrucción UPDATE permite modificar filas. Es muy habitual el uso de la cláusula
WHERE para indicar las filas que se modificarán. Esta cláusula se puede utilizar con las
mismas posibilidades que en el caso del SELECT, por lo que es posible utilizar
subconsultas. Por ejemplo:
UPDATE empleados
SET sueldo=sueldo*1.10
WHERE id_seccion =(SELECT id_seccion FROM secciones
WHERE nom_seccion='Producción');
Esta instrucción coloca a todos los empleados de la sección 23 el mismo puesto de
trabajo que el empleado número 12. Este tipo de actualizaciones sólo son válidas si el
subselect devuelve un único valor, que además debe de ser compatible con la columna
que se actualiza.
SUBCONSULTAS EN LA INSTRUCCION DELETE
Al igual que en el caso de las instrucciones INSERT o SELECT, DELETE dispone de
cláusula WHERE y en dicha cláusulas podemos utilizar subconsultas. Por ejemplo:
DELETE empleados
WHERE id_empleado IN
(SELECT id_empleado FROM errores_graves);
VISTA
Una vista no es más que una consulta almacenada a fin de utilizarla tantas veces como
se desee. Una vista no contiene datos sino la instrucción SELECT necesaria para crear la
vista, eso asegura que los datos sean coherentes al utilizar los datos almacenados en las
tablas. Por todo ello, las vistas gastan muy poco espacio de disco.
Las vistas se emplean para:
*Realizar consultas complejas más fácilmente, ya que permiten dividir la
* Consulta en varias partes
* Proporcionar tablas con datos completos
* Utiliz1ar visiones especiales de los datos
* Ser utilizadas como tablas que resumen todos los datos
*Ser utilizadas como cursores de datos en los lenguajes procedimentales (como
PL/SQL)
CREACION DE VISTA
*OR REPLACE. Si la vista ya existía, la cambia por la actual }
*FORCE. Crea la vista aunque los datos de la consulta SELECT no existan
*vista. Nombre que se le da a la vista
*alias. Lista de alias que se establecen para las columnas devueltas por la consulta SELECT en la que se basa esta vista. El número de alias debe coincidir con el número de columnas devueltas por SELECT.
*WITH CHECK OPTION. Hace que sólo las filas que se muestran en la vista puedan ser añadidas (INSERT) o modificadas (UPDATE). La restricción que sigue a esta sección es el nombre que se le da a esta restricción de tipo CHECK OPTION.
*WITH READ ONLY. Hace que la vista sea de sólo lectura. Permite grabar un nombre para esta restricción creada la vista, se le pueden hacer consultas como si se tratara de una tabla normal. Incluso se puede utilizar el comando DESCRIBE sobre la vista para mostrar la estructura de los campos que forman la vista o utilizarse como subconsulta en los comando UPDATE o DELET
*vista. Nombre que se le da a la vista
*alias. Lista de alias que se establecen para las columnas devueltas por la consulta SELECT en la que se basa esta vista. El número de alias debe coincidir con el número de columnas devueltas por SELECT.
*WITH CHECK OPTION. Hace que sólo las filas que se muestran en la vista puedan ser añadidas (INSERT) o modificadas (UPDATE). La restricción que sigue a esta sección es el nombre que se le da a esta restricción de tipo CHECK OPTION.
*WITH READ ONLY. Hace que la vista sea de sólo lectura. Permite grabar un nombre para esta restricción creada la vista, se le pueden hacer consultas como si se tratara de una tabla normal. Incluso se puede utilizar el comando DESCRIBE sobre la vista para mostrar la estructura de los campos que forman la vista o utilizarse como subconsulta en los comando UPDATE o DELET
MOSTRAR LA LISTA DE VISTA
La vista del diccionario de datos de Oracle USER_VIEWS permite mostrar una lista de
todas las vistas que posee el usuario actual. Es decir, para saber qué vistas hay
disponibles se usa:
SELECT * FROM USER_VIEWS
Se utiliza el comando DROP VIEW:
DROP VIEW nombreDeVista;