sábado, 30 de abril de 2016

DISEÑO DE UNA BASE DE DATOS



INTRODUCCIÓN
Uno de los pasos cruciales en la construcción de una aplicación que maneje una base de datos, es sin duda, el diseño de la base de datos.
Si las tablas no son definidas apropiadamente, podemos tener muchos problemas al momento de ejecutar consultas a la base de datos para tratar de obtener algún tipo de información.
No importa si nuestra base de datos tiene sólo 20 registros, o algunos cuantos miles, es importante asegurarnos que nuestra base de datos está correctamente diseñada para que tenga eficiencia y que se pueda seguir utilizando por largo del tiempo.

NORMALIZACIÓN DE BASES DE DATOS Y TÉCNICAS DE DISEÑO
Básicamente, las reglas de Normalización están encaminadas a eliminar redundancias e inconsistencias de dependencia en el diseño de las tablas. Tienes que tener en cuenta que debes crear una BD funcional y eficiente.

Normalización cero:


Primer nivel de Formalización/Normalización. (F/N)
1.  Eliminar los grupos repetitivos de las tablas individuales.
2.  Crear una tabla separada por cada grupo de datos relacionados.
3.  Identificar cada grupo de datos relacionados con una clave primaria.


Ahora diremos que nuestra tabla está en el primer nivel de F/N. Hemos solucionado el problema de la limitación del campo url. Pero sin embargo vemos otros problemas. Cada vez que introducimos un nuevo registro en la tablusuarios, tenemos que duplicar el nombre de la empresa y del usuario.

Segundo nivel de F/N
1.  Crear tablas separadas para aquellos grupos de datos que se aplican a varios registros.
2.  Relacionar estas tablas mediante una clave externa.





Hemos creado tablas separadas la clave primaria en la tabla usuarios, userId, está relacionada ahora con la clave externa en la tabla urls,

Tercer nivel de F/N.
Eliminar aquellos campos que no dependan de la clave.



Relaciones entre los Datos
Antes de definir el cuarto nivel de F/N,  veremos tres tipos de relaciones entrlos datos: uno-a-uno, uno-con-varios y varios-con-varios. Por un momentimaginemos que ponemos el campo url en una tabla separada, y cada vez que introducimos un registro en la tabla usuarios también introducimos una sola fila en la tablurls. Entonces tendríamos una relación uno-a-unocada fila en la tabla usuarios tendrí exactament un fil correspondiente  e l tabl urls.  Par los propósitos de nuestra aplicación no sería útil la normalización.
Las tablas en el ejemplo del Segundo Nivel de F/N. Nuestras tablas permiten a un lo usuaritener asociadas varias urls. Esta es una relación uno- con-varios, el tipo de relación más común, y hasta que se nos presentó el dilema del Tercer Nivel de F/N. la única clase de relación que necesitamos.
La relación varios-con-varios, sin embargo, es ligeramente más compleja. En el ejemplo del Tercer Nive de F/N que tenemos a un usuarirelacionado con varias urls.
Para disminuir la duplicación de los datos (este proceso nos llevará al Cuarto Nivel de F/N), hemos creado una tabla que lo tiene claves externas y primarias url_relations.

Cuarto Nivel de F/N.
1.  En  la relaciones varios-con-varios, entidades  independientes no pueden sealmacenadas en la misma tabla.
Ya  que  l se  aplic  la relacione varios-con-varios,  l mayorí d los desarrolladores pueden ignorar esta regla de forma correcta. Pero es muy útil en ciertas situaciones, tal comestá. Hemos optimizado nuestra tabla urls eliminado duplicados y hemos puesto las relaciones en su propia tabla.


Ejemplo:
SELECT nombre, url FROM usuarios, urls, url_relations WHERE url_relations.relatedUserId = 1 AND usuarios.userId = 1 AND urls.urlId url_relations.relatedUrlId
Y si queremos recorrer todas las urls de cada uno de los usuarios, hariamos algasí:
SELECT  nombre ur FRO usuarios,  urls,  url_relation WHERE usuarios.userId = url_relations.relatedUserId AND urls.urlId url_relations.relatedUrlId

