1.- Introduccion a las Bases de Datos


1.- Concepto de Bases de Datos


Una base de datos se puede definir como un conjunto de información que pertenece al mismo contexto, que se encuentra agrupada ó almacenada para su uso posterior.

En este sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta.

En la actualidad, y gracias al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos tienen formato electrónico, que ofrece un amplio rango de soluciones al problema de almacenar datos.

Las aplicaciones más usuales de bases de datos, son para la gestión de empresas e instituciones públicas. También son ampliamente utilizadas en entornos científicos con el objeto de almacenar la información experimental.

Algunos conceptos de bases de datos:
Base de Datos: es la colección de datos usados por el sistema de aplicaciones de una determinada empresa.

Base de Datos: es un conjunto de información relacionada que se encuentra agrupada o estructurada. Un archivo por sí mismo no constituye una base de datos, sino más bien la forma en que está organizada la información es la que da origen a la base de datos.

Base de Datos: colección de datos organizada para dar servicio a muchas aplicaciones al mismo tiempo al combinar los datos de manera que parezcan estar en una sola ubicación
Tipos de bases de datos
Las bases de datos pueden clasificarse de varias maneras, de acuerdo al criterio elegido para su clasificación:
Según la variabilidad de los datos almacenados
  • Bases de datos estáticas. Éstas son bases de datos de sólo lectura, utilizadas primordialmente para almacenar datos históricos que posteriormente se pueden utilizar para estudiar el comportamiento de un conjunto de datos a través del tiempo, realizar proyecciones y tomar decisiones.
  • Bases de datos dinámicas. Éstas son bases de datos donde la información almacenada se modifica con el tiempo, permitiendo operaciones como actualización y adición de datos, además de las operaciones fundamentales de consulta. Un ejemplo de esto puede ser la base de datos utilizada en un sistema de información de una tienda de abarrotes, una farmacia, un videoclub, etc.
Según el contenido
  • Bases de datos bibliográficas. Solo contienen un surrogante (representante) de la fuente primaria, que permite localizarla. Un registro típico de una base de datos bibliográfica contiene información sobre el autor, fecha de publicación, editorial, título, edición, de una determinada publicación, etc. Puede contener un resumen o extracto de la publicación original, pero nunca el texto completo, porque sino estaríamos en presencia de una base de datos a texto completo (o de fuentes primarias) [ver más abajo]. Como su nombre lo indica, el contenido son cifras o números. Por ejemplo, una colección de resultados de análisis de laboratorio, entre otras.
  • Bases de datos de texto completo. Almacenan las fuentes primarias, como por ejemplo, todo el contenido de todas las ediciones de una colección de revistas científicas.
  • Directorios. Un ejemplo son las guías telefónicas en formato electrónico.
  • Banco de imágenes, audio, video, multimedia, etc.
  • Bases de datos o "bibliotecas" de información Biológica. Son bases de datos que almacenan diferentes tipos de información proveniente de las ciencias de la vida o médicas.
Modelos de bases de datos
Además de la clasificación por la función de las bases de datos, éstas también se pueden clasificar de acuerdo a su modelo de administración de datos.

Un modelo de datos es básicamente una "descripción" de algo conocido como contenedor de datos (algo en donde se guarda la información), así como de los métodos para almacenar y recuperar información de esos contenedores. Los modelos de datos no son cosas físicas: son abstracciones que permiten la implementación de un sistema eficiente de base de datos; por lo general se refieren a algoritmos, y conceptos matemáticos. Algunos modelos con frecuencia utilizados en las bases de datos son:
  • Bases de datos jerárquicas. Éstas son bases de datos que, como su nombre indica, almacenan su información en una estructura jerárquica. En este modelo los datos se organizan en una forma similar a un árbol (visto al revés), en donde un nodo padre de información puede tener varios hijos. El nodo que no tiene padres es llamado raíz, y a los nodos que no tienen hijos se los conoce como hojas.
    •      Las bases de datos jerárquicas son especialmente útiles en el caso de aplicaciones que manejan un gran volumen de información y datos muy compartidos permitiendo crear estructuras estables y de gran rendimiento.
    •      Una de las principales limitaciones de este modelo es su incapacidad de representar eficientemente la redundancia de datos.

  • Base de datos de red. Éste es un modelo ligeramente distinto del jerárquico; su diferencia fundamental es la modificación del concepto de nodo: se permite que un mismo nodo tenga varios padres (posibilidad no permitida en el modelo jerárquico).
    •      Fue una gran mejora con respecto al modelo jerárquico, ya que ofrecía una solución eficiente al problema de redundancia de datos; pero, aun así, la dificultad que significa administrar la información en una base de datos de red ha significado que sea un modelo utilizado en su mayoría por programadores más que por usuarios finales.

  • Base de datos relacional. Éste es el modelo más utilizado en la actualidad para modelar problemas reales y administrar datos dinámicamente. Este tipo de base se detalla en la unidad 2.

  • Bases de datos orientadas a objetos. Este modelo, bastante reciente, y propio de los modelos informáticos orientados a objetos, trata de almacenar en la base de datos los objetos completos (estado y comportamiento).

  • Bases de datos documentales. Permiten la indexación a texto completo, y en líneas generales realizar búsquedas más potentes. Tesaurus es un sistema de índices optimizado para este tipo de bases de datos.

  • Base de datos deductivas. Un sistema de base de datos deductivas, es un sistema de base de datos pero con la diferencia que permite hacer deducciones a través de inferencias. Se basa principalmente en reglas y hechos que son almacenados en la base de datos. También las bases de datos deductivas son llamadas base de datos lógicas, a raíz de que se basan en lógica matemática.

  • Bases de datos distribuidas. La base de datos está almacenada en varias computadoras conectadas en red. Surgen debido a la existencia física de organismos descentralizados. Esto les da la capacidad de unir las bases de datos de cada localidad y acceder así, por ejemplo a distintas universidades, sucursales de tiendas, etcétera.
