## Bases de Datos Por lo general un programa necesita cargar y guardar datos externos al mismo. Si los datos son pocos y sin estructura, se pueden utilizar archivos. Si se necesita manejar grandes volumenes de datos, y además estos datos están relacionados, usar archivos es inviable, poco eficiente, y requieren código mas complejo. El tipo de base de datos mas utilizado en la actualidad son las **bases de datos relacionales** *(Edgar Frank Codd, IBM, sn Jose, California 1970)*. Las bases de datos pueden considerarse como un **conjunto de relaciones** o tabas que contienen registros o filas y cada registro contiene campos (dato especifico). ----- #### Esquemas y Datos - **Esquema**: Definición de la estructura de la base de datos, almacena principalmente; nombre de cada tabla, nombre de cada columna, y tipo de dato de cada columna. - **Datos**: Son el contenido de la base de datos en un momento dado > Las bases de datos relacionales utilizan lenguaje SQL (Structured Query Languaje) > Se utilizará SQLite, por ser muy liviano. > > - SQLite3 > - SQLiteBrowser ---- #### Funcionalidad básica SQLiteBrowser - ***Database Structure :*** Modificar la estructura de la base de datos - ***Browser Data :*** Buscar, insertar o eliminar datos en una tabla - ***Edit Pragmas :*** Perminte modificar parametros de la DB (opcs. avanzadas) - ***Execute SQL :*** Ejecutar consultas SQL El programa permite Importar y Exportar tablas, *file import/export* ---- ### El modelo Relacional Está basado en la lógica de predicados y la teoría de conjuntos. **Primary Key :** Asegura que cada registro de una tabla sea único. No se permite tener dos registros con la misma clave primaria en una misma tabla. La ***llave primaria*** puede ser un campo o una combinación de estos, que identifiica cada fila de una tabla de forma única. **No** pueden existir dos filas que tengan la misma clave primaria. Son valores ***únicos, no nulos.*** Ej. de posibles claves primarias: - DNI - ISBM - Patente - Nro. de tarjeta **Foreign Key :** La clave foránea identifica una columna o grupo de columnas en una tabla (tabla hija o referendo) que se refiere a una columna o grupo de columnas en otra tabla (tabla maestra o referenciada, puediendo ser la misma tabla). > Una clave foránea es una limitación referencial entre dos tablas. > Clave utilizada para vincular o relacionar dos tablas Una tabla puede contener múltiples claves foráneas referenciando tablas diferentes. La base de datos hace cumplir las restricciones de referencia. > Se debe garantizar la integridad de los datos, sus respectivas tablas, > y filas referenciadas al actualizar o eliminar. ---- ### Integridad de Datos El sistema de gestión de base de datos relacionales, preserva la integridad de los datos almacenados (a medida de lo posible). #### Restricciones de integridad **Integridad de dominio**: Validación de las restricciones requeridas para una determinada columna de la tabla ej. - **Datos Requeridos:** valor de columna ***Not Null*** - **Validacion:** Asegura que los ***tipos de datos*** insertados correspondan al especificado **Integridad de entidad**: Comprobación de ***unicidad*** del valor de la ***clave primaria***, al insertar/modificar un registro **Integridad referencial** Asegura la integridad entre las llaves ***foránea*** y ***primaria***. (tabla refereciada/tabla referendo) > Actualizaciones de BDs que pueden corromper la integridad referencial > > - Incongruencia entre clave foránea con clave primaria al insertar una fila en la tabla referendo. > > - Incongruencia entre clave foránea con clave primaria al actualizar la clave foránea, > a un valor inexsitente de clave primaria en la tabla refenciada. > > - Borrando una fila referenciada. Las filas de la tabla referendo quedan huérfanas. > > - Actualización de clave primaria en la tabla referenciada, cuando existe(n) referencia(s) > a la fila modificada. Las filas de la tabla referendo quedan huérfanas. #### Especificación SQL año 2003 Asegurando la integridad referencial En caso de actualizar o eliminar registros de una tabla rederenciada (padre), se definen 5 acciónes referenciales diferentes: - **CASCADE** Cuando se elminen/actualizen las filas de una tabla padre, se eliminan/actualizan las respectivas filas de la tabla hija. **eliminacion** o **actualización en cascada**. - **RESTRICT** Impide la modificación del valor de una columna de la tabla padre, cuando está refereciada al valor de una fila en una tabla hija. - **NO ACTION** Similar a RESTRICT. Pero la comprobación de integridad se realiza despues de intentar modificar la tabla (**UPDATE** o **DELETE**) - **SET DEFAULT** Cambia a un valor predefinido, el valor de referencia afectado - **SET NULL** Cambia a **NULL** el valor de referencia afectado. No debe estar definido NOT NULL en la columna hija. ----- #### Indices Estructura de datos que mejora la velocidad de las operaciones, permitiendo un rápido acceso a los registros de una tabla, de una BD. Pueden ser definidos como ***únicos***, actuando como restricción, previniendo filas idénticas en el índice. Pueden ser creados a partir de una o más columnas. El indice ocupa espacio en disco, por lo que puediera ralentizar un **INSERT**, **UPDATE** o **DELETE**. *Detalle de implementación:* Los índices son construidos generalmente sobre árboles [B](https://es.wikipedia.org/wiki/%C3%81rbol-B), [B+](https://es.wikipedia.org/wiki/%C3%81rbol_B%2B) o [B\*](https://es.wikipedia.org/wiki/%C3%81rbol-B*)