Quinto Nivel de F/N.
Existe otro nivel de normalización que se aplica a veces, pero es de hecho algesotérico y en la mayoría de los casos no es necesario para obtener la mejor funcionalidad de nuestra estructura de datos o aplicación. Su principio sugiere:
1.  La tabla original debe ser reconstruida desde las tablas resultantes en las cuales ha sido troceada.
Los beneficios de aplicar esta regla aseguran que no has creado ninguna columna extraña en tus tablas y que la estructura de las tablas que has creado sea del tamaño justo que tiene que ser. Es una buena prácticaplicaesta regla, pero a no ser que estétratando con una extensa estructura de datos probablemente no la necesitarás.


Integridad de los datos

La exigencia de integridad de los datos garantiza la calidad de los datos de la base de datos.
Ejemplo:
Si se especifica para un empleado el valor de identificador de 123, la base de datos no debe permitir que ningún otro empleado tenga el mismo valor de identificador. Si tiene una columna empleado_valoracion para la que se prevean valores entre 1 y5, la base de datos no debe aceptar valores fuera de ese intervalo.
Dos pasos importantes en el diseño de las tablas son la identificación de valores válidos para una columna y la determinación de cómo forzar la integridad de los datos en la columna. La integridad de datos pertenece a una de las siguientes categorías:
La integridad de entidad define una fila como entidad única para una tabla determinada. La integridad de entidad exige la integridad de las columnas de los identificadores o la clave principal de una tabla, mediante restricciones PRIMARY KEY.
La integridad de dominio viene dada por la validez de las entradas para una columna determinada. Puede exigir la integridad de dominio para restringir el tipo mediante tipos de datos, el formato mediante reglas y restricciones CHECK, o el intervalo de valores posibles mediante restricciones FOREIGN KEY, restricciones CHECK, definiciones DEFAULT, definiciones NOT NULL y reglas.
La integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se eliminan filas. Para conseguir esa coherencia, es preciso que no haya referencias a valores inexistentes y que, si cambia el valor de una clave, todas las referencias a ella se cambien en consecuencia en toda la base de datos.
La integridad definida por el usuario permite definir reglas de empresa específicas que no pertenecen a ninguna otra categoría de integridad. Todas las categorías de integridad admiten la integridad definida por el usuario. Esto incluye todas las restricciones de nivel de columna y nivel de tabla en CREATE TABLE, procedimientos almacenados y desencadenadores.
      
La seguridad de los datos
La gran mayoría de los datos sensibles del mundo están almacenados en sistemas gestores de bases de datos comerciales tales como Oracle, Microsoft SQL Server entre otros, y atacar una bases de datos es uno de los objetivos favoritos para los criminales.
Por lo que la atención generalmente se ha centrado en asegurar los perímetros de las redes por medio de, firewalls, IDS / IPS y antivirus, cada vez más las organizaciones se están enfocando en la seguridad de las bases de datos con datos críticos, protegiéndolos de intrusiones y cambios no autorizados.

Rendimiento de una Base de Datos
Para trabajar con tablas muy grandes debemos tener en cuenta tres claves: 
Buffers
Un buffer es una ubicación de la memoria reservada para el almacenamiento temporal de información digital. La primera cosa que deberíamos tener muy clara es el hecho de que hay una gran diferencia entre “Datos que están en memoria” y “Datos que no están en memoria”.
Índices
Los índices son usados para encontrar rápidamente los registros que tengan un determinado valor en alguna de sus columnas.
Consultas
La optimización de las consultas podría ser el punto más extenso de los tres por la gran variedad de posibilidades que tenemos a la hora de optimizar consultas.

Mantenimiento
Para el mantenimiento de los componentes de la base de datos es recomendable realizar un estudio previo de la empresa, para así verificar el funcionamiento de estos componentes y para determinar si existe sobresaturación de la información, esto con el fin de tener una idea más clara de lo que puede hacerse sobre la base de datos para que esta esté optimizada.
Es muy importante que antes de realizar cualquier cambio en la base de datos
esta se debe respaldar, para así evitar cualquier inconveniente.
Análisis de los archivos de control (log files).
Cuando en una base de datos se produce algún problema, como puede ser la desconexión de un cliente, la caída de esta puede estar debida a algún fallo interno, etc. Esta genera un mensaje en un fichero. El análisis de estos  mensajes puede dar una idea de la estabilidad de la base de datos, así como  del acceso a la misma.