Definición de Base de datos
Almacén de datos relacionados con diferentes modos de organización. Una base de datos representa algunos aspectos del mundo real, aquellos que le interesan al diseñador. Se diseña y almacena datos con un propósito específico.

De forma sencilla podemos indicar que una base de datos no es más que un conjunto de información relacionada que se encuentra agrupada o estructurada.

El archivo por sí mismo, no constituye una base de datos, sino más bien la forma en que está organizada la información es la que da origen a la base de datos. Las bases de datos manuales, pueden ser difíciles de gestionar y modificar. Por ejemplo, en una guía de teléfonos no es posible encontrar el número de una persona si no sabemos su apellido, aunque conozcamos su domicilio.

Del mismo modo, en un archivo de pacientes en el que la información esté ordenada por el nombre de los mismos, será una tarea bastante engorrosa encontrar todos los pacientes que viven en una zona determinada. Los problemas expuestos anteriormente se pueden resolver creando una base de datos informatizada.

Desde el punto de vista informático, una base de datos es un sistema formado por un conjunto de datos almacenados en discos que permiten el acceso directo a ellos y un conjunto de programas que manipulan ese conjunto de datos.

Desde el punto de vista más formal, podríamos definir una base de datos como un conjunto de datos estructurados, fiables y homogéneos, organizados independientemente en máquina, accesibles a tiempo real, compartibles por usuarios concurrentes que tienen necesidades de información diferente y no predecible en el tiempo.

La idea general es que estamos tratando con una colección de datos que cumplen las siguientes propiedades:

  • Están estructurados independientemente de las aplicaciones y del soporte de almacenamiento que los contiene.
  • Presentan la menor redundancia posible.
  • Son compartidos por varios usuarios y/o aplicaciones.

2.- Sistema de gestión de base de datos



Los Sistemas de gestión de base de datos son un tipo de software muy específico, dedicado a servir de interfaz entre la base de datos, el usuario y las aplicaciones que la utilizan.

Se compone de un lenguaje de definición de datos, de un lenguaje de manipulación de datos y de un lenguaje de consulta.

En los textos que tratan este tema, o temas relacionados, se mencionan los términos SGBD y DBMS, siendo ambos equivalentes, y acrónimos, respectivamente, de Sistema Gestor de Bases de Datos y DataBase Management System, su expresión inglesa.

Propósito
El propósito general de los sistemas de gestión de base de datos es el de manejar de manera clara, sencilla y ordenada un conjunto de datos.

Objetivos
Existen distintos objetivos que deben cumplir los DBMS:
  • Abstracción de la información. Los DBMS ahorran a los usuarios detalles acerca del almacenamiento físico de los datos. Da lo mismo si una base de datos ocupa uno o cientos de archivos, este hecho se hace transparente al usuario. Así, se definen varios niveles de abstracción.
  • Independencia. La independencia de los datos consiste en la capacidad de modificar el esquema (físico o lógico) de una base de datos sin tener que realizar cambios en las aplicaciones que se sirven de ella.
  • Redundancia mínima. Un buen diseño de una base de datos logrará evitar la aparición de información repetida o redundante. Lo ideal es lograr una redundancia nula; no obstante, en algunos casos la complejidad de los cálculos hace necesaria la aparición de redundancias.
  • Consistencia. En aquellos casos en los que no se ha logrado esta redundancia nula, será necesario vigilar que aquella información que aparece repetida se actualice de forma coherente, es decir, que todos los datos repetidos se actualicen de forma simultánea.
  • Seguridad. La información almacenada en una base de datos puede llegar a tener un gran valor. Los DBMS deben garantizar que esta información se encuentra asegurada frente a usuarios malintencionados, que intenten leer información privilegiada; frente a ataques que deseen manipular o destruir la información; o simplemente ante las torpezas de algún usuario autorizado pero despistado. Normalmente, los DBMS disponen de un complejo sistema de permisos a usuarios y grupos de usuarios, que permiten otorgar diversas categorías de permisos.
  • Integridad. Se trata de adoptar las medidas necesarias para garantizar la validez de los datos almacenados. Es decir, se trata de proteger los datos ante fallos de hardware, datos introducidos por usuarios descuidados, o cualquier otra circunstancia capaz de corromper la información almacenada.
  • Respaldo y recuperación. Los DBMS deben proporcionar una forma eficiente de realizar copias de seguridad de la información almacenada en ellos, y de restaurar a partir de estas copias los datos.
  • Control de la concurrencia. En la mayoría de entornos (excepto quizás el doméstico), lo más habitual es que sean muchas las personas que acceden a una base de datos, bien para recuperar información, bien para almacenarla. Y es también frecuente que dichos accesos se realicen de forma simultánea. Así pues, un DBMS debe controlar este acceso concurrente a la información, que podría derivar en inconsistencias.
  • Tiempo de respuesta. Lógicamente, es deseable minimizar el tiempo que el DBMS tarda en darnos la información solicitada y en almacenar los cambios realizados.

Ventajas

1.    Facilidad de manejo de grandes volumen de información.
2.    Gran velocidad en muy poco tiempo.
3.    Independencia del tratamiento de información.
4.    Seguridad de la información (acceso a usuarios autorizados), protección de información, de modificaciones, inclusiones, consulta.
5.    No hay duplicidad de información, comprobación de información en el momento de introducir la misma.
6.    Integridad referencial el terminar los registros.

Base de datos OLTP
Las bases de datos relacionales de procesamiento de transacciones en línea (OLTP) son óptimas para administrar datos que cambian. Suelen tener varios usuarios que realizan transacciones al mismo tiempo que cambian los datos en tiempo real. Aunque las solicitudes de datos realizadas individualmente por los usuarios suelen hacer referencia a pocos registros, muchas de estas solicitudes se producen al mismo tiempo.

