Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Diseño
2. Administración. Motor de datos (Postgresql:libre, Oracle:indra)
3. SQL en ambiente transaccional: Programar y poner en funcionamiento las bases de datos.
(Structured Query Language)
INTRODUCCIÓN
Base de datos: sistema para almacenar información y poder almacenarla. Deben de cumplir
una serie de características.
Las BBDD aparecieron entre los 60-70. Al principio estaban compuestas de archivos, lo cual
conllevaba una serie de limitaciones:
1. Falta de coherencia: No tenían una estructura fija. Por ejemplo podrías introducir un
teléfono con 8 dígitos.
2. Permitían la redundancia: No revisaban la duplicidad de información.
3. Falta de seguridad.
4. Concurrencia. No permitían modificaciones simultáneas.
Las entidades son tipos de datos que se representan con cuadrados o rectángulos siempre
van en singular. Las entidades se relacionan entre sí mediante un rombito denominado
relación.
Las entidades y las relaciones son los elementos principales del diseño conceptual.
1. ENTIDAD
Existe un atributo especial denominado clave, que se interpreta gráficamente con un círculo
relleno. Se trata del elemento que identifica de manera unívoca a la entidad.
Puede haber más de un atributo clave. En este caso el diseñador debe de escoger cual va a
ser la clave principal, el resto serán claves candidatas.
Es obligado que toda entidad tenga un atributo clave principal. Si por falta de información no
tuviéramos un atributo clave creariamos una clave subrogada.
Este atributo subrogado se usa muchísimo y aún existiendo un clave principal legítimo en
muchas ocasiones usaremos un atributo subrogado. (ejemplo banco)
La clave principal puede estar compuesta por dos o más atributos.
*Cuando este sucede se suele usar un atributo subrogado
Características de atributo clave:
- No permite repetidos
- No permite datos nulos
- Debe de identificar de forma unívoca cada elemento de la entidad
- La clave debe de ser mínima, o sea, debe de estar formada por el menor número de
elementos. OJO el mínimo no es comparativo
Ejemplo
cod_libro nombre
23 libroA
27 libroB
2. ATRIBUTO COMPUESTO
Son atributos compuestos por subatributos, un ejemplo claro sería una dirección. El
diseñador puede decidir si lo usamos o no:
Se trata de un atributo que es clave en otra entidad. A nivel de diseño no se usan, se usan a
nivel implementación del diseño.
Las claves foráneas se usan para unir tablas.
No se presentan como atributos.
4. RELACIONES
Las relaciones se representan con rombos.
Tipos de Relaciones:
- 1:1
- 1:N
- N:M
Se mira cada lado por separado suponiendo 1 para la primera entidad que vayamos a evaluar
la relación y el valor que indique el tipo de relación para la segunda.
Se representa de manera gráfica poniendo la relación sobre el rombo y añadiendo flechas en
la parte donde haya >1 (refuerzo gráfico).
5. LA CARDINALIDAD
Debe expresar los valores máximos y mínimos de la relación.
Los máximos los da la propia relación, solo hay que pensar el mínimo.
*Los 1 son restricciones que van a acotar nuestro modelo.
Ej1. Se desea modelizar un colegio para conocer los datos de los alumnos y en qué aulas
están.
*Un aula tiene entre 0 y N alumnos.
Y un alumno está como mínimo en 1 aula y como máximo en 1 aula
**Las claves principales y candidatas siguen las normas definidas anteriormente. Las
foráneas no.
**Las cardinalidades fijan los límites de las relaciones, los máximos de estas vienen dadas
por el tipo de relación.
**Cuando la cardinalidad mínima=1 equivale a una restricción que luego nos puede complicar la
implementación del modelo.
**Las claves foráneas exigen que el valor que se le asigne exista en la tabla donde la foránea
es clave
Ej2
Se intenta hacer un modelo entidad-relación para guardar los datos de facturas.
● Los datos de la empresa van a ser siempre los mismos, no sería necesario poner sus
datos (en este caso)
● Recuerda: las cardinalidades son “de al revés”.
● Las cardinalidades con mínimo 1 SON RESTRICCIONES. El motor no contemplaba
aquel factor que no tenga al menos un elemento al que se refiere la restricción.
● Al representar en tablas hay que tener en cuenta el tipo de restricciones (foreign
key)
● Tablas Maestro detalle: Conjunto de dos tablas. La segunda nos ofrece los detalles de
la primera
Observación: El total inicial y total final deberían de no existir. La ventaja de esto sería no que
tendríamos que estar actualizando la cuantía, O sea, que aquellos atributos que haya que calcular a
través de otros atributos los omitimos.
La desventaja de esta medida es que para luego analizar los datos no dan resultados exactos ( va a
haber que crear un programita que nos dé ese resultado.)
Ej3
Se desea diseñar una base de datos para una escuela. Profesores, alumnos, matriculaciones,
asignaturas…
Este modelo pretende aclarar la semántica del modelo E-R. Para esto añade jerarquías entre
entidades, añadiendo entidades débiles y dos tipos de relaciones:
1. ENTIDAD DÉBIL
Se representa con dos cuadrados concéntricos. Es aquella que depende de otra entidad para
2. LA ESPECIALIZACIÓN.
Se trata de la bifurcación de la entidad en subtipos que heredan los atributos del
“supertipo”, además de tener los suyos propios. Heredan SOLO el atributo clave.
Tipos de especialización.
Tipo disjunto: mutually exclusive. Si es uno no puede ser el otro.
Especialización total: Para indicar que los elementos de la “superentidad” tienen que
pertenecer por fuerza a uno de los subtipos se representa con una línea doble. (un una línea
simple será especialización parcial)
3. LA GENERALIZACIÓN
Es el concepto contrario a la especialización.
En este caso se trata de la unión de varias entidades en una super entidad.
Esta super entidad tiene todos los atributos de ambas subentidades
● TRUCO: La base del triángulo nos indica de dónde proceden los atributos.
4. LA EXCLUSIVIDAD (general)
Se dice que una relación es exclusiva cuando su existencia entre dos entidades implica la no
existencia de otras relaciones entre ese elemento de la entidad. (Mutually exclusive.)
5. LA EXCLUSIÓN
En la exclusión se sigue una restricción parecida a la exclusividad pero no afecta al modelo
completo si no a un elemento individual.
El profesor recibe curso X por lo que no puede impartir el curso X pero si puede impartir el
curso Y
6. LA INCLUSIVIDAD (general)
Las relaciones tienen un sentido. Indican que para tener una relación tiene que existir una
relación previa. La flecha va hacia la relación restringida, la relación entre relaciones tiene
una cardinalidad.
● Para que un profesor pueda impartir un curso tiene que haber recibido entre 3 y n
cursos.
7. LA INCLUSIÓN
Sigue la misma línea que la inclusividad, pero la relación entre relaciones afecta de manera
independiente a cada elemento de la entidad.
8. RELACIONES REFLEXIVAS
Son relaciones en las que solo interviene una única entidad.
Esto en tablas
Ej 04 Olimpiadas
Las sedes olímpicas se dividen en complejos deportivos. Los complejos deportivos se subdividen e
aquellos en los que se desarrolla un único deporte y en los polideportivos. Los complejos
polideportivos tienen áreas designadas para cada deporte con un indicador de localización (ejemp
centro, esquinaNE, etc.). Un complejo tiene una localización, un jefe de organización individual y u
área total ocupada. Los dos tipos de complejos (deporte único y polideportivo) tendrán diferentes
tipos de información. Para cada tipo de sede, se conservará el número de complejos junto con su
presupuesto aproximado. Cada complejo celebra una serie de eventos (ejemplo: la pista del estad
puede celebrar muchas carreras distintas.). Para cada evento está prevista una fecha, duración,
número de participantes, número de comisarios. Una lista de todos los comisarios se conservará
junto con la lista de los eventos en los que esté involucrado cada comisario ya sea cumpliendo la
tarea de juez u observador. Tanto para cada evento como para el mantenimiento se necesitará
cierto equipamiento (ejemplo: arcos, pértigas, barras paralelas, etc)
+ Cuando ponemos una entidad débil implica una restricción en su cardinalidad (1,x)
+ El “atributo” discontinuo indica que es un atributo calculado , o sea que no es un
atributo real.
+ Las debilidades de existencia no tienen repercusión al pasar a tabla, las de
identificación sí.
+ Las relaciones ternarias tienen que tenerla misma relación entre todos los elementos
+ Si una relación tiene atributo pasa a haber una tabla de la relación.
+ En la especificación heredan la clave de la superentidad, pero no es necesario usarla,
podemos usar una clave subrogada
Tablas (Intensión)
EQUIPAMIENTO[cod_eq, nombre]
COMISARIO[cod_comisario, nombre]
30, Ana
MONODEPORTE[cod_complejo]
POLIDEPORTE[cod_complejo]
JUEZ[cod_comisario] (para poder poner un juez, primero hay que intruducir un comisario)
30
OBSERVADOR[cod_comisario]
EVENTO_OBSERVADOR[cod_evento, cod_comisario]
EVENTO_EQUIPAMIENTO[cod_evento, cod_equipamiento, cantidad]
Ej 5. Reparto de agua
Aguas de Caraño tiene subempresas que son los distribuidores por zona, el distribuidores
tiene que ir agrandando la cartera de clientes.
Cada distribuidor tiene empleados que reparten el agua, estos clientes pueden tener varias
direcciones.
Los distribuidores necesitan saber para cada cliente que le ha comprado y cuando.
Hay dos productos de 11 y 15 litros.
Los distribuidores tienen visitas programadas por rutas.
Los distribuidores pasan cada semana, a ver a los clientes.
Por cada visita tenemos que apuntar si el cliente estaba ausente, quería agua o no la quería.
+ Si vamos a querer tener más datos de un atributo lo convertimos en entidad. (zona).
+ Si queremos darle una dimensión temporal, tenemos que usar atributos temporales
(fechas) a la relación. No siempre pero suele ser en relaciones N:M.
+ Escogí relacionar cliente con zona por su estabilidad.
+ En este caso NO se puede poner como clave el DNI del cliente ya que el mismo cliente
podría serlo de distintos distribuidores.
+ Entidades en singular!
+ El atributo “orden” de vivienda puede ir en vivienda por la relación 1:N con Ruta. Si
fuera N:M el atributo pertenecería a la relación entre ellos.”pertenece a”.
TABLA
DISTRIBUIDOR[id_distrib, nombre, NIF]
TRABAJADOR[id_trabajador, login, nombre, id_distrib]
ZONA[id_zona]
CLIENTE[id_cliente, mail, direc_factura, id_zona]
VIVIENDA[id cliente, numero, ordenRE, id_RE]
RUTAESTABLECIDA[id_RE, id_zona]
RUTAREAL[id_RR, fecha_hora_inicio, fecha_hora_fin, id_zona]
PEDIDO[id_ped]
ARTICULO[id_articulo, precio]
DISTRIBUIDOR-ZONA[id_distribuidor, id_zona, fecha_inicio, fecha_fin]
VISITA[id_cliente, id_vivienda, id_RR, id_visita, estado, ordenRR, fecha_hora, id_ped]
PEDIDO-ARTICULO[id_articulo, id_ped, cantidad, precio_real]
9. AGREGACIÓN.
Convertir una relación en una entidad. Esto se hace para diferenciar una relación ternaria y
una relación entre tres elementos.
Un conjunto de elementos constituye en sí un conjunto de elementos.
● Hay que tener en cuenta que el cambiar un dato cambiará un dato del pasado. (Esto se
usa con elementos cambiantes en el tiempo por ejemplo precio)
NORMALIZACIÓN. (wiki)
Toda tabla debe cumplir unas normas para evitar problemas en su manipulación.
Hay hasta la 6ª forma normal, que son escalonadas (son 8).
Nosotros vamos a ver las 3 primeras que son las más comunes.
LA 1ª FN (Requisitos)
- Hay 1 clave principal en funcionamiento.
- Los valores de los atributos son atómicos (Solo puede haber un dato para cada casilla)
LA 2ª FN
- Seguir la 1ª FN
- Los atributos tienen que depender completamente de la clave principal. Si se trata de
una clave no compuesta y cumple la 1° FN estará directamente en 2°FN
LA 3ª FN
- Seguir la 2ª FN
- Evitar dependencias transitivas (depende de otro atributo que no es la clave)
1. LOS DOMINIOS
Es la creación de un tipo de dato para así facilitar su modificación. Se crean en una “librería”
lo cual permite usar el mismo tipo de datos en diferentes tablas.
2. LOS ÍNDICES
El objeto del índice es mejorar o acelerar el rendimiento en las búsquedas. Es la misma idea
que el índice de un libro. Puede existir o no y será propio de la tabla.
Lo maneja el gestor de la BD y es totalmente transparente para los programas que acceden a
la BD.
NIVEL DE IMPLEMENTACIÓN O NIVEL FÍSICO:
SQL.
Persigue que haya un único lenguaje común a todos los programas clientes.
El SQL es un lenguaje declarativo, no imperativo.(java)
Los lenguajes declarativos dicen los que quieren obtener en vez de como lo quieren obtener.
Tiene 2 sublenguajes:
● DDL: Lenguaje de definición de datos. Lo usan los diseñadores para crear y borrar
estructuras.
● DML: Lenguaje de manipulación de datos. Para los programadores, actualización y
consulta.
PGAdmin
- drop: borrar
- grant all: darle todos los permisos
PRIMARY KEY
Para insertar una PK lo que hacemos es poner (en primera línea) el atributo e indicar que es
una primary key acto seguido.
Ej1 002_modificar20201112.sql
Se desean añadir dos columnas a la tabla módulo. Las columnas son ciclo y duración. Hay que
crear dominios para las variables.
*Si te equivocas una vez subida la info tienes que ir al inicio.
create domain d_ciclo as varchar(20);
create domain d_duracion as integer;
Ej2
Camba el dominio nombre a un varchar(50)
*Para cambiar el tipo de un dominio ya en uso la única forma es cambiar en cada tabla
que se haya usado (individualmente) entonces borrarlo y crear uno nuevo volviéndolo a
introducir en cada tabla.
*MEJOR: Creo el segundo dominio y luego borro y pongo DIRECTAMENTE el nuevo en
cada tabla (mongolita)
Ej3
Añade la restricción not null al dominio id:
alter domain d_id
set not null;
Ej4
Elimina la foreign de la tabla alumno
Ej5
Añade un valor por defecto al atributo ( tb se puede poner al dominio pero OJO que le
pondrá el mismo valor por defecto a todas las tablas que tengas dicho dominio)
● Hay programadores que prefieren poner FK al final del fichero de producción, esto es
porque así no tienen que tener en cuenta el orden de las tablas.
Primero hacen todas las create table y en el mismo archivo, al final, introducen las FK
con alter table
SECUENCIAS (integer)
…..........
id_provincia default nextval(‘s_codigos)
HASH
Se trata de un código de números y letras que no sigue ningún tipo de correlación. Es casi
imposible que se generen 2 hash iguales. De esta manera el hash cubre la brecha de
seguridad y por otro lado arreglan el problema de solución de claves en la unificación de
tablas.
● El fallo de este elemento es que en BD muy grandes se pierde rendimiento ya que al
motor le cuesta más buscar entre hash→ para solucionarlo cambiar a un servidor más
potente.
Para generar los hash se añade al comienzo del proyecto el “plugin”
create extension if not exist uuide_ossp;
Para implementarlos creamos un dominio (o no) que en vez de integer tenga el tipo “uuid” que
se trata de una combinación de letras y alfanuméricos predefinido:
create domain d_id uuid default uuid_generate_v4();
DML (Data Manufacturing Language)
Las acciones que se gestionan con este lenguaje es:
● CRUD: (Create, Reed, Update, Delate)
- Create: insert into tabla(atributo1, atributo2)
values(numero, ’varchar’);
- Reed: select (*) from tabla;
- Update: update tabla
set atributo = ’bbb’
where nombre = ’dfsf;
- Delete: delete from tabla
where nombre= ‘ fdfd’;
Ej03.Pantalán
Deseamos guardar en un BD info sobre los barcos de un pantalán. Cada barco tiene
matricula, eslora y propietario. El prop. tiene CIF, apellidos, teléfono y mail. Cada barco
está amarrado en una plaza, la plaza tiene un número y una longitud. Se pide:
Haz el DDL de las tablas, un fichero de inicialización, otro de meter datos y otro de
consultas.
1. DIBUJO
2. 001_inicializar.sql
drop schema public cascade;
create schema public;
grant all on schema public to postgres;
create extension if not exists "uuid-ossp";
create table propietario ( --lo ponemos primero porque luego a la ora de poner
los datos nos va a dar una imagen mas acertada de como meterlos
nombre d_nombre,
cif varchar(9) primary key,
apellido varchar(30),
telefono bigint,
email varchar(25)
);
3. 002_introduccion
insert into propietario(nombre, cif, apellido, email, telefono)
values ('Marta','44425845A','Naveira', 'martanave@gmail.com', '685468912');
4. 003_select
select * from plaza;
select * from propietario;
select * from barco;
select matricula, nombre from barco --PROYECT
order by matricula desc; --para ordenar las tuplas segun un atributo, en orden
descendente.
select *
from plaza p left join barco b
on p.matricula=b.matricula
join propietario pr
on pr.cif=b.cif;
● El check solo comprueba con valores de la propia FILA o con valores que yo le
introduzca.
● A la hora de poner los datos si usamos(uuid) hash es un follo, al meter los datos
en el elemento que tiene el atributo”problematico” como foreign key → Hay que
poner el hash como uno mas
ALGEBRA RELACIONAL
Las operaciones que podemos hacer con las tablas (son 4). La tablas creadas son virtuales, no
están almacenadas en el disco.
OPERACIONES:
- SELECCIÓN: Coger las filas de una tabla (SELECT)
*:coge todos los atributos (columnas)
- UNIÓN: Consiste en unir dos tablas para conseguir una nueva tabla. La unión exige
que los tipos de datos de la columna converjan. A esto se le llama que las tablas sean
homogéneas. No es necesario que las columnas se llamen igual pero si que sean del
mismo tipo (en el mismo nombre)
● La tabla tendrá los mismos atributos que las iniciales pero tendrá más filas
(AUN NO SABEMOS HACERLO)
- JOIN:
+ Inner Join: Solo salen en la tabla aquellas tuplas relacionadas, los artículos con
atributos, coincidentes.
+ Outer Join: Salen todas las filas de la tabla que se elija, la que se pongan
primero, estén relacionadas o no. Existe el LEFT join y el RIGHT join
Ej en 003_select.sql Pantalán
select *
from plaza p left join barco b
on p.matricula=b.matricula
join propietario pr
on pr.cif=b.cif;
● Cuando se unen más de dos tablas, si se mezcla left join con inner join hay que usar ()
para indicar que tipo de join se usa primero entre que tablas.
● Lo normal es combinar las diferentes operaciones para así obtener el resultado
deseado.
EJERCICIO REPASO.
Comercio.
Las tiendas venden artículos digitalizados usando un cod de barras. El cod puede ser propio
del fabricante o de la tda descripción precio y un IVA
Para facilitar la gestión de los art. se agrupan por tallas y colores.
Además las tdas de comercio trabajan tb con articulos compuestos, un art compuesto por
varios art. El art compuesto tiene un precia que suele ser inferior al de la suma de los art,
tiene descripcion cod y IVA
*No nos importan las cantidades en este modelo
001.inicializar
drop schema public cascade;
create schema public;
grant all on schema public to postgres;
create extension if not exists "uuid-ossp";
);
);
002.insertar.sql
INSERT INTO color(
id_color, nombre)
VALUES (1, 'azul');
003.consultas.sql
--consultas
--nombres precios e iva de todos los artículos
select a.descripcion, a.iva, a.precio
from articulo a; --los alias sirven para acortar y ayudar a. (control+espacio),
si lo usas luego tienes que usarlo
--las descrip, precio talla y color de todos los arts JOIN LEFT ENTRE 3 TABLAS
select a.descripcion, a.precio, t.id_talla , c.nombre
from articulo a
left join talla t
on a.id_talla = t.id_talla
left join color c
on a.id_color = c.id_color;
APUNTACOS!
● Exclusión (independiente al modelo), exclusividad (afecta al modelo completo),
inclusión e inclusividad : relaciona relaciones
LINKS DE INTERÉS
https://bbdd.codeandcoke.com/apuntes:diseno