Sunteți pe pagina 1din 1

E/R Atributo Nombre

Telefonos
Telefonos
Leyenda multievaluado
Cliente DNI
Entidad relación
Titular, Autorizado, ... Tipo
N:M = Ratio de cardinalidad: Cada cliente
Atributo puede tener varias cuentas; cada cuenta
tener N:M
puede tener varios clientes. Todos los
clientes tienen que tener alguna cuenta
(1, 1) = Notación de participación: (1,1)
Cada apunte tiene que pertenecer Apunte hay (0,N)
a una y sólo a una cuenta Cuenta

Número Valor Código Tipo de Ahorro, a Plazo Fijo, etc.


De E/R a Relacional

Cliente Telefonos Relacional* Normalización


Cliente Telefono Esta configuración responde a 1FN : No existen atributos con valores multievaluados.
DNI Nombre
un E/R donde Tener es N:M 2FN : 1FN + No hay dependencias funcionales con parte de la clave.
Tener Cuenta Apunte 3FN : 2FN + No hay dependencias funcionales transitivas.
Cliente Cuenta Tipo Código Tipo Número Cuenta Valor FNBC : Todas las dependencias funcionales dependen de la clave.
De Relacional a SQL

4FN : Todas las dependencias multievaluadas (X →→ Z) dependen de la clave.


5FN : Todas las dependencias de join dependen de la clave.
X → Y : X (clave ajena) depende de Y (clave primaria) Dependencia funcional : Y depende funcionalmente de X (X → Y) si X determina
totalmente el valor de Y; ejemplo: DNI → Nombre
SQL Lenguaje de definición* Dependencia funcional transitiva: si ocurre que X → Y e Y → Z
create table CUENTA ( ejemplo: DNI → Año → Edad
CODIGO int primary key check (CODIGO>0),
TIPO varchar(20) not null); Diseño físico
Bajar tiempo de respuesta de preguntas y transacciones; mejorar rendimiento general.
create table TENER ( ANÁLISIS DECISIONES
CLIENTE varchar(9), ►Recopilar estadísticas: Preguntas, ►Reconsiderar claves ►Crear índices
CUENTA int, transacciones, actualizaciones, ... sobre ►Precalcular joins* ►Desnormalizar tablas*
TIPO varchar(20) not null, rendimiento. ►Particionar verticalmente/horizontalmente/
primary key (CLIENTE, CUENTA), ►Analizar preguntas: mixto*
foreign key (CLIENTE) references CLIENTE(DNI), *necesitan triggers para mantener consistencia
EXPLAIN PLAN
foreign key (CUENTA) references CUENTA(CODIGO));

create index CUENTA_TIPO_IDX on CUENTA(TIPO); Triggers


create or replace trigger NOTIFICAR_HACIENDA_TR
drop index CUENTA_TIPO_IDX; after update on APUNTE for each row when (new.VALOR>5000)
drop table TENER; begin
Poblar

insert into APUNTE_SOSPECHOSO VALUES (:new.CUENTA,


SQL Lenguaje de manipulación* :new.NUMERO,:new.VALOR, "Más 5000 EUR", sysdate);
end; / ← Notar que / y no ; es el separador !!!
insert into CUENTA(CODIGO, TIPO)
values (9872, 'Cuenta Corriente');
create or replace trigger EVITAR_APUNTES_SIN_VALOR_TR
before insert or update on APUNTE for each row
update CLIENTE set NOMBRE='J. Pérez'
when (new.VALOR<=0)
where DNI='12345678A';
begin
:new.NUMERO = null;
end; /
delete from CLIENTE where NOMBRE='Juan Perez';
Interrogar

SQL Lenguaje de interrogación


-- DNI del cliente Juan Perez
select DNI from CLIENTE where NOMBRE='Juan Perez'; Transacciones
Transacción: conjunto de sentencias que se ejecutan todas (commit) o ninguna
-- TIPOS de cuentas (rollback).
select distinct TIPO from CUENTA; ACID: atómicas, consistentes, aisladas, durables
Bloqueo (lock): técnica pesimista, ayuda plan ejecución transacciones ACID.
-- Clientes #CC > 3 Usuario bloquea el acceso a otros usuarios a un elemento del SGBD.
select C.DNI from CLIENTE C, TENER T, CUENTA A Deadlock: doble bloqueo permanente
where C.DNI=T.CLIENTE and T.CUENTA= Inanición: un usuario nunca consigue el recurso
A.CODIGO and A.TIPO='Cuenta Corriente' Livelock: no están bloqueados, pero nunca consigue el recurso
group by C.DNI having count(*) > 3; BLOQUEO EN ORACLE
►RX o modo exclusivo : update / delete / insert / lock table
-- Clientes con nombre único ordenados de la Z a la A <tabla> in row exclusive mode
create view DNI_CLIENTE_UNICO as ►RS o modo compartido (solo lectura): select ... from <tabla> for
select NOMBRE, DNI from CLIENTE C1 update / lock table <tabla> in row share mode / set
where not exists transaction read only
(select NOMBRE from CLIENTE C2 ►Fin bloqueo commit (transacción finalizada; persistir cambios) o rollback
where C1.NOMBRE = C2.NOMBRE and (abortar transacción; deshacer cambios)
C1.DNI <> C2.DNI)
order by NOMBRE desc; Interacción con BD en Java
Programa JDBC JDBC Driver
-- Clientes sin cuentas (Java) <<librería>> <<driver>> Protocolo DB
select NOMBRE from CLIENTE propietario BD

S-ar putea să vă placă și