Análisis de las páginas de la base de datos.
Una base de datos está formada por distintos tipos de páginas:
  • ü  Estructura de las tablas
  • ü  Índices
  • ü  Datos

Es conveniente verificar la integridad de éstas páginas con las herramientas del propio sistema.
Transacciones en el limbo.
En una BD cuando se inicia un proceso de modificación de datos se inicia una transacción. Esta puede ser finalizada, o deshecha. Sin embargo, si el cliente desde el inicio de la transacción pierde la conexión con la BD, esta transacción queda pendiente o en el “limbo”. Conviene eliminar periódicamente este tipo de transacciones que no finalizaron.
Gestión de índices.
Los índices en general se guardan en forma de árbol binario. Cuando los datos sufren muchos cambios, los índices empiezan a ocupar más páginas, aumentando lo que se conoce como profundidad del índice. Una reconstrucción periódica de estas tablas reubica los índices de nuevo, mejorando las prestaciones de la BD.
Gestión de usuarios. 
El alta y baja de los usuarios que acceden a la BD es una tarea que debe realizarse puntualmente, ya que a su vez contribuye a la seguridad de ésta.
Gestión de permisos.
No todos los usuarios tienen los mismos privilegios, y al igual que se gestiona el alta y baja de éstos, debe gestionarse los permisos sobre las tablas, vistas, etc.
 Copias de seguridad (backups).
Tanto en frío como en caliente. En caliente significa que los usuarios siguen conectados  a la BD mientras se hace la copia de ésta. No todos los  sistemas de BD lo permiten. En frío es  cuando sólo está conectado el ABD a  ésta.

