Si bien ya vimos algunos conceptos básicos de bases de datos, y definimos una base de datos como un conjunto de datos relacionados entre sí con un objetivo común, almacenados en algún lugar, y que su contenido está organizado, hace falta ver cómo se guarda o cómo se organiza una base de datos.
Partiendo de la idea de que una base de datos contendrá la información -toda la información- de un tema en particular (todo lo relacionado con la contabilidad, todo lo que se tenga de alumnos en una escuela, o todo lo que se ha capturado de un juicio en un tribunal) esta información se almacena en un lugar y con cierta estructura, pero ¿dónde y cómo se almacena?
Una base de datos se almacena por medio de archivos en discos que son utilizados por el motor de bases de datos (llámese este motor SQL Server, Oracle, DB2, MySQL, etc.) . Estos archivos contienen todos los datos visibles (por las aplicaciones que construimos, por los administradores de bases de datos, o por los desarrolladores) y otros que son vistos -y administrados- solo por el DBA (metadatos, esquemas, archivos de log o bitácoras, etc.).
En SQL Server -por ejemplo- una base de datos se almacena en al menos un archivo con extensión MDF y el log de transacciones se guarda en al menos un archivo de extensión LDF. Toda la información del usuario se almacena en el archivo MDF y el archivo LDF se utiliza para registrar cada transacción dentro de la base de datos para utilizarse en casos de fallas por ejemplo.
Tablas del sistema
Dentro de la base de datos, como ya se había visto en otro post se almacenan tablas; tablas que contendrán los datos y la estructura de la misma base de datos (como se define en las llamadas Reglas de Codd ). Existen tablas del sistema que almacenarán la estructura (existirán tablas con los nombres -y especificaciones- de las demás tablas, tablas con los nombres -y características- de todos los campos que contiene cada tabla de la base de datos, tablas con los índices, tablas con las restricciones, una tabla con los procedimientos almacenados, con los triggers, etc.).
Un administrador de bases de datos deberá conocer esas tablas y deberá conocer -al menos en términos generales- lo que contienen. Lo anterior es por untema de administración, de buenas prácticas y también por cuestiones de seguridad de las bases de datos.
Estas tablas del sistema no pueden ser modificadas -en su estructura- por ningún usuario (ni siquiera por el DBA), su estructura no debe ser tocada (no se podrán añadir campos, eliminarlos, etc.), y mucho menos pueden ser eliminadas
Tablas definidas por el usuario
A su vez, las tablas definidas por los desarrolladores -o por el DBA- serán las que contendrán los datos capturados por las aplicaciones, sistemas o los que serán registrados directamente -por medio de comandos SQL (específicamente los subcomandos de DML)- por los programadores o DBA’s. Estas tablas son -y deben ser- modeladas por los usuarios (llámanse desarrolladores, programadores, administradores) siguiendo las mejores prácticas (como las formas normales), se deben apegar a las necesidades de los usuarios finales, adapatadas a las reglas del negocio y podrán ser creadas, modificadas y llenadas en los términos que los usuarios lo definan. Estas tablas definidas por el usuario si pueden ser alteradas (en estructura y contenido) por los diversos usuarios, de acuerdo a los privilegios o permisos que tenga cada usuario.