Apuntes_Python/01_curso/Modulo_4/4-1a_bases_de_datos.md

165 lines
5.7 KiB
Markdown
Raw Normal View History

2022-12-24 22:41:20 -03:00
## 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*)