Las bases de datos OLTP están diseñadas para permitir que las aplicaciones transaccionales escriban sólo los datos necesarios para controlar una sola transacción lo antes posible. Las bases de datos OLTP se caracterizan en general por lo siguiente:

  • Admiten el acceso simultáneo de muchos usuarios que agregan y modifican datos con regularidad.
  • Representan el estado en cambio constante de una organización, pero no guardan su historial.
  • Contienen muchos datos, incluidos todos los datos utilizados para comprobar transacciones.
  • Tienen estructuras complejas.
  • Se ajustan para dar respuesta a la actividad transaccional.
  • Proporcionan la infraestructura tecnológica necesaria para admitir las operaciones diarias de la empresa.
  • Las transacciones individuales se completan rápidamente y se tiene acceso a cantidades de datos relativamente pequeñas. Los sistemas OLTP están diseñados y ajustados para procesar cientos o miles de transacciones que se indican al mismo tiempo.

Los datos en los sistemas OLTP están organizados básicamente para admitir transacciones, como por ejemplo:

  • Registrar un pedido de una terminal punto de venta o especificado a través de un sitio Web.
  • Realizar un pedido de más provisiones cuando las cantidades de inventario descienden hasta determinado nivel.
  • Hacer un seguimiento de componentes desde su ensamblaje hasta un producto final en un proceso de fabricación.
  • Registrar datos de empleados.

3.- Objetos de la base de datos


Tablas
En una base de datos la información se organiza en tablas, que son filas y columnas similares a las de los libros contables o a las de las hojas de cálculo.

Una base de datos simple puede que sólo contenga una tabla, pero generalmente las bases de datos necesitan varias tablas. Por ejemplo, podría existir una base de datos con las siguientes tablas: una tabla con información sobre productos, otra con información sobre pedidos y una tercera con información sobre clientes.



Cada fila de la tabla recibe también el nombre de registro (o tupla) y cada columna se denomina también campo.

  • Un registro es una forma lógica y coherente de combinar información sobre algún tema.
  • Un campo es un elemento único de información: un tipo de elemento que aparece en cada registro.

En la tabla Productos, por ejemplo, cada fila o registro contendría información sobre un producto, y cada columna contendría algún dato sobre ese producto, como su nombre o el precio.

Además de la función estándar de las tablas básicas definidas por el usuario, SQL Server 2005 proporciona los siguientes tipos de tabla que permiten llevar a cabo objetivos especiales en una base de datos:
  • Tablas con particiones
  • Tablas temporales
  • Tablas del sistema

Tablas con particiones
Las tablas con particiones son tablas cuyos datos se han dividido horizontalmente entre unidades que pueden repartirse por más de un grupo de archivos de una base de datos. Las particiones facilitan la administración de las tablas y los índices grandes porque permiten obtener acceso y administrar subconjuntos de datos con rapidez y eficacia al mismo tiempo que mantienen la integridad del conjunto. En un escenario con particiones, las operaciones como, por ejemplo, la carga de datos de un sistema OLTP a un sistema OLAP, pueden realizarse en cuestión de segundos en lugar de minutos u horas en otras versiones. Las operaciones de mantenimiento que se realizan en los subconjuntos de datos también se realizan de forma más eficaz porque sólo afectan a los datos necesarios en lugar de a toda la tabla.

Tiene sentido crear una tabla con particiones si la tabla es muy grande o se espera que crezca mucho, y si alguna de las dos condiciones siguientes es verdadera:

  • La tabla contiene, o se espera que contenga, muchos datos que se utilizan de manera diferente.
  • Las consultas o las actualizaciones de la tabla no se realizan como se esperaba o los costos de mantenimiento son superiores a los períodos de mantenimiento predefinidos.

Las tablas con particiones admiten todas las propiedades y características asociadas con el diseño y consulta de tablas estándar, incluidas las restricciones, los valores predeterminados, los valores de identidad y marca de hora, los desencadenadores y los índices. Por lo tanto, si desea implementar una vista con particiones que sea local respecto a un servidor, debe implementar una tabla con particiones.

Tablas temporales
Hay dos tipos de tablas temporales: locales y globales. Las tablas temporales locales son visibles sólo para sus creadores durante la misma conexión a una instancia de SQL Server como cuando se crearon o cuando se hizo referencia a ellas por primera vez. Las tablas temporales locales se eliminan cuando el usuario se desconecta de la instancia de SQL Server. Las tablas temporales globales están visibles para cualquier usuario y conexión una vez creadas, y se eliminan cuando todos los usuarios que hacen referencia a la tabla se desconectan de la instancia de SQL Server.

Tablas del sistema
SQL Server almacena los datos que definen la configuración del servidor y de todas sus tablas en un conjunto de tablas especial, conocido como tablas del sistema. Los usuarios no pueden consultar ni actualizar directamente las tablas del sistema si no es a través de una conexión de administrador dedicada (DAC) que sólo debería utilizarse bajo la supervisión de los servicios de atención al cliente de Microsoft. Las tablas de sistema se cambian normalmente en cada versión nueva de SQL Server. Puede que las aplicaciones que hacen referencia directamente a las tablas del sistema tengan que escribirse de nuevo para poder actualizarlas a una versión nueva de SQL Server con una versión diferente de las tablas de sistema. La información de las tablas del sistema está disponible a través de las vistas de catálogo.

Vistas
Una vista es una tabla virtual cuyo contenido está definido por una consulta. Al igual que una tabla real, una vista consta de un conjunto de columnas y filas de datos con un nombre. Sin embargo, a menos que esté indizada, una vista no existe como conjunto de valores de datos almacenados en una base de datos. Las filas y las columnas de datos proceden de tablas a las que se hace referencia en la consulta que define la vista y se producen de forma dinámica cuando se hace referencia a la vista.

Una vista actúa como filtro de las tablas subyacentes a las que se hace referencia en ella. La consulta que define la vista puede provenir de una o de varias tablas, o bien de otras vistas de la base de datos actual u otras bases de datos. Asimismo, es posible utilizar las consultas distribuidas para definir vistas que utilicen datos de orígenes heterogéneos. Esto puede resultar de utilidad, por ejemplo, si se desea combinar datos de estructura similar que proceden de distintos servidores, cada uno de los cuales almacena los datos para una región distinta de la organización.

