La información es el centro de todas las aplicaciones de hoy en día.
La administración de la información es una tarea que tiene demasiada responsabilidad ya que el éxito o fracaso depende directamente de ella.
Hablar de la administración de información es hablar de roles, algunas organizaciones (dependiendo de los recursos humanos) los dividen en:
Nota: en pequeñas organizaciones ambos roles son ejecutados por la misma persona, a la cual por lo general se le conoce como DBA.
otros roles que no están directamente relacionados con la información pero que interactúan directamente con las personas mencionadas son:
DBA vs DA
DBA vs DA vs SA
Habilidades requeridas para ser un "buen" DBA:
Aspectos a considerar una oferta de trabajo de DBA:
Y que hay acerca del salario ??
Basicamente son 3:
Algunos aspectos a considerar al momento de realizar el modelado/análisis
Generalmente todo modelo tiene una representación gráfica, para el caso de datos el modelo mas popular es el modelo entidad-relación o digrama E/R.
Se denomina asi debido a que precisamente permite representar relaciones entre entidades (objetivo del modelado de datos).
La figura 2.1 muestra distintos ejemplos de notaciones, en realidad todas muy similares.
Figura 2.1 Notación E/R (1) Ross, (2) Bachmann, (3) Martin, (4) Chen, (5) Rumbaugh
También debido al aumento de popularidad y uso de UML también se puede emplear dicha notación (figura 2.3).
Figura 2.3 Notación UML
Lo importante es que en toda organización se debe establecer un estándar que deben seguir todos los modelos de la misma.
El modelo debe estar compuesto por:
Componentes simbólicos
|
Figura 2.4 Componentes simbólicos E/R
Guías de nombramiento
Es importante mantener guías o reglas para poder tener una documentación uniforme y consistente de todos los datos.
Relaciones de Cardinalidad
(Muchos a Muchos) (Uno a Muchos) (Uno a Uno)
|
Figura 2.5 Relaciones Modelo E/R
Ejemplo Modelo E-R
Figura 2.5 Ejemplo Modelo E/R
Figura 2.5 Modelo E/R en E/R
Generalización
Figura 2.7 Generalización
El modelo es una representación visual que gráficamente nos da una perspectiva de como se encuentran los datos involucrados en un proyecto u organización.
Pero el modelo no nos presenta propiamente una instancia de los datos, un ejemplo que muestre con claridad algunas datos de muestra y como se relacionan en realidad. Por eso es conveniente crear un "esquema", el cual consiste de tablas las cuales en sus renglones (tuplas) contienen instancias de los datos.
Las tablas 2.1 y 2.3 muestran las reglas que se deben seguir para poder crear dicho esquema.
modelo e-r conversión a tablas
|
Tabla 2.1
Para el ejemplo de la Figura 2.5 tendríamos:
escuela
departamento
curso
profesor
estudiante
profesor_curso
estudiante_curso
|
modelo e-r
|
Tabla 2.3
Una vez creadas las tablas hay que verificar si aún se puede reducir u optimizar de alguna manera.
Es identificar aquellos atributos que dependen de otros y que generalizan el concepto de super-llave
Ejemplo:
ID ---> Nombre
ID --> Puesto --> Sueldo
Una tabla se encuentra en 1a NF, si todos sus atributos son atómicos (indivisibles)
El ejemplo clásico:
nombre | dirección | teléfono |
En 1a. NF
nombre | apellido_paterno | apellido_materno | dirección | teléfono |
Una tabla se encuentra en 2a NF, si está en 1a NF y cada atributo que NO es llave es "completamente" dependiente de la llave.
Si tenemos la tabla:
calificaciones_cursos
id_estudiante | depto | clave_curso | descripción | calificación |
NO se encuentra en 2a NF
{ id,clave,depto} --> descripción
{clave,depto} --> descripción
Normalizando quedaría
|
Un esquema relacional se encuentra en 3NF si para toda dependencia funcional X --> A:
o
o
deptos
nombre_depto extensión id_jefe empleados
id_empleado nombre_depto id_jefe
donde es evidente que nombre_depto --> id_jefe, quedaría entonces:
|
El paso de un modelo lógico a uno físico requiere un profundo entendimiento del manejador de bases de datos que se desea emplear, incluyendo características como:
Como se comentó en el modelado lógico el paso de convertir el modelo a tablas hace que las entidades pase a ser tablas (más las derivadas de las relaciones) y los atributos se convierten en las columnas de dichas tablas.
Físicamente esta metáfora de una tabla se mapea al medio físico, con algunas consideraciones como se menciona en las siguientes secciones.
Revisar los tipos de datos disponibles en el DBMS, en especial
En ocasiones se pueden presentar casos en donde la llave primaria no puede representarse en alguno de los tipos ofrecidos por el dbms, en ese caso se podria definir alguno y bien optar por otra llave primaria.
Importante:
Algunos dbms poseen la capacidad de "autoincrement" o "identity property" con la cual pueden automáticamentemanipular algun atributo para generar llaves incrementales. Pero es importante verificar: como se manejan internamente ?, se pueden reiniciar ?, se permite especificar algun valor inicial ?.
Algo importante dependiendo del dbms que se utilice pero por lo general la secuencia es:
"Es una tabla que contiene una lista de elementos (llaves) y números de referencia donde dichos elementos se encuentran (campos de referencia)".
Un índice es un atajo desde un campo llave hacia la localización real de los datos.
Es el punto clave de la optimización de velocidad de toda base de datos.
Si se busca alguna tupla en base a un atributo que no tiene un índice entonces se realiza un escaneo de la tabla completa lo cual es demasiado costoso, por eso es recomendable usar índices en:
No olvidar que el uso de un índice implica:
Tipos de índices:
Btrees
Bitmaps
Male 1000011101 Female 0110000010 Unknown 0001100000 |
Reverse Key
Basado en btrees pero usando el campo en orden inverso Craig --> giarC |
Partitioned
Btrees separados en diferentes "chunks" que inclusive pueden ser distintas particiones del disco |
Ordered
Especificacion del btree para indicar si ordena ascendente o descendentemente |
otros serían:
Hashing
Acceso directo a los datos a través de una fórmula de hash. El inconveniente es que requiere de espacio adicional en disco y no es útil al recuperar "rangos" de datos. |
Clustering
La idea es mantener las tuplas ordenadas bajo algún criterio. El inconveniente es que requiere de espacio adicional, cuando se acaba entonces se puede seguir insertando pero se pierde el concepto de clustering. |
Interleaving Data
Cuando 2 tablas de antemano se sabe que se mezclarán (join) para buscar cierta información entonces es conveniente hacer esa mezcla en el disco. La mayoría de los dbms no lo hacen de manera directa, se prefiere el clustering.
|
CREATE create table table_name ( column_name column_type column_modifiers, ..., column_name column_type column_modifiers);
create table musicians( musician_id INT, last_name CHAR(40), first_name CHAR(40), nickname CHAR(40));
|
INSERT insert into table_name (column_name, ..., column_name) values (value, ..., value);
insert into musicians (musician_id, last_name, first_name, nickname) values(2,'Lydon','John','Johnny Rotten');
|
UPDATE update table_name set column_name= value, ..., column_name=value where column_name=value;
update albums set year=1994 where album_id=4;
update albums set category='old music' where year < 1980;
|
DELETE delete from table_name where column_name=value
delete from albums where albums_id=4; |
SELECT select column_name, ..., column_name from table_name where column_name=value;
select title from albums where category='industrial';
|
JOIN select bands.band_name from bands,albums where albums.category='alternative' and bands.band_id=albums.band_id; |
SUBQUERIES select title from albums, where band_id in (select bands.band_id from bands, band_musician where band_musician.musician_id=2 and bands.band_id=band_musician.band_id); |
Si una empresa desea tener almacenada la información de sus proveedores, puede tener un esquema como:
Esquema
Supplier(ID, Name) |
Restricciones de integridad
de manera que una consulta como el encontrar el nombre del vendedor o los productos que vende puede ser algo muy fácil de hacer en SQL:
SELECT Name
FROM Supplier, Sell
WHERE Supplier.ID=Sell.ID_Supplier and Supplier.name='Samsung'
Otras consultas:
Sin embargo si la compañía desea mantener un histórico de los distintos productos ofrecidos por cada proveedor a lo largo de la historia, entonces el problema se complica y habria que modificar el esquema a algo como:
Supplier(ID, Name, Since date) Sell (ID_Supplier, ID_Product, Since date) |
Qué restricciones de integridad se presentan ??
Consultas:
Supplier(ID, Name, From date, To date) Sell (ID_Supplier, ID_Product, From date, To date) |
Nota: Algunos DBMS ofrecen la opción de incluir "intervalos (Intervals) como un tipo de dato.
Qué se está asumiendo ?
Qué restricciones de integridad se presentan ??