Introducción  
 
Desde tiempos remotos, los datos han sido registrados por el hombre en algún tipo de soporte (piedra, papel, madera, etc.) a fin de que quedara constancia de un fenómeno o idea. Los datos han de ser interpretados para que se conviertan en información útil, esta interpretación supone un fenómeno de agrupación y clasificación.

En la era actual y con el auge de los medios informáticos aparece el almacenamiento en soporte electromagnético, ofreciendo mayores posibilidades de almacenaje, ocupando menos espacio y ahorrando un tiempo considerable en la búsqueda y tratamiento de los datos. Es en este momento donde surge el concepto de bases de datos y con ellas las diferentes metodologías de diseño y tratamiento.

El objetivo básico de toda base de datos es el almacenamiento de símbolos, números y letras carentes de un significado en sí, que con un tratamiento adecuado se convierten en información útil. Un ejemplo podría ser el siguiente dato: 19941224, con el tratamiento correcto podría convertirse en la siguiente información: "Fecha de nacimiento: 24 de diciembre de 1994".

Según van evolucionando los tiempos, las necesidades de almacenamiento de datos van creciendo y con ellas las necesidades de transformar los mismos datos en información de muy diversa naturaleza. Esta información es utilizada diariamente como herramientas de trabajo y como soporte para la toma de decisiones por un gran colectivo de profesionales que toman dicha información como base de su negocio. Por este motivo el trabajo del diseñador de bases de datos es cada vez más delicado, un error en el diseño o en la interpretación de datos puede dar lugar a información incorrecta y conducir al usuario a la toma de decisiones equivocadas. Se hace necesario la creación de un sistema que ayude al diseñador a crear estructuras correctas y fiables, minimizando los tiempos de diseño y explotando todos los datos, nace así la metodología de diseño de bases de datos.

La metodología de diseño de datos divide cada modelo en tres esquemas:

A) Modelo Global: se trata de una representación gráfica legible por el usuario y que nos aporta el flujo de información dentro de una organización. No existen reglas para su construcción y se debe realizar siempre el esquema más sencillo posible para la comprensión por parte del usuario de la base de datos. Por ejemplo:

B) Modelo Lógico: se trata de una representación gráfica, mediante símbolos y signos normalizados, de la base de datos. Su objetivo es representar la estructura de los datos y las dependencias de los mismos, garantizando la consistencia y evitando la duplicidad. Este modelo de datos se estudiará con profundidad en los capítulos siguientes.

C) Modelo Físico: se trata del almacén de los datos, es la base de datos en sí misma, el soporte donde se almacenan los datos y de donde se extraen para convertir los datos en información. En función del gestor de bases de datos empleado las reglas de almacenamiento varían.

Para introducirnos mas en este tema, empezaremos definiendo que es un modelo.

Modelo: Es una representación de la realidad que contiene las características generales de algo que se va a realizar. En base de datos, esta representación la elaboramos de forma gráfica.

¿Qué es un modelo de datos? Volver

Es una colección de herramientas conceptuales para describir los datos, las relaciones que existen entre ellos, semántica asociada a los datos y restricciones de consistencia.

Los modelos de datos se dividen en tres grupos:

1.- Modelos lógicos basados en objetos.
2.- Modelos lógicos basados en registros.
3.- Modelos físicos de datos.

Modelos lógicos basados en objetos. Volver
 
Se usan para describir datos en los niveles conceptual y de visión, es decir, con este modelo representamos los datos de tal forma como nosotros los captamos en el mundo real, tienen una capacidad de estructuración bastante flexible y permiten especificar restricciones de datos explícitamente. Existen diferentes modelos de este tipo, pero el más utilizado por su sencillez y eficiencia es el modelo Entidad-Relación.
 
Modelo Entidad-Relación.
 
Denominado por sus siglas como: E-R; Este modelo representa a la realidad a través de entidades, que son objetos que existen y que se distinguen de otros por sus características, por ejemplo: un alumno se distingue de otro por sus características particulares como lo es el nombre, o el numero de control asignado al entrar a una institución educativa, así mismo, un empleado, una materia, etc. Las entidades pueden ser de dos tipos:
 
Tangibles: Son todos aquellos objetos físicos que podemos ver, tocar o sentir.
 
Intangibles: Todos aquellos eventos u objetos conceptuales que no podemos ver, aun sabiendo que existen, por ejemplo: la entidad materia, sabemos que existe, sin embargo, no la podemos visualizar o tocar.
 
Las características de las entidades en base de datos se llaman atributos, por ejemplo el nombre, dirección teléfono, grado, grupo, etc. son atributos de la entidad alumno; Clave, número de seguro social, departamento, etc., son atributos de la entidad empleado. A su vez una entidad se puede asociar o relacionar con más entidades a través de relaciones.
 
Pero para entender mejor esto, veamos un ejemplo:
 
Consideremos una empresa que requiere controlar a los vendedores y las ventas que ellos realizan; de este problema determinamos que los objetos o entidades principales a estudiar son el empleado (vendedor) y el artículo (que es el producto en venta), y las características que los identifican son:

Empleado:
Artículo:
Nombre Descripción
Puesto Costo
Salario Clave
R.F.C.  
 
La relación entre ambas entidades la podemos establecer como Venta.
 
Bueno, ahora nos falta describir como se representa un modelo E-R gráficamente, la representación es muy sencilla, se emplean símbolos, los cuales son:

Símbolo
Representa
 
Así nuestro ejemplo anterior quedaría representado de la siguiente forma:

 
Existen más aspectos a considerar con respecto a los modelos entidad relación, estos serán considerados en el tema Modelo Entidad Relación.
 