No existe ninguna restricción a la hora de consultar vistas y muy pocas restricciones a la hora de modificar los datos de éstas.
En esta ilustración se muestra una vista basada en dos tablas:



Tipos de vistas
En SQL Server 2005, se pueden crear vistas estándar, vistas indizadas y vistas con particiones.

- Vistas estándar
La combinación de datos de una o más tablas mediante una vista estándar permite satisfacer la mayor parte de las ventajas de utilizar vistas. Éstas incluyen centrarse en datos específicos y simplificar la manipulación de datos.

- Vistas indizadas
Una vista indizada es una vista que se ha materializado. Esto significa que se ha calculado y almacenado. Se puede indizar una vista creando un índice agrupado único en ella. Las vistas indizadas mejoran de forma considerable el rendimiento de algunos tipos de consultas. Las vistas indizadas funcionan mejor para consultas que agregan muchas filas. No son adecuadas para conjuntos de datos subyacentes que se actualizan frecuentemente

- Vistas con particiones
Una vista con particiones reúne datos horizontales con particiones de un conjunto de tablas miembro en uno o más servidores. Esto hace que los datos aparezcan como si fueran de una tabla. Una vista que reúne tablas miembro en la misma instancia de SQL Server es una vista con particiones local.

Escenarios de utilización de vistas
Las vistas suelen utilizarse para centrar, simplificar y personalizar la percepción de la base de datos para cada usuario. Las vistas pueden emplearse como mecanismos de seguridad, que permiten a los usuarios obtener acceso a los datos por medio de la vista, pero no les conceden el permiso de obtener acceso directo a las tablas base subyacentes a la vista. Las vistas pueden utilizarse para proporcionar una interfaz compatible con versiones anteriores con el fin de emular una tabla que existía pero cuyo esquema ha cambiado.

- Para centrarse en datos específicos
Las vistas permiten a los usuarios centrarse en datos de su interés y en tareas específicas de las que son responsables. Los datos innecesarios o sensibles pueden quedar fuera de la vista.

- Para simplificar la manipulación de datos
Las vistas permiten simplificar la forma en que los usuarios trabajan con los datos. Las combinaciones, proyecciones, consultas UNION y consultas SELECT que se utilizan con frecuencia pueden definirse como vistas para que los usuarios no tengan que especificar todas las condiciones y calificaciones cada vez que realicen una operación adicional en los datos.
Por ejemplo, es posible crear como vista una consulta compleja que se utilice para la elaboración de informes y que realice subconsultas, combinaciones externas y agregaciones para recuperar datos de un grupo de tablas. La vista simplifica el acceso a los datos ya que evita la necesidad de escribir o enviar la consulta subyacente cada vez que se genera el informe; en lugar de eso, se realiza una consulta en la vista. También puede crear funciones en línea definidas por el usuario que funcionen de manera lógica como vistas con parámetros o como vistas con parámetros de condiciones de búsqueda de cláusulas WHERE u otras partes de la consulta.

- Para proporcionar compatibilidad con versiones anteriores
Las vistas permiten crear una interfaz compatible con versiones anteriores para una tabla cuando su esquema cambia. Por ejemplo, una aplicación puede haber hecho referencia a una tabla no normalizada que tiene el siguiente esquema:

Empleados(Nombre, FechaNacimiento, Sueldo, Departamento, Edificio)

Para evitar el almacenamiento redundante de datos en la base de datos, puede normalizar la tabla dividiéndola en las dos siguientes tablas:

Empleados2(Nombre, FechaNacimiento, Sueldo, Id_Dep)
Departamento(Id_Dep, Edificio)

Para proporcionar una interfaz compatible con versiones anteriores que siga haciendo referencia a los datos de Empleados, puede eliminar la tabla Empleados antigua y reemplazarla por la siguiente vista:

CREATE VIEW Employee AS
SELECT Name, BirthDate, Salary, BuildingName
FROM Employee2 e, Department d
WHERE e.DeptId = d.DeptId

Las aplicaciones que realizaban consultas en la tabla Empleados, ahora pueden obtener sus datos desde la vista Empleados. No es necesario cambiar la aplicación si sólo lee desde Empleados. A veces, las aplicaciones que actualizan Empleados también pueden admitirse agregando desencadenadores INSTEAD OF a la nueva vista para asignar operaciones INSERT, DELETE y UPDATE en la vista a las tablas subyacentes.

- Para personalizar datos
Las vistas permiten que varios usuarios puedan ver los datos de modo distinto, aunque estén utilizando los mismos simultáneamente. Esto resulta de gran utilidad cuando usuarios que tienen distintos intereses y calificaciones trabajan con la misma base de datos. Por ejemplo, es posible crear una vista que recupere únicamente los datos para los clientes con los que trabaja el responsable comercial de una cuenta. La vista puede determinar qué datos deben recuperarse en función del identificador de inicio de sesión del responsable comercial que utilice la vista.

- Para exportar e importar datos
Es posible utilizar vistas para exportar datos a otras aplicaciones. Por ejemplo, es posible que quiera utilizar la información de varias tablas para analizar los datos mediante Microsoft Excel. Para ello, puede crear una vista a partir de las tablas. A continuación, puede utilizar la herramienta bcp para exportar los datos definidos por la vista.

- Para combinar datos de particiones entre servidores
El operador de conjuntos UNION de Transact-SQL puede utilizarse dentro de una vista para combinar los resultados de dos o más consultas de tablas distintas en un solo conjunto. Esta combinación se muestra al usuario como una tabla única denominada vista con particiones. Por ejemplo, si una tabla contiene datos de ventas de Washington y otra tabla contiene datos de ventas de California, podría crearse una vista a partir de la UNION de ambas tablas. La vista representada incluye los datos de ventas de ambas zonas.


