Thursday, 22. November 2007, 23:00:30
A lo largo del desarrollo del sistema, me he dado cuenta de otros detalles que no se deben dejar pasar durante la fase del diseño arquitectónico del sistema. Me refiero al diseño de la base de datos.
La base de datos es el conjunto de información que le da sentido a un sistema. No existen sistemas que no trabajen con datos y cuando estos datos necesitan ser almacenados tendrán que hacerlo en una base de datos. Incluso un solo archivo .txt puede verse como una base de datos primitiva.
Los manejadores de bases de datos modernos nos permiten operar con bases de datos muy poderosas y complejas, capaces de resguardar por sí solas, de manera íntegra, todos los datos de un negocio. Esto lo hacen a traves de procedimientos almacenados, disparadores de eventos, restricciones, índices y paquetes, entre otras cosas.
Cuando diseñamos una base de datos, la tarea principal consiste en identificar los datos y sus respectivas relaciones. Es importante tomar en cuenta la teoría de normalización de bases de datos en esta fase. Otra tarea consiste en definir tipos de datos y llaves. A primera vista, una vez que se tiene esto listo, parece que hemos terminado y surge la constante tentación del programador poco experimentado: COMENZAR A PROGRAMAR. En este caso, comenzar a utilizar la base de datos...
Sin embargo no es así. El diseño conceptual de la base de datos, anteriormente citado, es sólo el PRINCIPIO de la construcción de una buena base de datos. Hay más factores a tomar en cuenta, tanto del diseño lógico como del físico.
Respecto del diseño lógico, es importante tener cuidado incluso de los nombres de los campos, es importante definir una nomenclatura para diferenciar tablas crecientes de tablas catalogo, columnas llave de columnas descriptivas, etc. Una vez que hemos definido nuestra nomenclatura, es importante apegarse a ella a lo largo de todas las tablas. Esto nos facilitara mucho la programación de sql y hará que nuestras consultas sean legibles, facilitando así el mantenimiento de la base y de la aplicación.
Siguiendo con el diseño lógico, una vez que hemos terminado el diseño de las tablas y sus relaciones, es necesario definir los usuarios de la base. Debido a los ataques de inyección de sql, una buena medida de seguridad consiste en utilizar siempre usuarios con permisos limitados según las actividades que le son necesarias. Por ejemplo, al momento de generar un reporte únicamente necesitamos permisos de lectura por lo que podríamos crear un usuario que solo pueda leer y utilizar ese usuario cada vez que vayamos a generar un reporte. Cuando necesitemos escribir, utilizaremos otro usuario. Para obtener una seguridad mas rigurosa, además de limitar el acceso por permisos, lo limitamos también por objetos. Es decir, indicamos que un usuario puede leer o escribir SOLAMENTE en ciertas tablas.
Respecto del diseño físico, es importante considerar en que lugar estará la base de datos, ver si usará el mismo servidor para la base que para la aplicación. En caso de que no sea así, ver si existen las configuraciones de red necesarias para que los dos servidores puedan comunicarse, analizar el tráfico que aumentarán a la red las transacciones entre ambos servidores y definir las reglas de crecimiento para la base.
Es interesante esto de ser arquitecto de sistemas! :=)
Hasta Pronto.
Liga del día:
http://www.owasp.org/index.php/Preventing_SQL_Injection_in_JavaPágina del día:
http://www.ctube.net/;-)
Canción del día:
Sweet Sacrifice - Evanescence
Frase del día:
No porque me guste la misma música que una persona significa que soy igual a esa persona. :-o
Nunca se bajen música de:
Eagles