Modelos lógicos basados en registros.
 
Se utilizan para describir datos en los niveles conceptual y físico.Estos modelos utilizan registros e instancias para representar la realidad, así como las relaciones que existen entre estos registros (ligas) o apuntadores. A diferencia de los modelos de datos basados en objetos, se usan para especificar la estructura lógica global de la base de datos y para proporcionar una descripción a nivel más alto de la implementación.
 
Los tres modelos de datos más ampliamente aceptados son:

  1. Modelo Relacional
  2. Modelo de Red
  3. Modelo Jerárquico
Modelo relacional.
 
En este modelo se representan los datos y las relaciones entre estos, a través de una colección de tablas, en las cuales los renglones (tuplas) equivalen a los cada uno de los registros que contendrá la base de datos y las columnas corresponden a las características(atributos) de cada registro localizado en la tupla;
Considerando nuestro ejemplo del empleado y el artículo:

Tabla del empleado

 
 
Ahora te preguntaras ¿cómo se representan las relaciones entre las entidades en este modelo?
 
Existen dos formas de representarla; pero para ello necesitamos definir que es una llave primaria: Es un atributo el cual definimos como atributo principal, es una forma única de identificar a una entidad. Por ejemplo, el RFC de un empleado se distingue de otro por que los RFC no pueden ser iguales.
 
Ahora si, las formas de representar las relaciones en este modelo son:
 
1. Haciendo una tabla que contenga cada una de las llaves primarias de las entidades involucradas en la relación.
 
Tomando en cuenta que la llave primaria del empleado es su RFC, y la llave primaria del articulo es la Clave.

 
2. Incluyendo en alguna de las tablas de las entidades involucradas, la llave de la otra tabla.

 
Modelo de red. Volver
 
Este modelo representa los datos mediante colecciones de registros y sus relaciones se representan por medio de ligas o enlaces, los cuales pueden verse como punteros. Los registros se organizan en un conjunto de gráficas arbitrarias.
 
Ejemplo:

 
Modelo jerárquico. Volver
 
Es similar al modelo de red en cuanto a las relaciones y datos, ya que estos se representan por medio de registros y sus ligas. La diferencia radica en que están organizados por conjuntos de árboles en lugar de gráficas arbitrarias.

 
Modelos físicos de datos.
 
Se usan para describir a los datos en el nivel más bajo, aunque existen muy pocos modelos de este tipo, básicamente capturan aspectos de la implementación de los sistemas de base de datos. Existen dos clasificaciones de este tipo que son:

  1. Modelo unificador
  2. Memoria de elementos.
Arquitectura de Dos Capas Volver
 
Toda aplicación trata de reflejar parte del funcionamiento del mundo real, para automatizar tareas que de otro modo serían llevadas a cabo de modo más ineficiente, o bien no podrían realizarse. Para ello, es necesario que cada aplicación refleje las restricciones que existen en el negocio dado, de modo que nunca sea posible llevar a cabo acciones no válidas. A las reglas que debe seguir la aplicación para garantizar esto, se les llaman reglas de negocio, o business rules. Ejemplos de tales reglas son: no permitir crear facturas pertenecientes a clientes inexistentes, controlar que el saldo negativo de un cliente nunca sobrepase cierta cantidad, etc.
 
En realidad, la información puede ser manipulada por muchos programas distintos; así, una empresa puede tener un departamento de contabilidad que controle todo lo relacionado con compras, cobros, etc., y otro departamento técnico, que esté interesado en relacionar diversos parámetros de producción con los costes. La visión que ambos departamentos tendrán de la información y sus necesidades serán distintas, pero en cualquier caso siempre se deberán respetar las reglas de negocio. El hecho de que la información sea manipulada por diversos programas hace más difícil garantizar que todos respetan las reglas, especialmente si las aplicaciones corren en diversas máquinas, bajo distintos sistemas operativos, y están desarrolladas con distintos lenguajes y herramientas.
 
En un esquema cliente-servidor clásico existen dos capas, el cliente y el servidor: éste está ubicado normalmente en otra máquina, y suele ser un gestor de base de datos, como DB2, SQL Server, Oracle, aunque también puede ser una base de datos más pequeña, como Paradox, Dbase, etc., que accedemos directamente desde nuestra aplicación cliente. Los mejores gestores de base de datos relacionales proporcionan soporte para implementar en ellos bastantes reglas de negocio, mediante el uso de claves primarias, integridad referencial, triggers, etc., mientras que sistemas como dBase y otros apenas proporcionan soporte para reglas de negocio. En los esquemas cliente-servidor tradicionales, de dos capas, suele ser el gestor de bases de datos el que proporciona la conectividad, así como capacidades tan fundamentales como el soporte de transacciones.
 
Arquitectura de Tres Capas.
 
La introducción de una capa intermedia puede romper con esto, al ser necesario un modo de comunicar las aplicaciones cliente con la aplicación que lleva a cabo las labores de la capa intermedia, siendo ahora ésta la que se aprovecha de las capacidades de conectividad, el soporte de transacciones y las distintas capacidades que proporciona el gestor de base de datos. Solucionar todos los problemas de conectividad, etc., no es tarea fácil, y lógicamente debería utilizarse uno o más productos que solucionen algunos de estos problemas, basados en DCOM, CORBA y tecnologías similares: es el caso de MIDAS/OleEnterprise, de Borland, que proporciona protección contra la caída de servidores, conectividad e importación de algunas reglas del negocio a los clientes (aunque no soporta transacciones distribuidas), y de Microsoft Transaction Server (que proporciona conectividad y transacciones distribuidas, pero no protección contra caídas de los servidores).
 