Índices
Al igual que el índice de un libro, el índice de una base de datos permite encontrar rápidamente información específica en una tabla o vista indizada. Un índice contiene claves generadas a partir de una o varias columnas de la tabla o la vista y punteros que asignan la ubicación de almacenamiento de los datos especificados. Puede mejorar notablemente el rendimiento de las aplicaciones y consultas de bases de datos creando índices correctamente diseñados para que sean compatibles con las consultas. Los índices pueden reducir la cantidad de datos que se deben leer para devolver el conjunto de resultados de la consulta. Los índices también pueden exigir la unicidad en las filas de una tabla, lo que se garantiza la integridad de los datos de la tabla.

Tipo de Índices

Tipo de índice

Descripción

Agrupado

Un índice agrupado ordena y almacena las filas de datos de la tabla o vista por orden en función de la clave del índice agrupado. El índice agrupado se implementa como una estructura de árbol b que admite la recuperación rápida de las filas a partir de los valores de las claves del índice agrupado.

No agrupado

Los índices no agrupados se pueden definir en una tabla o vista con un índice agrupado o en un montón. Cada fila del índice no agrupado contiene un valor de clave no agrupada y un localizador de fila. Este localizador apunta a la fila de datos del índice agrupado o el montón que contiene el valor de clave. Las filas del índice se almacenan en el mismo orden que los valores de la clave del índice, pero no se garantiza que las filas de datos estén en un determinado orden a menos que se cree un índice agrupado en la tabla.

Único

Un índice único garantiza que la clave de índice no contenga valores duplicados y, por tanto, cada fila de la tabla o vista es en cierta forma única.

Tanto los índices agrupados como los no agrupados pueden ser únicos.

Índice con columnas incluidas

Índice no agrupado que se extiende para incluir columnas sin clave además de las columnas de clave.

Vistas indizadas

Un índice en una vista materializa (ejecuta) la vista, y el conjunto de resultados se almacena de forma permanente en un índice agrupado único, del mismo modo que se almacena una tabla con un índice agrupado. Los índices no agrupados de la vista se pueden agregar una vez creado el índice agrupado.

Texto

Tipo especial de índice funcional basado en símbolos (token) que crea y mantiene el servicio del Motor de texto completo de Microsoft para SQL Server (MSFTESQL). Proporciona la compatibilidad adecuada para búsquedas de texto complejas en datos de cadenas de caracteres.

XML

Representación dividida y permanente de los objetos XML binarios grandes (BLOB) de la columna de tipo de datos xml.


Procedimientos Almacenados
Cuando crea una aplicación con Microsoft SQL Server 2005, el lenguaje de programación Transact-SQL es la principal interfaz de programación entre las aplicaciones y la base de datos de Microsoft SQL Server. Cuando utiliza programas Transact-SQL, dispone de dos métodos para almacenar y ejecutar los programas.
  • Puede almacenar los programas localmente y crear aplicaciones que envían los comandos a SQL Server y procesan los resultados.
  • Puede almacenar los programas como procedimientos almacenados en SQL Server y crear aplicaciones que ejecutan los procedimientos almacenados y procesan los resultados.

Los procedimientos almacenados de Microsoft SQL Server son similares a los procedimientos de otros lenguajes de programación en el sentido en que pueden:
  • Aceptar parámetros de entrada y devolver varios valores en forma de parámetros de salida al lote o al procedimiento que realiza la llamada.
  • Contener instrucciones de programación que realicen operaciones en la base de datos, incluidas las llamadas a otros procedimientos.
  • Devolver un valor de estado a un lote o a un procedimiento que realiza una llamada para indicar si la operación se ha realizado correctamente o se han producido errores (y el motivo de éstos).
Puede utilizar la instrucción EXECUTE de Transact-SQL para ejecutar un procedimiento almacenado. Los procedimientos almacenados difieren de las funciones en que no devuelven valores en lugar de sus nombres ni pueden utilizarse directamente en una expresión.

Utilizar procedimientos almacenados en SQL Server en vez de programas Transact-SQL almacenados localmente en equipos cliente presenta las siguientes ventajas:

  • Se registran en el servidor.
  • Pueden incluir atributos de seguridad (como permisos) y cadenas de propiedad; además se les pueden asociar certificados. Los usuarios pueden disponer de permiso para ejecutar un procedimiento almacenado sin necesidad de contar con permisos directos en los objetos a los que se hace referencia en el procedimiento.
  • Mejoran la seguridad de la aplicación. Los procedimientos almacenados con parámetros pueden ayudar a proteger la aplicación ante ataques por inyección de código SQL.
  • Permiten una programación modular. Puede crear el procedimiento una vez y llamarlo desde el programa tantas veces como desee. Así, puede mejorar el mantenimiento de la aplicación y permitir que las aplicaciones tengan acceso a la base de datos de manera uniforme.
  • Constituyen código con nombre que permite el enlace diferido. Esto proporciona un nivel de direccionamiento indirecto que facilita la evolución del código.
  • Pueden reducir el tráfico de red. Una operación que necesite centenares de líneas de código Transact-SQL puede realizarse mediante una sola instrucción que ejecute el código en un procedimiento, en vez de enviar cientos de líneas de código por la red.

Tipos de Procedimientos Almacendos
En Microsoft SQL Server 2005 hay disponibles varios tipos de procedimientos almacenados. En este tema se describen de forma resumida los tipos de procedimientos almacenados y se incluyen ejemplos de cada uno de ellos.

- Procedimientos almacenados definidos por el usuario
Los procedimientos almacenados son módulos o rutinas que encapsulan código para su reutilización. Un procedimiento almacenado puede incluir parámetros de entrada, devolver resultados tabulares o escalares y mensajes para el cliente, invocar instrucciones de lenguaje de definición de datos (DDL) e instrucciones de lenguaje de manipulación de datos (DML), así como devolver parámetros de salida. En SQL Server 2005 existen dos tipos de procedimientos almacenados: Transact-SQL o CLR.

  • Transact-SQL