Estimar el tamaño de una base de datos
 Para la estimación del tamaño que ocupara una base de datos se deben tener en cuenta los siguientes valores:
  • • Ti: Tamaño inicial de la base “limpia”. Este valor dependerá del motor seleccionado, de su versión y del SO.
  • • Td: Tamaño de las tablas con sus datos. Es el valor que ocuparan los datos, este es el más estándar de los valores ya que se obtiene calculando el tamaño de cada una de las tablas sumando lo que ocuparan cada una de sus filas. Si hay que tener en cuenta que no todos los motores poseen exactamente los mismos tipos de datos por lo que los tamaños podrían variar. Además hay que tener en cuenta que cada motor maneja diferente las características de las columnas (manejo de nulls por ejemplo).
  • • Tidx: Tamaño de los índices. Este tamaño se obtiene de la suma de todos los índices que tenga cada una de las tablas. Y para su cálculo se deberá tener en cuenta el tipo de índice (cluster, no cluster) y el método que utilice el motor seleccionado para almacenarlo
  • • Tc: Tamaño de las funciones y/o procedimientos (generalmente este tamaño es insignificante respecto de los demás.
  • • Tud: este tamaño depende de la configuración de la base y de los tipos de procesos que se ejecuten. En la mayoría de los casos suele ser un espacio a considerar si se tiene un alto volumen de transacciones concurrentes o si las transacciones ejecutan muchas sentencias en cada transacción.
  • • Tlog: Tamaño para logs de transacciones. Este valor puede variar de acuerdo a la configuración de la base.
  • • CS: Coeficiente de seguridad Tdb

 Tamaño de la base de datos

Tdb=(Ti+Td+Tidx+Tc+Tud+Tlog) * CS

RESUMEN
Es importante diseñar una base de datos para modelar con precisión las funciones empresariales, ya que una base de datos bien diseñada ofrecerá un mejor rendimiento.
Se debe tener en claro la normalización de base de datos ya que gracias a esto podemos lograr un buen diseño, las bases de datos normalizadas se caracterizan por tener un mayor número de tablas estrechas (con pocas columnas).
La exigencia de integridad de los datos garantiza la calidad de los datos de la base de datos. Por ejemplo, si se especifica para un empleado el valor de identificador de 123, la base de datos no debe permitir que ningún otro empleado tenga el mismo valor de identificador. Si tiene una columna empleado_valoracion para la que se prevean valores entre 1 y5, la base de datos no debe aceptar valores fuera de ese intervalo.
Una de las funciones de las bases de datos consiste en proteger los datos, ya que es muy importante la seguridad de una entidad.
Una base de datos deberá de asegurarse de que realice todas las operaciones importantes rápidas y correctamente
Después de creado una base de datos debe de tener una constante mantenimiento para el buen funcionamiento de la misma
También debemos de tener claro la estimación del tamaño de la base de datos ya que gracias a esto se podrá ver si se necesita reajustes.

RECOMENDACIONES
El último paso del diseño de la base de datos es adoptar determinadas convenciones de nombres. Aquí algunas reglas que es conveniente observar:
  • ü  Utilizar caracteres alfanuméricos.
  • ü  Limitar los nombres a menos de 64 caracteres.
  • ü  Utilizar el guion bajo (_) para separar palabras.
  • ü  Utilizar palabras en minúsculas.
  • ü  Los nombres de las tablas deberían ir en plural y los nombres de las columnas en singular.
  • ü  Utilizar las letras ID o COD en las columnas de clave primaria y foránea.
  • ü  En una tabla, colocar primero la clave primaria seguida de las claves foráneas.
  • ü  Los nombres de los campos deben ser descriptivos de su contenido.
  • ü  Los nombres de los campos deben ser unívocos entre tablas, excepción hecha de las claves.
  • ü  Tener en cuenta esta tabla para mejorar el rendimiento de una base de datos bien diseñada:


Recursos del sistema
cliente
Servidor
hardware
cpu
Cpu más rápido posible de doble núcleo o mayor
El más rápido posible

Ram
La máxima posible
La máxima posible.

Disco duro
Disco duro rápido, con suficiente espacio libre
La máxima posible.
Varios discos duros de alta capacidad y alta velocidad

Red
Conexión de alta velocidad
Conexión de alta velocidad
software
Sistema operativo
Afinado para mejor operación de aplicación cliente
Afinado para mejor operación de la aplicación servidor

Red
Afinado para mejor rendimiento
Afinado para mejor rendimiento

aplicación
Optimizar un gestor de base de datos en aplicación cliente
Optimizar servidor del Dbms para mejor desempeño


CONCLUSIONES
Al desarrollar este trabajo damos una inducción en el tema de Diseño de Bases de Datos. Nos muestra la gran importancia que para cualquier entidad, ya sea una empresa grande o chica, para el gobierno, hasta para la vida cotidiana de una persona tienen las bases de datos. Todo gira alrededor de ellas, todos los procesos del mundo están registrados en ellas, de ahí la importancia de llevar a cabo un diseño eficiente y libre de errores de las mismas.

APRECIACIÓN DEL EQUIPO
El buen diseño de una base de datos nos dará un mejor rendimiento de la misma.

GLOSARIO
Eficiente: Que realiza o cumple un trabajo o función a la perfección.

Eficiencia: Capacidad para realizar o cumplir adecuadamente una función

Esotérico: Que es incomprensible o difícil de entender.

Procedimientos almacenados: es un programa (o procedimiento) almacenado físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro.

Desencadenadores: es una clase especial de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento en el servidor de bases de datos.

Firewalls: es un software o hardware que comprueba la información procedente de Internet o de una red y, a continuación, bloquea o permite el paso de ésta al equipo

Dbms: Database Management System (DBMS) 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.

Software: Conjunto de programas y rutinas que permiten a la computadora realizar determinadas tareas.

Hardware: Conjunto de elementos físicos o materiales que constituyen una computadora o un sistema informático.

BIBLIOGRAFÍA
https://technet.microsoft.com/es-es/library/ms184276(v=sql.105).aspx
http://revista.seguridad.unam.mx/numero-12/principios-b%C3%A1sicos-de-seguridad-en-bases-de-datos
http://miweb.yabiru.com.ar/sisop/ADR/material/2.2_ADR_Estimacion_de_tamanio_de_una_DB_presenta.pdf
http://www.slinfo.una.ac.cr/manualsite/mantenimiento/PRC02.html

LINK DE DESCARGA: