165 lines
5.7 KiB
Markdown
165 lines
5.7 KiB
Markdown
|
## 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*)
|
||
|
|