Un procedimiento almacenado Transact-SQL es una colección guardada de instrucciones Transact-SQL que puede tomar y devolver los parámetros proporcionados por el usuario. Por ejemplo, un procedimiento almacenado puede contener las instrucciones necesarias para insertar una nueva fila en una o más tablas según la información suministrada por la aplicación cliente o es posible que el procedimiento almacenado devuelva datos de la base de datos a la aplicación cliente. Por ejemplo, una aplicación Web de comercio electrónico puede utilizar un procedimiento almacenado para devolver información acerca de determinados productos en función de los criterios de búsqueda especificados por el usuario en línea.
  • CLR
Un procedimiento almacenado CLR es una referencia a un método Common Language Runtime (CLR) de Microsoft .NET Framework que puede aceptar y devolver parámetros suministrados por el usuario. Se implementan como métodos públicos y estáticos en una clase de un ensamblado de .NET Framework. Para obtener más información, vea Procedimientos almacenados CLR (en inglés).

- Procedimientos almacenados del sistema
Muchas de las actividades administrativas en SQL Server 2005 se realizan mediante un tipo especial de procedimiento conocido como procedimiento almacenado del sistema. Por ejemplo, sys.sp_changedbowner es un procedimiento almacenado del sistema. Los procedimientos almacenados del sistema se almacenan físicamente en la base de datos Resource e incluyen el prefijo sp_.
Los procedimientos almacenados del sistema aparecen de forma lógica en el esquema sys de cada base de datos definida por el usuario y el sistema. En SQL Server 2005, los permisos GRANT, DENY y REVOKE se pueden aplicar a los procedimientos almacenados del sistema. Para obtener una lista completa de los procedimientos almacenados del sistema, vea Procedimientos almacenados del sistema (Transact-SQL).

SQL Server admite los procedimientos almacenados del sistema que proporcionan una interfaz desde SQL Server a los programas externos para varias actividades de mantenimiento. Estos procedimientos almacenados extendidos utilizan el prefijo xp_.


Funciones definidas por el Usuario
Al igual que las funciones en los lenguajes de programación, las funciones definidas por el usuario de Microsoft SQL Server 2005 son rutinas que aceptan parámetros, realizan una acción, como un cálculo complejo, y devuelven el resultado de esa acción como un valor. El valor devuelto puede ser un valor escalar único o un conjunto de resultados.

Ventajas de las funciones definidas por el usuario
Las ventajas de utilizar las funciones definidas por el usuario en SQL Server son:
  • Permiten una programación modular. Puede crear la función una vez, almacenarla en la base de datos y llamarla desde el programa tantas veces como desee. Las funciones definidas por el usuario se pueden modificar, independientemente del código de origen del programa.
  • Permiten una ejecución más rápida. Al igual que los procedimientos almacenados, las funciones definidas por el usuario Transact-SQL reducen el costo de compilación del código Transact-SQL almacenando los planes en la caché y reutilizándolos para ejecuciones repetidas. Esto significa que no es necesario volver a analizar y optimizar la función definida por el usuario con cada uso, lo que permite obtener tiempos de ejecución mucho más rápidos. Las funciones CLR ofrecen una ventaja de rendimiento importante sobre las funciones Transact-SQL para tareas de cálculo, manipulación de cadenas y lógica empresarial. Las funciones Transact-SQL se adecuan mejor a la lógica intensiva del acceso a datos.
  • Pueden reducir el tráfico de red. Una operación que filtra datos basándose en restricciones complejas que no se puede expresar en una sola expresión escalar se puede expresar como una función. La función se puede invocar en la cláusula WHERE para reducir el número de filas que se envían al cliente.

Componentes de una función definida por el usuario
En SQL Server 2005, las funciones definidas por el usuario se pueden escribir en Transact-SQL, o en cualquier lenguaje de programación .NET. Para obtener más información acerca del uso de lenguajes .NET en funciones, vea CLR User-Defined Functions.
Todas las funciones definidas por el usuario tienen la misma estructura de dos partes: un encabezado y un cuerpo. La función toma cero o más parámetros de entrada y devuelve un valor escalar o una tabla.
El encabezado define:

  • Nombre de función con nombre de propietario o esquema opcional
  • Nombre del parámetro de entrada y tipo de datos
  • Opciones aplicables al parámetro de entrada
  • Tipo de datos de parámetro devueltos y nombre opcional
  • Opciones aplicables al parámetro devuelto

El cuerpo define la acción o la lógica que la función va a realizar. Contiene:
  • Una o más instrucciones Transact-SQL que ejecutan la lógica de la función
  • Una referencia a un ensamblado .NET

Tipos de funciones
SQL Server 2005 admite funciones definidas por el usuario y funciones del sistema integradas.

- Funciones escalares
Las funciones escalares definidas por el usuario devuelven un único valor de datos del tipo definido. Las funciones escalares en línea no tienen cuerpo; el valor escalar es el resultado de una sola instrucción. Para una función escalar de múltiples instrucciones, el cuerpo de la función, definido en un bloque BEGIN...END, contiene una serie de instrucciones Transact-SQL que devuelven el valor único. El tipo devuelto puede ser de cualquier tipo de datos excepto text, ntext, image, cursor y timestamp.

- Funciones con valores de tabla
Las funciones con valores de tabla definidas por el usuario devuelven un tipo de datos table. Las funciones con valores de tabla en línea no tienen cuerpo; la tabla es el conjunto de resultados de una sola instrucción SELECT.

- Funciones integradas
SQL Server proporciona las funciones integradas para ayudarle a realizar diversas operaciones. No se pueden modificar. Puede utilizar funciones integradas en instrucciones Transact-SQL para:
  • Tener acceso a información de las tablas del sistema de SQL Server sin tener acceso a las tablas del sistema directamente.
  • Realizar tareas habituales como SUM, GETDATE o IDENTITY.
Las funciones integradas devuelven tipos de datos escalares o table. Por ejemplo, @@ERROR devuelve 0 si la última instrucción Transact-SQL se ejecutó correctamente. Si la instrucción generó un error, @@ERROR devuelve el número de error. Y la función SUM(parameter) devuelve la suma de todos los valores del parámetro.

Sinónimos
Microsoft SQL Server 2005 incorpora el concepto de sinónimo. Un sinónimo es un nombre alternativo para un objeto de ámbito de esquema. Las aplicaciones cliente pueden utilizar un nombre de una sola parte para hacer referencia a un objeto base utilizando un sinónimo en lugar de utilizar un nombre de dos, tres o cuatro partes para hacer referencia al objeto base.

Un sinónimo es un objeto de base de datos que sirve para los siguientes objetivos:
  • Proporciona un nombre alternativo para otro objeto de base de datos, denominado objeto base, que puede existir en un servidor local o remoto.
  • Proporciona una capa de abstracción que protege una aplicación cliente de cambios realizados en el nombre o la ubicación del objeto base.


Transacción
Una transacción es una secuencia de operaciones realizadas como una sola unidad lógica de trabajo. Una unidad lógica de trabajo debe exhibir cuatro propiedades, conocidas como propiedades de atomicidad, coherencia, aislamiento y durabilidad (ACID), para ser calificada como transacción.
  • Atomicidad. Una transacción debe ser una unidad atómica de trabajo, tanto si se realizan todas sus modificaciones en los datos, como si no se realiza ninguna de ellas.
  • Coherencia. Cuando finaliza, una transacción debe dejar todos los datos en un estado coherente. En una base de datos relacional, se deben aplicar todas las reglas a las modificaciones de la transacción para mantener la integridad de todos los datos. Todas las estructuras internas de datos, como índices de árbol b o listas doblemente vinculadas, deben estar correctas al final de la transacción.
  • Aislamiento. Las modificaciones realizadas por transacciones simultáneas se deben aislar de las modificaciones llevadas a cabo por otras transacciones simultáneas. Una transacción reconoce los datos en el estado en que estaban antes de que otra transacción simultánea los modificara o después de que la segunda transacción haya concluido, pero no reconoce un estado intermedio. Esto se conoce como seriabilidad, ya que deriva en la capacidad de volver a cargar los datos iniciales y reproducir una serie de transacciones para finalizar con los datos en el mismo estado en que estaban después de realizar las transacciones originales.
  • Durabilidad. Una vez concluida una transacción, sus efectos son permanentes en el sistema. Las modificaciones persisten aún en el caso de producirse un error del sistema.

Especificar y exigir transacciones
Los programadores de SQL son los responsables de iniciar y finalizar las transacciones en puntos que exijan la coherencia lógica de los datos. El programador debe definir la secuencia de modificaciones de datos que los dejan en un estado coherente en relación con las reglas corporativas de la organización. El programador incluye estas instrucciones de modificación en una sola transacción de forma que SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) puede exigir la integridad física de la misma.

Es responsabilidad de un sistema de base de datos corporativo, como una instancia de Database Engine (Motor de base de datos), proporcionar los mecanismos que aseguren la integridad física de cada transacción. Database Engine (Motor de base de datos) proporciona:
  • Servicios de bloqueo que preserven el aislamiento de la transacción.
  • Servicios de registro que aseguren la durabilidad de la transacción. Aunque se produzca un error en el hardware del servidor, el sistema operativo o la instancia de Database Engine (Motor de base de datos), la instancia utiliza registros de transacciones, al reiniciar, para revertir automáticamente las transacciones incompletas al punto en que se produjo el error del sistema.
  • Características de administración de transacciones que exigen la atomicidad y coherencia de la transacción. Una vez iniciada una transacción, debe concluirse correctamente; en caso contrario, la instancia de Database Engine (Motor de base de datos) deshará todas las modificaciones de datos realizadas desde que se inició la transacción.

4.- Tipos de datos


Los objetos que contienen datos tienen asociado un tipo de datos que define la clase de datos, por ejemplo, carácter, entero o binario, que puede contener el objeto. Los siguientes objetos tienen tipos de datos:

  • Columnas de tablas y vistas.
  • Parámetros de procedimientos almacenados.
  • Variables.
  • Funciones de Transact-SQL que devuelven uno o más valores de datos de un tipo de datos específico.
  • Procedimientos almacenados que devuelven un código, que siempre es de tipo integer.

Al asignar un tipo de datos a un objeto se definen cuatro atributos del objeto:

  • El tipo de datos que contiene el objeto.
  • La longitud o tamaño del valor almacenado.
  • La precisión del número (sólo tipos de datos numéricos).
  • La escala del número (sólo tipos de datos numéricos).

Todos los datos almacenados en Microsoft SQL Server 2005 deben ser compatibles con uno de estos tipos de datos básicos.

También pueden crearse dos tipos de datos definidos por el usuario:
  • Los tipos de datos de alias se crean a partir de tipos de datos básicos. Proporcionan un mecanismo para aplicar un nombre a un tipo de datos que sea más descriptivo que los tipos de valores que va a contener el objeto. Esto puede facilitar al administrador de la base de datos o al programador entender el uso que se piensa de cualquier objeto que se defina con el tipo de datos.
  • Los tipos de datos definidos por el usuario CLR se basan en tipos de datos creados en código administrado y cargados en un ensamblado de SQL Server.

Los tipos de datos de SQL Server 2005 se organizan en las siguientes categorías:

  • Numéricos exactos
- bigint
- decimal
- int
- numeric
- smallint
- money
- tinyint
- smallmoney
- bit
  • Cadenas de caracteres Unicode
- nchar
- ntext
- nvarchar
  • Numéricos aproximados
- float
- real
  • Cadenas binarias
- binary
- image
- varbinary
  • Fecha y hora
- datetime
- smalldatetime
  • Otros tipos de datos
- cursor
- timestamp
- sql_variant
- uniqueidentifier
- table
- xml
  • Cadenas de caracteres
- char
- text
- varchar

En SQL Server 2005, según las características de almacenamiento, algunos tipos de datos están designados como pertenecientes a los siguientes grupos:
•    Tipos de datos de valores grandes: varchar(max), nvarchar(max) y varbinary(max)
•    Tipos de datos de objetos grandes: text, ntext, image, varchar(max), nvarchar(max), varbinary(max) y xml