A continuación se presenta el contenido y las especificaciones técnicas de cada capa:
 
  • PRIMERA CAPA

    Pantallas:
     
    En esta capa es donde interactúa el usuario con la aplicación, en ella se presentan todas las pantallas de la misma. Su función es captar y presentar la información al usuario. También se realizan en esta capa, validaciones propias de la captura de datos y navegación sobre los controles de la pantalla.

  • SEGUNDA CAPA

    Negocio:

     
    En esta capa se concentran todas las validaciones, reglas, políticas, restricciones, rubros y procesos propios del negocio. Todo esto se concentrará en componentes de negocio (clases), que encapsulan el negocio para ponerlo al servicio de la capa de pantallas.
     
    Para tal efecto se utilizaran las DLL's:
     
    • Messages: Se encargará de desplegar los diversos mensajes de la aplicación.
    • Catalogo: Se encargará de generar catálogos de cualquier índole, conformados por dos campos: uno que desempeñe el papel de clave y otro como descripción, esta DLL guardará referencia con la aplicación servidor de datos DataInterfase.exe.
    • Bussines: Encapsulará todas las funciones de negocio en los diversos componentes (métodos y propiedades), esta DLL guardará referencia con la aplicación servidor de datos DataInterfase.exe y Catalogo.dll, ésta ultima por hacer uso de opciones de cátalogo.
  • TERCERA CAPA

    Datos:
     
    Esta capa se encargará del manejo de la información de la base de datos, accesos y modificaciones. Para cubrir esta función se cuenta con:
     
    DataInterfase: Aplicación servidor de datos, encargada de atender las diversas solicitudes de la capa de negocio, conformada por funciones o servicios de datos que contendrán los queries para accesos o modificaciones a las tablas de la base de datos. Requiere tener referencia con TOODB.DLL. Esta aplicación funciona como servidor remoto y utiliza la tecnología DCOM para tal efecto.
     
    TOODB: DLL que contiene funciones propias para la conexión a la base de datos, y la ejecución de queries.

     
     
    En cuanto a la tecnología de tres capas, cabe mencionar que no hay una única posibilidad a la hora de distribuir las reglas de negocio dentro de un esquema cliente-servidor. Sin embargo, sí hay ciertas pautas que se pueden tener en cuenta a la hora de tomar una decisión, basadas en una clasificación de las reglas de negocio aquí expuestas: En general, lo más recomendable suele ser implementar todas las reglas de negocio relativas al modelo de datos y las relaciones en el servidor, dado que los modernos servidores suelen llevar a cabo estas tareas muy eficazmente.
     
    Por lo que respecta al resto de las reglas, la mejor solución suele ser implementarlas en la capa intermedia: Si tuviésemos que acceder a varias bases de datos, habríamos de migrar aquí algunas de las reglas que de otro modo irían al servidor, especialmente las de relación. Si bien, el tráfico en la red se incrementará al utilizar una capa intermedia, éste puede quedar aliviado haciendo que ésta resida en la misma máquina que el servidor de datos, o al menos dentro de la misma red local. La figura anterior muestra gráficamente la ubicación recomendable de las reglas de negocio dependiendo de su tipo (para acceso a una única base de datos).
     
    Por último, vale la pena resaltar la conveniencia de implementar las reglas del modelo de datos también en el cliente, para hacer fluida la interacción con el usuario, siendo lo ideal importarlas dinámicamente del servidor de base de datos. Por lo demás, la implementación de reglas en las aplicaciones, el cliente puede dar lugar a muchos problemas, tanto de velocidad como de portabilidad y fiabilidad, al tener que reflejar una y otra vez las mismas reglas en distintas aplicaciones, quizá desarrolladas con distintos lenguajes y ejecutándose bajo distintos sistemas operativos.
Teoría de Sistema de Base de Datos Relacional en SQL Server
 
¿Que es un sistema de base de datos?
 
Un sistema de Base de Datos es básicamente un sistema para archivar en computador; o sea, es un sistema computarizado cuyo propósito general es mantener información y hacer que esté disponible cuando se solicite. La información en cuestión puede ser cualquier cosa que se considere importante para el individuo o la organización a la cual debe servir el sistema; dicho de otro modo, cualquier cosa necesaria para apoyar el proceso general de atender los asuntos de esa organización. Pero es fundamental para el éxito de su proyecto limitar el sistema de base de datos, que Ud. quiere diseñar, a un específico y bien definido conjunto de objetos e interacciones; lo que le permitirá definir el alcance del sistema. Como veremos mas adelante no se trata de modelizar "todo" el mundo sino solo la parte "importante" y "pertinente" para alcanzar los objetivos funcionales del sistema. Esa parte del mundo que nos interesa la llamaremos el espacio del problema. El término modelo de datos se utilizará se utilizará para significar una descripción conceptual del espacio del problema, esto incluye la definición de sus entidades, que son clases de objetos que comparten determinadas características (por ejemplo un "cliente" es una entidad), dichas características se las denomina atributos (por ejemplo el "nombre" del cliente es un atributo de un cliente).
 
El modelo de datos incluye la descripción de las interrelaciones entre las entidades y las restricciones sobre dichas relaciones (por ej: las "facturas de venta" se emiten a nombre de un "cliente" y esta relación no puede faltar, es decir , no puede haber una factura que no tenga asignada un cliente.
 
La capa física o esquema físico del diseño, está constituida por las tablas y vistas que serán implementadas, y constituye la traslación del modelo conceptual en una representación física que pueda ser implementada utilizando el Sistema de Gestión de Bases de Datos Relacional (SGBDR) a ser empleado, a los fines de la presente materia el MS-SQL Server 2000. Este esquema no es mas que la representación del modelo conceptual o lógico expresado en términos que puedan ser usados para describirlo al SGBDR.
 
A medida que le vaya explicando al SGBDR como quiere que almacene los datos, el SGBDR creará los objetos necesarios para gestionarlos (tablas, vistas, índices, relaciones, etc). Lo que dará origen a la estructura la base de datos.
 
Por último, llamaremos base de datos a la combinación de los datos y su estructura. La base de datos incluye, entonces, a los datos mas las tablas, vistas, procedimientos almacenados, consultas, y a las reglas que el motor de base datos utilizará para asegurar el resguardo de los datos.
 
El término base de datos no incluye a la aplicación la cual consiste de los formularios y los reportes con los que interactuarán los usuarios, ni incluye la piezas de código usadas para unir las partes de la aplicación.
 
En un modelo de tres capas, la aplicación que accede a los datos almacenados en una base de datos y que a la vez interactúa con el usuario se divide en dos partes: la llamada capa intermedia que contiene todas las validaciones y las reglas del negocio y es la que interactúa con la base de datos y el front end que es la que contiene los formularios y realiza la presentación de los reportes, interactuando con el usuario final (ver figura 1.1).

 
El modelo Relacional Volver
 
El modelo relacional está basado en una colección de principios matemáticos desarrollado inicialmente sobre un conjunto de conceptos teóricos y predicados lógicos. Esto principios fueron aplicados al campo de los modelos de datos a finales de los años ´60 por el Dr. E. F. Codd, investigador de IBM, y publicados por primera vez en 1970.
 
El modelo relacional define el modo en que los datos van a ser representados (estructura de datos), la forma en que van ser protegidos (integridad de los datos) y las operaciones que pueden ser aplicadas sobre ellos (manipulación de datos).
El MS-SQLServer 2000 implementa un modelo relacional de base de datos.
En términos generales un sistema de base de datos relacional tiene las siguientes características:
  • Todos los datos están conceptualmente representados como un arreglo ordenado de datos en filas y columnas, llamado relación.
  • Todos los valores son escalares, esto es, que dada cualquier posición fila/columa dentro de la relación hay uno y solo un valor.
  • Todas las relaciones son realizadas sobre la relación completa y dan como resultado otra relación, concepto conocido como clausura .
A los fines prácticos una relación puede ser considerada como una tabla, aún cuando al momento de formularse la teoría intencionalmente se excluyó el término tabla por tener connotaciones de ordenamiento que no se deben aplicar al concepto de relación que es mas un conjunto, que una tabla ordenada. De todos modos y a los fines de la materia utilizaremos en forma indistinta la denominación de relación o de tabla.
 
Es importante destacar que el concepto de clausura permite que el resultado de una operación sobre un relación sea el dato para otra operación. Por lo que como veremos mas adelante al resultado de una orden Select se le puede aplicar otro Select.
 
Terminología relacional
 
La Figura 1.2 muestra una relación con los nombres formales de sus componentes principales

 
La estructura de la figura constituye una relación, donde cada fila constituye una Tupla. La cantidad de Tuplas en una relación indica la Cardinalidad de la relación. Cada columna en la relación es un atributo, y la cantidad de atributos indica el grado de la relación.
 
La relación se divide en dos secciones el encabezado y el cuerpo, donde el encabezado contiene la etiquetas de los atributos. Estas etiquetas constan de dos parte separadas por dos puntos ":" la parte izquierda es la denominación propiamente dicha del atributo, mientras que la parte derecha configura el dominio del atributo, que es el conjunto de todos los valores posibles y legales que puede tomar el atributo en las tuplas (por ej: el primer atributo de la relación de la figura tiene como dominio a todas las compañías que existen, mientras que solo algunas son valores efectivamente incorporados a la relación).
 
El cuerpo consiste en un conjunto desordenado de cero o más tuplas, esto indica que las tuplas no tienen un orden intrínseco, el número de registro no es tenido en cuenta en el modelo relacional. Por otro lado las relaciones sin tuplas siguen siendo relaciones. Por último las relaciones son conjuntos donde cualquier elemento puede ser inequívocamente identificado, por lo que la relación no permite tuplas duplicadas.
 
En cuanto a la terminología, en esta parte se utilizó una lenguaje formal para la definición de los elementos abordados, a partir de ahora se utilizarán las siguientes equivalencias de significado:
  • Una relación puede ser una tabla, o un recordset o un result set.
  • Una tupla puede ser una fila (row) o un registro (record)
  • Un atributo puede ser una columna (column) o un campo (field).
Dichas equivalencias se generan porque al instanciar en la implementación física el modelo conceptual, se utilizan términos que corresponden precisamente al modelo físico de implementación en el SGBDR, en este caso el MS-SQLServer 2000, que utiliza la terminología Microsoft.
 
Introducción al diseño de bases de datos
 
Antes de que usted pueda desarrollar un modelo lógico de datos, y subsecuentemente crear una base de datos y los objetos que esta contiene, usted debe comprender los conceptos fundamentales del diseño de bases de datos. Además, deberá estar familiarizado con los componentes básicos de una base de datos y cómo esos componentes trabajan juntos para proporcionar un almacenamiento eficaz de los datos y acceso a aquellos que requieren tipos específicos de datos, en formatos específicos, desde la base de datos.
 
Este tema presenta los componentes básicos de una base de datos y la terminología que describe esos componentes. Se discute la normalización y el concepto de relaciones entre entidades, dos conceptos que deben integrarse para entender el diseño de bases de datos relacionales.
 
Componentes de una base de datos SQL Server
 
Una base de datos SQL Server consiste en una colección de tablas que guardan conjuntos específicos de datos estructurados. Una tabla (entidad) contiene una colección de filas (tuplas) y columnas (atributos). Cada columna en la tabla se diseña para guardar un cierto tipo de información (por ejemplo, fechas, nombres, montos, o números). Las tablas tienen varios tipos de controles (restricciones, reglas, desencadenadores, valores por defecto, y tipos de datos de usuario) que aseguran la validez de los datos. Las tablas pueden tener índices (similar a los de los libros) que permiten encontrar las filas rápidamente. Usted puede agregar restricciones de integridad referencial a las tablas para asegurar la consistencia entre los datos interrelacionados en tablas diferentes. Una base de datos también puede utilizar procedimientos almacenados que usan Transact-SQL programando código para realizar operaciones con los datos en la base de datos, como guardar vistas que proporcionan acceso personalizado a los datos de la tabla.
 
Por ejemplo, suponga que se crea una base de datos llamada MiCoBD para manejar los datos en su compañía. En la base de datos MiCoBD, crea una tabla llamada Empleados para guardar información sobre cada empleado, y la tabla contiene las columnas EmpID, Apellido, Nombre, Dept, y Cargo. Para asegurar que nunca dos empleados tengan el mismo EmpID y que la columna de Dept contiene números sólo válidos para las secciones en su compañía, usted debe agregar restricciones a la tabla. Si usted quisiera realizar búsquedas rápidas para encontrar los datos de un empleado basado en el ID del empleado, usted definiría índices. Por cada empleado, se agrega una fila de datos a la tabla Empleados, para esto usted crea que un procedimiento almacenado llamado AgregarEmp que se personaliza para aceptar los valores de los datos por un nuevo empleado y que realiza la operación de agregar la fila a la tabla Empleados. Se podría necesitar un resumen departamental de empleados, por lo que usted define una vista llamada EmpsDept que combina datos de las tablas Secciones y Empleados. Figura 1.3 muestra las partes de la base de datos MiCoBD.

 
Normalizar un diseño de base de datos
 
A continuación se verá el tema de normalización desde un punto vista práctico, resaltando aquellos conceptos útiles y comentando las limitaciones que deben tenerse en cuenta en el proceso de normalizado de una base de datos.
 
Perfeccionar un diseño de base de datos incluye el proceso de normalización. Normalizar un diseño lógico de base de datos involucra usar métodos formales para separar los datos en múltiples tablas relacionadas. Tener un número mayor de tablas con pocas columnas es característico de una base de datos normalizada; mientras que tener pocas tablas con más columnas cada una es característico de una base de datos no-normalizada.
 
Una normalización razonable mejora a menudo el comportamiento general del sistema. Cuando se utilizan los índices, el SQL Server 2000 Query Optimizer (Optimizador de Consultas de SQL Server) es muy eficiente al seleccionar interrelaciones entre las tablas.
 
Un aumento de la normalización produce una mayor cantidad y complejidad de combinaciones entre las tablas requeridas para recuperar los datos. Demasiadas combinaciones complejas entre varias tablas puede deteriorar el rendimiento en las consultas. Una normalización razonable debería incluir la mínima cantidad de consultas habituales posible que involucren más de cuatro tablas relacionadas.
 
Una base de datos que se usa principalmente para soporte de decisión (al revés de una base de datos operacional que realiza tareas de actualización de datos) podría no tener actualizaciones redundantes y podría ser más entendible y eficaz para las consultas si el diseño no se normaliza totalmente. No obstante, tener datos no-normalizados es el error de diseño más común en aplicaciones de base de datos más que tener datos demasiado normalizados. Empezar con un diseño completamente normalizado y a partir de allí desnormalizar selectivamente algunas tablas por razones específicas de rendimiento de las consultas es una buena estrategia.
 
A veces el diseño de la base de datos lógico ya está definido, tal el caso de una base de datos existente, y el rediseño total no es factible. Pero aún entonces, podría ser posible normalizar una tabla grande selectivamente en varias tablas más pequeñas. Si la base de datos es accedida a través de los procedimientos almacenados, este cambio del esquema podría tener lugar sin afectar las aplicaciones. Si no, podría ser posible crear una vista que esconde de las aplicaciones el cambio del esquema.
 
Lograr una base de datos bien diseñada
 
En la teoría de diseño de base de datos relacionales, las reglas de normalización identifican ciertos atributos que deben estar presentes o ausentes en una base de datos bien diseñada. Estas reglas pueden ponerse bastante complicadas y pueden ir más allá del alcance del presente. De todos modos, hay algunas reglas que pueden ayudarlo a lograr un diseño de la base de datos correcto. Una tabla debe tener un identificador, debe guardar datos para sólo un solo tipo de entidad, debería evitar columnas que acepten valores nulos, y no debe tener valores o columnas repetidas.
 
Una Tabla debe Tener un Identificador
 
La regla fundamental de la teoría del diseño de base de datos es que cada tabla debe tener un identificador de las filas, que es una columna o un conjunto de columnas que toman valores únicos para cada registro de la tabla. Cada tabla debe tener una columna de ID, y ningún registro puede compartir el mismo valor de ID con otro. La columna (o columnas) que sirve como identificador único de la fila para una tabla constituye la clave primaria de la tabla.
 
En la Figura 1.4, la tabla Empleados no incluye una columna que identifica unívocamente cada fila dentro de la tabla. Fíjese que el nombre de David Mendlen aparece dos veces. Al no haber ningún identificador único en esta tabla, no hay ninguna manera de distinguir fácilmente una fila de otra. Esta situación podría ser un problema, más aún, si ambos empleados trabajaron en la misma sección y tienen el mismo tipo de trabajo.

Figura 1.4 Una tabla que no tiene ningún identificador único.
 
Usted puede normalizar la tabla agregando una columna que singularmente identifique cada fila, como se muestra en la Figura 1.5. Fíjese que cada instancia de David Mendlen tiene un único valor de EmpID.

Figura 1.5 Una tabla normalizada con un identificador único.
 
Una Tabla debe Guardar Datos para un Solo Tipo de Entidad
Intentar guardar demasiada información en una tabla puede afectar la administración eficaz y fiable de los datos en la tabla. Por ejemplo, en la Figura 1.6, la tabla Libros incluye información sobre cada editor de libros.


Figura 1.6 Una tabla de libros que incluye título e información del editor.
 
Aunque es posible tener columnas que contienen información para el libro y su editor en la misma tabla, este diseño lleva a varios problemas. La información del editor debe agregarse y debe guardarse redundantemente para cada libro publicado por un editor dado. Esta información usa espacio extra de almacenamiento en la base de datos. Si la dirección del editor cambia, el cambio debe realizarse en todos los registros de libros de ese editor. Además, si el último libro de un editor es eliminado de la tabla Libros, la información de ese editor se pierde.
 
En una base de datos normalizada, se guardaría la información sobre los libros y editores en por lo menos dos tablas: una para los libros y una para los editores (como se muestra en Figura 1.7).

Figure 1.7 Un diseño de la base de datos normalizado incluye una tabla para los libros y una tabla para información sobre el editor.
 
La información sobre el editor tiene que ser grabada sólo una vez y quedar vinculada a cada libro de ese editor. Si la información del editor cambia, debe cambiarse en sólo un lugar, y la información del editor estará allí aún cuando el editor no tenga ningún libro en la base de datos.
 
Una Tabla debe Evitar Columnas que acepten valores nulos
 
Las tablas pueden tener columnas definidas para permitir valores nulos. Un valor nulo indica que el registro no tiene valor por ese atributo. Aunque puede ser útil permitir valores nulos en casos aislados, es mejor usarlos muy poco porque ellos requieren un manejo especial con el consiguiente aumento de la complejidad de las operaciones de datos. Si tiene una tabla que tiene varias columnas que permiten valores nulos y varias de las filas tienen valores nulos en dichas columnas, debería considerar poner estas columnas en otra tabla vinculada a la tabla primaria. Guardar los datos en dos tablas separadas permite que la tabla primaria sea simple en su diseño pero a la vez mantener la capacidad de almacenar información ocasional.
 
Una Tabla no Debe tener Valores o Columnas Repetidas
 
Una tabla no debe contener una lista de valores para un pedazo específico de información. Por ejemplo, suponga que usted quiere consultar los títulos de libros y sus autores. Aunque la mayoría de los libros podrían tener sólo un autor, muchos de ellos podrían tener dos o más. Si hay sólo una columna en la tabla Libros para el nombre del autor, esta situación presenta un problema. Una solución es guardar el nombre de ambos autores en una columna, pero mostrar una lista de autores individuales sería entonces difícil. Otra solución es cambiar la estructura de la tabla para agregar otra columna para el nombre del segundo autor, pero esta solución guarda sólo dos autores. Debería agregarse otra columna si algún libro tiene tres autores.

Figure 1.8 Dos modos de estructurar la tabla Libros
 
Si usted encuentra que necesita guardar una lista de valores en una sola columna o si tiene columnas múltiples para una sola pieza de datos (Autor1, Autor2, y así sucesivamente), debe considerar poner los datos duplicados en otra tabla con un vínculo a la tabla primaria. En el caso de la tabla Libros, usted podría crear una tabla primaria adicional para los autores y luego crear una tercera tabla que vincule los libros a sus autores y almacene los valores repetidos, como se muestra en la Figura 1.9. Este diseño habilita cualquier número de autores para un libro sin modificar la definición de la tabla y no desperdicia espacio libre para almacenar libros que tienen un solo autor.

Figura 1.9 Tres tablas que guardan información sobre los libros y sus autores.
 
Relaciones entre entidades
 
En una base de datos relacional, las relaciones entre entidades ayudan a prevenir datos redundantes. Una relación entre entidades trabaja vinculando datos de dos tablas a través de columnas clave, que generalmente tienen el mismo nombre en ambas tablas. En la mayoría de los casos, la relación entre entidades vincula la clave primaria de una tabla que proporciona a un identificador único para cada fila con una entrada en la clave foránea de la otra tabla. Se discuten claves primarias y las claves foráneas en más detalle en Integridad de los Datos."
 
Hay tres tipos de relaciones entre las tablas: uno-a-uno, uno-a-muchos, y muchos-a-muchos. El tipo de relación depende de cómo se definen las columnas relacionadas.
 
Relaciones entre tablas uno-a-uno
 
En una relación uno-a-uno, una fila en tabla A no tiene más de una fila vinculada en tabla B (y viceversa). Una referencia uno-a-uno se crea si las dos columnas relacionadas son claves primarias o tienen restricción de unicidad. Este tipo de referencia no es común, sin embargo, porque la información relacionada de esta manera normalmente estaría en una sola tabla.
 
Relaciones entre tablas uno-a-muchos
 
Una relación uno-a-muchos es el tipo más común de relación entre entidades. En este tipo de relación, una fila en la tabla A tiene muchas filas vinculadas en la tabla B, pero una fila en la tabla B tiene una única fila vinculada en la tabla A. Por ejemplo, las tablas Editores y Título mencionadas previamente tienen una relación uno-a-muchos. Cada editor produce muchos títulos, pero cada título tiene un solo editor. Una relación uno-a-muchos se crea si solo una de las columnas relacionadas es una clave primaria o tiene una restricción de unicidad.
 
Relación entre tablas muchos-a-muchos
 
En una relación muchos-a-muchos, una fila en tabla A tiene muchas filas vinculadas en tabla B (y viceversa). Se puede crear tal relación definiendo una tercera tabla, llamada tabla de unión cuya clave primaria consiste en las claves foráneas de ambas tablas A y B. En las Figuras 1.8 y 1.9, usted vio cómo la información del autor puede separarse en otra tabla. La tabla Libros y la tabla Autores tienen una relación muchos-a-muchos. Cada una de estas tablas tiene una relación uno-a-muchos con la tabla de LibrosAutores que sirve como la tabla de la unión entre las dos tablas primarias.
 
Resumen
 
Una base de datos SQL Server consiste en una colección de tablas que guardan un conjunto específico de datos estructurados. Una tabla contiene una colección de filas y columnas. Cada columna en la tabla se diseña para guardar un cierto tipo de información (por ejemplo, fechas, nombres, montos, o números). El diseño lógico de la base de datos, incluyendo las tablas y las relaciones entre ellas, es el corazón de una base de datos relacional optimizada. Perfeccionar un diseño de base de datos incluye el proceso de normalización. Normalizar un diseño lógico de base de datos lógico involucra usar métodos formales para separar los datos en múltiples tablas relacionadas. A medida que la normalización aumenta, incrementa el número y la complejidad de los vínculos que son necesarios para recuperar los datos. Las reglas de normalización identifican ciertos atributos que deben estar presentes o ausentes en una base de datos bien diseñada. Las tablas en una base de datos normalizada deben tener un identificador, deben guardar sólo datos para un solo tipo de entidad, deben evitar columnas que acepten valores nulos, y no deben tener valores o columnas repetidos. Usted puede crear relaciones entre sus tablas en un diagrama de la base de datos y mostrar cómo se vinculan las columnas en una tabla a las columnas de otra tabla. En una base de datos relacional, las relaciones ayudan a prevenir datos redundantes. Una relación trabaja vinculando datos de las columnas, generalmente columnas clave que tienen el mismo nombre en ambas tablas. Hay tres tipos de relaciones entre las tablas: uno-a-uno, uno-a-muchos, y muchos-a-muchos. El tipo de relación entre tablas depende de cómo usted define las columnas relacionadas.
 
Desarrollar el Modelo Lógico de Datos
 
Identificar Entidades y Sus Atributos
 
Cuando se recogen los requisitos del sistema para al diseño de la base de datos, uno de los pasos que se realizan es el de definir los tipos de datos que contendrá la base de datos. Pueden separarse estos tipos de datos en categorías que representan una división lógica de información. En la mayoría de los casos, cada categoría de tipo de dato se traduce en un objeto tabla dentro de la base de datos. Hay normalmente, un conjunto de objetos primarios, y después de que ellos son identificados, surgen los objetos relacionados.
 
Por ejemplo, en la base de datos Editores, uno de los objetos primarios es la tabla Titulos. Uno de los objetos relacionado a la tabla Títulos es la tabla de RoyAgenda que proporciona información sobre la agenda de royalties asociada con cada libro. Otro objeto es la tabla TituloAutor que vincula a los autores con los libros.
 
Usando las categorías de datos definidas en los requisitos del sistema, se puede empezar a crear un mapa del objeto tabla dentro de la nueva base de datos. Por ejemplo, suponga que usted está diseñando una base de datos para el sistema de reservaciones de un hotel. Durante el proceso de recolección de requisitos de sistema, identifica varias categorías de datos, incluido los cuartos, huéspedes, y reservaciones. Como resultado, agrega tablas a su diseño de la base de datos que representan a cada una de estas categorías, como se muestra en la Figura 1.10

Figura 1.10 Los objetos primarios en un diseño de la base de datos: la tabla Habitaciones, la tabla Reservas, y la tabla Huespedes.
 
Al identificar las reglas comerciales para este sistema, usted determinó que el hotel tiene ocho tipos de cuartos y que los huéspedes regulares prefieren un cierto tipo de cuarto. Como resultado, tanto la tabla Habitaciones como la tabla Huespedes deberán incluir un atributo de tipo de cuarto. Usted decide crear una tabla para los tipos del cuarto, como se muestra en Figura 1.11.

Figura 1.11 La base de datos de reservaciones del hotel que incluye la tabla de TipoHab.
 
Ahora, la tabla Habitaciones y la tabla Huespedes referencian a la tabla TipoHab sin tener que repetir una descripción del cuarto para cada cuarto y cada huésped. Además, ante un cambio en los tipos de cuarto, usted puede actualizar la información en un solo lugar, en lugar de tener que actualizar múltiples tablas y archivos.
 
Antes de que usted pueda completar el proceso de definir objetos de la tabla dentro de la base de datos, debe definir las relaciones entre las tablas. Siempre que identifique una relación muchos-a-muchos, tendrá que agregar una tabla de unión. Se discuten relaciones con más detalle adelante en este tema.
Después de que usted ha definido todas las tablas que puede definir a estas alturas, puede definir las columnas (atributos) para esas tablas. De nuevo, usted estará tomando esta información directamente de los requisitos del sistema en los que identificó qué tipos de datos deben ser incluidos en cada categoría de información.
 
Usando el ejemplo de base de datos del hotel, suponga que determinó durante el proceso de recolección de requisitos del sistema que la categoría Huespedes debe incluir información la siguiente información sobre los huéspedes: nombre, apellido, dirección, número de teléfono, y preferencias del cuarto. Como resultado, usted planea agregar columnas a la tabla de los Huespedes para cada uno de estos tipos de información. Usted también planea agregar un identificador único para cada huésped, tal como con cualquier entidad normalizada. La Figura 1.12 muestra la tabla Huespedes con todas las columnas que contendrá la tabla.

Figura 1.12 La tabla Huespedes y sus atributos.
 
Identificar Relaciones Entre las Entidades
 
Después de que ha definido las tablas y sus columnas, usted debe definir las relaciones entre las tablas. A través de este proceso, podría descubrir que necesita modificar el diseño que ha creado.
 
Empiece escogiendo una de las tablas primarias y seleccionando las entidades que tienen relaciones con esa tabla. Siguiendo con el ejemplo del hotel, asuma que los requisitos del sistema indican que todas las reservaciones deben incluir cuarto e información del huésped. Los cuartos, huéspedes, y reservaciones son las categorías de datos. Como resultado, usted puede deducir que una relación existe entre los cuartos y reservaciones y entre los huéspedes y reservaciones. La Figura 5.4 muestras las relaciones entre estos objetos. Una línea que conecta las dos tablas significa una relación. Advierta que una relación también existe entre la tabla Habitaciones y la tabla TipoHab y entre la tabla Huespedes y la tabla TipoHab.

Figura 1.13 Las relaciones que existen entre las tablas en la base de datos de las reservaciones del hotel.
 
Una vez que establece que una relación existe entre las tablas, usted debe definir el tipo de relación. En la Figura 1.13, cada relación (línea) es marcada a cada extremo (donde conecta a una tabla) con el número 1 o con un símbolo de infinito (8). El 1 se refiere al lado uno de una relación, y el símbolo de infinito se refiere al lado muchos de una relación uno-a-muchos. Algunos autores también las llaman relaciones 1:N.
 
Para determinar los tipos de relaciones que existen entre las tablas, usted debe mirar los tipos de datos que cada tabla contiene y los tipos de conexiones entre ellos. Por ejemplo, una relación existe entre la tabla Huespedes y la tabla Reservas. La relación existe porque los huéspedes son parte de la información que se recaba cuando se registra una reservación. Según las reglas comerciales, un huésped puede hacer una o más reservaciones, pero cada reservación grabada puede incluir solo el nombre de un huésped, normalmente la persona que está haciendo la reservación. Como resultado, una relación uno-a-muchos existe entre las dos tablas: un huésped, una o muchas reservaciones.
 
Una relación también existe entre la tabla Reservas y la tabla Habitaciones. Según las reglas comerciales, una reservación puede solicitar uno o más cuartos, y un cuarto puede ser incluido en una o más reservaciones (en fechas diferentes). En este caso, existe una relación muchos-a-muchos: muchas reservaciones a muchos cuartos. En un diseño de base de datos normalizado, sin embargo, relaciones muchos-a-muchos deben ser modificadas agregando una tabla de unión y creando una relación uno-a-muchos entre cada tabla original y la tabla de unión, como se muestra en la Figura 1.14.

Figura 1.14 La tabla de HabReservas como tabla de unión entre la tabla Habitaciones y la tabla Reservas.
 
Identificar Restricciones sobre los Datos
 
A estas alturas del proceso de diseño de la base de datos, usted debería tener definidas las entidades, sus atributos, y las relaciones entre entidades. Ahora, usted debe identificar las restricciones sobre los datos que se guardarán en las tablas. El mayor trabajo ya fue completado cuando usted identificó las reglas comerciales al momento de recoger los requisitos del sistema. Como se vio, las reglas comerciales incluyen todo las restricciones en un sistema, incluida la integridad de los datos y la seguridad del sistema. Para esta fase del proceso de diseño, su enfoque se centrará en las restricciones sobre los datos. Usted tomará las reglas comerciales relacionadas a los datos y las refinará y organizará. Debe intentar organizar las restricciones en base a los objetos que creó en la base de datos, y formularlas de modo que se refieran a ellos.
 
Volviendo al diseño de la base de datos de la Figura 1.14, suponga que una de las reglas comerciales indica: "Un registro de huésped puede, pero no es obligatorio, incluir una preferencia por uno de los tipos de cuarto predefinidos pero no puede incluir ninguna otra preferencia de tipo de cuarto." Al definir las restricciones sobre los datos, usted debe referenciar las tablas y columnas pertinentes y dividir la regla comercial de modo que cada restricción esté contenida en una instrucción simple:
  • La columna de TipoHabID en la tabla Huespedes no requiere un valor.
  • Todo valor distinto de NULL en la columna de TipoHabID en la tabla Huespedes debe ser un valor incluido en la columna de TipoHabID en la tabla de TipoHab.
  • Una fila en la tabla de los Huespedes puede incluir sólo un valor en la columna de TipoHabID.
En cuanto sea posible, usted debe organizar las restricciones sobre los datos según las tablas y sus columnas. En algunos casos, una restricción se aplica al conjunto de una tabla, a más de una tabla, a una relación entre las tablas, o a la seguridad de los datos. En estos casos, intente organizar las restricciones de modo que sea lógica y más pertinente al proyecto. La meta de identificar las restricciones sobre los datos es tener un mapa claro del camino para cuando se creen los objetos de la base de datos y sus relaciones que fuerce la integridad de los datos