Precisión, escala y longitud
La precisión es el número de dígitos de un número. La escala es el número de dígitos situados a la derecha de la coma decimal de un número. Por ejemplo, el número 123,45 tiene una precisión de 5 y una escala de 2.

En SQL Server 2005, la precisión máxima predeterminada de los tipos de datos numeric y decimal es 38. En versiones anteriores de SQL Server, el valor predeterminado máximo es 28.

La longitud de un tipo de datos numérico es el número de bytes utilizados para almacenar el número. La longitud para una cadena de caracteres o tipo de datos Unicode es el número de caracteres. La longitud para los tipos de datos binary, varbinary y image es el número de bytes. Por ejemplo, un tipo de datos int que puede contener 10 dígitos se almacena en 4 bytes y no acepta coma decimal. El tipo de datos int tiene una precisión de 10, una longitud de 4 y una escala de 0.

Cuando se concatenan dos expresiones char, varchar, binary o varbinary, la longitud de la expresión resultante es la suma de las longitudes de las dos expresiones de origen u 8.000 caracteres, lo que sea menor.

Cuando se concatenan dos expresiones nchar o nvarchar, la longitud de la expresión resultante es la suma de las longitudes de las dos expresiones de origen o 4.000 caracteres, lo que sea menor.

Cuando se comparan dos expresiones del mismo tipo de datos pero de distintas longitudes mediante UNION, EXCEPT o INTERSECT, la longitud resultante es la longitud máxima de las dos expresiones.

La precisión y la escala de los tipos de datos numéricos, excepto decimal, son fijas. Si un operador aritmético tiene dos expresiones del mismo tipo, el resultado tiene el mismo tipo de datos con la precisión y la escala definidas para ese tipo de datos. Si un operador tiene dos expresiones con tipos de datos numéricos diferentes, las reglas de prioridad de tipos de datos definen el tipo de datos del resultado. El resultado tiene la precisión y la escala definidas para el tipo de datos que le corresponde.

Esta tabla define cómo se calculan la precisión y la escala del resultado de la operación cuando éste es de tipo decimal. El resultado es decimal cuando se cumple alguna de las siguientes condiciones:

  • Ambas expresiones son de tipo decimal.
  • Una expresión es decimal y la otra es de un tipo de datos con una prioridad menor que decimal.

Las expresiones de operando se denotan como expresión e1, con precisión p1 y escala s1, y expresión e2, con precisión p2 y escala s2. La precisión y la escala de cualquier expresión que no sea decimal es la precisión y la escala definidas para el tipo de datos de la expresión.

Operación

Precisión del resultado

Escala del resultado *

e1 + e2

máx(s1, s2) + máx(p1-s1, p2-s2) + 1

máx(s1, s2)

e1 - e2

máx(s1, s2) + máx(p1-s1, p2-s2) + 1

máx(s1, s2)

e1 * e2

p1 + p2 + 1

s1 + s2

e1 / e2

p1 - s1 + s2 + máx(6, s1 + p2 + 1)

máx(6, s1 + p2 + 1)

e1 { UNION | EXCEPT | INTERSECT } e2

máx(s1, s2) + máx(p1-s1, p2-s2)

máx(s1, s2)



* La precisión y la escala del resultado tienen un valor máximo absoluto igual a 38. Cuando la precisión de un resultado es mayor que 38, la escala correspondiente se reduce para evitar que la parte entera del resultado se trunque.


Constantes
Una constante es un símbolo que representa el valor específico de un dato. El formato de las constantes depende del tipo de datos del valor que representa. Las constantes se llaman también literales. En las siguientes tablas se muestran algunos ejemplos del uso de las constantes.

Constantes usadas en

Ejemplo

Cadenas de caracteres

'O''Brien'

'The level for job_id: %d should be between %d and %d.'

Cadenas Unicode

N'Michl'

Constantes de cadenas binarias

0x12Ef

0x69048AEFDD010E

Constantes bit

0 o 1

Constantes datetime

'April 15, 1998'

'04/15/98'

'14:30:24'

'04:24 PM'

Constantes integer

1894

2

Constantes decimal

1894.1204

2.0

Constantes float y real

101.5E5

0.5E-2

Constantes money

$12

$542023.14

Constantes uniqueidentifier

0xff19966f868b11d0b42d00c04fc964ff

'6F9619FF-8B86-D011-B42D-00C04FC964FF'


Para las constantes numéricas, use los operadores unarios + y - cuando sea necesario especificar el signo del valor numérico:

+$156.45
-73.52E8
-129.42
+442

Las constantes de carácter y Unicode se asignan a la intercalación predeterminada de la base de datos actual, a menos que asigne una intercalación específica mediante la cláusula COLLATE, por ejemplo:

'abc' COLLATE French_CI_AI
N'lustig' COLLATE German_Phonebook_CS_AS

Las constantes se pueden usar de muchas formas en Transact-SQL. A continuación se muestran algunos ejemplos:

  • Como un valor constante en una expresión aritmética:
SELECT Price + $.10
FROM MyTable

  • Como el valor de datos con el que se compara una columna en una cláusula WHERE:
SELECT *
FROM MyTable
WHERE LastName = 'O''Brien'

  • Como el valor de datos que se va a colocar en una variable:
SET @DecimalVar = -1200.02

  • Como el valor de datos que debe colocarse en una columna de la fila actual. Esto se especifica con la cláusula SET de la instrucción UPDATE o la cláusula VALUES de una instrucción INSERT:
UPDATE MyTable
SET Price = $99.99
WHERE PartNmbr = 1234
INSERT INTO MyTable VALUES (1235, $88.88)

  • Como la cadena de caracteres que especifica el texto del mensaje emitido por una instrucción PRINT o RAISERROR:
PRINT 'This is a message.'

  • Como el valor que se va a probar en una instrucción condicional, como, por ejemplo, una instrucción IF o funciones CASE:
IF (@@SALESTOTAL > $100000.00)
   EXECUTE Give_Bonus_Procedure
Comments