Está en la página 1de 24

lOMoARcPSD|34573484

BDD resumen FULL

Base de datos (Universidad Nacional de La Matanza)

Studocu no está patrocinado ni avalado por ningún colegio o universidad.


Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)
lOMoARcPSD|34573484

RESUMEN: BASE DE DATOS – PRIMER PARCIAL


INTRODUCCIÓN: BASE DE DATOS Y SISTEMA DE GESTIÓN DE BASE DE DATOS
BASE DE DATOS:
Es un conjunto de datos relacionados entre sí. Representa algún aspecto del mundo real. Es un conjunto de
datos lógicamente coherente, con cierto significado inherente.
SISTEMAS DE GESTIÓN DE BASE DE DATOS:
Es un software que provee acceso a la información a un alto nivel de abstracción. Es un conjunto de
programas que permite a los usuarios crear y mantener una base de datos.
TIPO DE USUARIOS DE UN SGBD:
❖ ADMINISTRADORES (DBA): es quien se encarga de autorizar el acceso a la base de datos, de coordinar y
vigilar su empleo, y de adquirir los recursos necesarios de software y hardware.
❖ DISEÑADORES DE BASE DE DATOS: Se encargan de identificar los datos que se almacenaran en la base
de datos y de elegir las estructuras apropiadas para representar y almacenar dichos datos.
❖ USUARIO FINALES: Son las personas que necesitan tener acceso a la base de datos para consultarla,
actualizarla y generar informes.
❖ ANALISTA Y PROGRAMADORES DE APLICACIONES: Los analistas determinan los requerimientos de los
usuarios finales y desarrollan especificaciones para transacciones programadas que satisfagan dichos
requerimientos. Los programadores implementan estas especificaciones en forma de programas y luego
prueban, depuran, documentan y mantienen esas transacciones programadas.
CARACTERÍSTICAS DEL SGBD:
❖ CONTROL DE REDUNDANCIA: Se evita realizar doble trabajo, haciendo la misma actualización varias veces y en
varios lugares desperdiciando almacenamiento. Los datos pueden tornarse inconsistentes.
❖ RESTRICCIÓN DE LOS ACCESOS NO AUTORIZADOS: El SGBD debe contar con un subsistema de seguridad y
autorización que permita al DBA crear cuentas y especificar restricciones para ellas.
❖ CUMPLIMIENTO DE LAS RESTRICCIONES DE INTEGRIDAD: Restricciones de integridad que deben cumplir los
datos.
❖ RESPALDO Y RECUPERACIÓN: Se debe contar con recursos para recuperarse de fallos de hardware o de software.
FUNCIONES DE SGBD:
❖ CONSULTA Y ACTUALIZACIÓN: Consiste en un conjunto de herramientas que permite extraer, manipular y
modificar la información almacenada en la base de datos.
❖ MANTEAMIENTO DE ESQUEMAS: Es la descripción de la estructura de la información almacenada en ella.
❖ MANEJO DE TRANSACCIONES: Una transacción es un programa de aplicación, que accede y actualiza una parte
también generalmente pequeña de la base de datos.
ARQUITECTURA DE TRES CAPAS:
❖ NIVEL INTERNO: Esquema interno. Describe la estructura física de almacenamiento de la base de datos. El
esquema interno emplea un modelo físico de almacenamiento de los datos y describe todos los detales para su
almacenamiento, así como los caminos de acceso para la base de datos.
❖ NIVEL CONCEPTUAL: Esquema conceptual. Describe la estructura de toda la base de datos para una comunidad
de usuarios. El esquema conceptual oculta los detalles de las estructuras físicas de almacenamiento y se
concentra en describir entidades, tipos de datos, vínculos, operación de los usuarios y restricciones.
❖ NIVEL EXTERNO O DE VISTAS: Esquemas externos o vistas de usuario. Describe la parte de la base de datos que
interesa a un grupo de usuarios determinado y oculta a ese grupo el resto de la base de datos.
CORRESPONDENCIA (MAPPING):
Proceso de transformar solicitudes y resultados de un nivel a otro
INDEPENDENCIA CON RESPECTO A LOS DATOS:
❖ INDEPENDENCIA LÓGICA CON RESPECTO A LOS DATOS: Capacidad de modificar el esquema conceptual sin tener
que alterar los esquemas externo ni los programas de aplicación.
❖ INDEPENDENCIA FÍSICA CON RESPECTO A LOS DATOS: Capacidad de modificar el esquema interno sin tener que
alterar el esquema conceptual (o los externos).

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

DER: DIAGRAMA ENTIDAD RELACIÓN


ELEMENTOS DE UN DER:
A. ENTIDAD: Colección de objetos de los que necesitamos almacenar o recopilar datos.
B. ATRIBUTOS: características que describen y distinguen a cada objeto incluido en la colección.
o CLAVE: Determinan unívocamente a la entidad dentro del conjunto de entidades. Los atributos
clave compuestos se toma como una única clave y no pueden considerarse de forma aislada.
o CALCULADO: Demandan un cálculo a partir de otros atributos para determinar su valor.
o MULTIVALUADO: Cuentan con más de un valor para una instancia de la entidad a la cual
pertenecen.
o COMPUESTOS: Agrupan atributos.
o EN RELACIONES: Son inherentes a la relación y describen a la misma.
o CLAVE EN RELACIONES: Se usa cuando queremos que el par de objetos de las dos entidades
participantes de la relación se diferencien por cada vez que se genera la acción que implica dicha
relación.
C. RELACIONES: Acción, vinculo, asociación o interacción entre entidades. Definen las acciones entre una
entidad y la otra. Pueden tener una cardinalidad de NN, N1, 1N o 11. Hay tres tipos de grado.
o UNARIO: Se relacionan con la misma entidad. Puede ser 11, 1N o NN.
o BINARIA: Se relacionan dos entidades. Puede ser 11, 1N, N1, NN.
o TERNARIA: Se relacionan tres entidades. La acción necesita de uno o más objetos de dos entidades
para realizar la acción sobre una tercera. Puede ser 111, 11N, 1NN, NNN.
D. OPCIONALIDAD: Se da cuando alguno de los elementos intervinientes puede estar relacionado con
ninguno o más, o cero o más elementos de la segunda entidad. Se marca del lado de la relación que es
opcional.
E. ENTIDADES DÉBILES: Una entidad depende de otra para existir, no pueden identificase por si solas. La
clave parcial que tienen las entidades débiles sirve para diferenciarse de las demás instancias dentro
de la misma entidad, pero no sirve para identificase unívocamente frente al resto de entidades. Una
entidad débil se identifica unívocamente con los atributos clave de la entidad fuerte y la clave parcial
que posee.
F. JERARQUÍAS Y HERENCIA: Se usa cuando dos o más entidades tienen ciertos atributos en común y
otros tantos específicos de cada una de ellas. Las subentidades no poseen atributos identificadores,
sino que los heredan de la supraentidad.
o SOLAPAMIENTO: Se da dentro de las jerarquías y se refiere a si un elemento puede ser parte de
otro tipo de entidad (con solapamiento) o no (sin solapamiento).
o PARTICIÓN: Cantidad de elementos que forman parte de una jerarquía. Es independiente de
solapamiento. Hay partición total cuando toda supraentidad tiene al menos una subentidad que la
especifica. Partición parcial hay cuando puede existir una supraentidad si subentidad alguna.
o DISCRIMINANTE: es un atributo que va diferenciando a que subentidad pertenece cada elemento.
Se usa cuando hay partición total sin solapamiento.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

MODELO RELACIONAL
⧫ RELACIONES: Es un conjunto de instancias del mismo tipo definido en base a los atributos que la
componen. Tablas que se describen a través de los atributos o campos. Las instancias que las
componen se las denomina tuplas o filas. Las entidades pasan a ser relaciones.
⧫ ATRIBUTOS: describen y diferencian las instancias entre las distintas relaciones. Se escriben al lado del
nombre de la relación, entre paréntesis.
⧫ CLAVE PRIMARIA: Se subrayan los atributos que la componen con una sola línea simple.
⧫ CLAVE FORÁNEA: Se subrayan los atributos que la componen con una sola línea punteada.
⧫ CLAVE PRIMARIA Y FORÁNEA: Se subrayan los atributos que la componen con doble línea, una simple y
una punteada.
⧫ RELACIONES UNARIAS 11/1N/N1: Los atributos clave se marcan solo como PRINCIPAL y se pone como
FORÁNEA la misma PK pero con otro nombre. Esta clave foránea es la misma que la PK pero con otro
nombre y hace referencia a la clave de la misma relación.
⧫ RELACIONES UNARIAS NN: Se crea una nueva relación y como atributos se pone la misma clave dos
veces (una se llama igual y la otra se cambia de nombre) como PRINCIPAL Y FORÁNEA.
⧫ RELACIONES BINARIAS 11: Se elige cualquiera de las dos entidades para agregar la PK de la otra
relación COMO FORÁNEO. Si hubiera opcionalidad en solo un extremo se pasa la PK como foránea a la
relación que NO es opcional. Si la opcionalidad esta en ambos extremos, se elige uno de los dos.
⧫ RELACIONES BINARIAS 1N/N1: No se tiene en cuenta la opcionalidad. Se pasan los atributos PK de la
relación 1 y se ponen como FORÁNEOS en la relación N.
⧫ RELACIONES BINARIAS NN: Se crea una nueva relación que tenga como atributos FORÁNEOS Y
PRINCIPALES las PK de ambas relaciones, y como atributos normales los atributos de la relación
misma. Y solo como PRINCIPAL la PK de la relación, si tuviese.
⧫ ATRIBUTOS COMPUESTOS: Se elimina ese atributo agrupador, y todos los atributos que componen ese
atributo se agregan de forma normal y como cualquier otro atributo, a la relación de la que forman
parte.
⧫ ATRIBUTOS MULTIVALUADOS: Se lo transforma en una entidad débil y luego se transforma esa entidad
débil.
⧫ ATRIBUTOS CALCULADOS: No se modelan.
⧫ ENTIDAD DÉBIL: Se crea una nueva relación para esta entidad. La clave parcial de esta entidad queda
como FORÁNEA y los atributos clave de la entidad padre pasan como FORÁNEA Y PRINCIPAL.
⧫ RELACIONES TERNARIAS: Siempre se crea una nueva relación. La diferencia esta en que la clave de la
entidad que tiene como cardinalidad 1, solo es FORÁNEA, mientras que las PK de las entidades N son
PRINCIPALES. Siempre necesito, como mínimo, dos claves PRINCIPALES Y FORÁNEAS. Si tuviera
relaciones 111, elijo dos claves que sean PRINCIPAL Y FORÁNEA y la otra solo es FORÁNEA. Si tuviera
11N, la clave N es PRINCIPAL Y FORÁNEA y después elijo una de las de 1 para que también sea
FORÁNEA Y FORÁNEA, la que queda es solo FORÁNEA.
⧫ JERARQUÍAS: La partición y el solapamiento no inciden en la transformación. El atributo discriminante
se agrega como un atributo más en la supraentidad. Se crea una relación con la SUPRAENTIDAD y una
relación diferente por cada SUBENTIDAD. La clave en la SUPRAENTIDAD es una clave PK normal. En las
SUBENTIDADES, se agregan los atributos clave de la supraentidad como PRINCIPAL Y FORÁNEA.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

DEPENDENCIAS FUNCIONALES Y NORMALIZACIÓN


DEPENDENCIA FUNCIONAL:
Restricción entre dos conjuntos de atributos de una relación. PARA UN MISMO VALOR DE X SE DETERMINA
UN MISMO VALOR DE Y. No pasa al revés.
CLAVE:
La clave es un conjunto que determina a todos los atributos y no hay ningún subconjunto de esa clave que
siga determinando a todos los atributos (minimalidad).
SUPERCLAVE:
Se cumple que determina a todos, pero el conjunto tiene un subconjunto que sigue determinando a todos
DEMOSTRACIONES DE ARMSTRONG:
1) Demostración de la Reflexividad: Supongamos que Y C X y que existen dos tuplas t1 y t2 en algún
ejemplar de la relación r de R tales que t1[X]=t2[X]. Entonces t1[Y]=t2[Y] porque Y C X; por lo tanto,
debe cumplirse X→Y en r.
2) Demostración del Aumento (por contradicción): Supongamos que X→Y se cumple en algún ejemplar r
de R, pero que XZ→YZ no se cumple. En tal caso, deben existir dos tuplas t1 y t2 en r tales que
(1) t1[X]=t2[X],
(2) t1[Y]=t2[Y],
(3) t1[XZ]=t2[XZ] y
(4) t1[YZ]<>t2[YZ]. Esto no es posible porque a partir de (1) y (3) se deduce
(5) t1[Z]=t2[Z], y a partir de (2) y (5) se deduce
(6) t1[YZ]=t2[YZ], lo que contradice (4).
3) Demostración de la Transitividad: Supongamos que se cumplen
(1) X→Y y (2) Y→Z en una relación r.
Entonces, para cualesquier dos tuplas t1 y t2 en r tales que t1[X]=t2[X], debemos tener
(3) t1[Y]=t2[Y] (por la suposición de (1)), y por tanto también debemos tener
(4) t1[Z]=t2[Z], (por (3) y a partir de la suposición (2)); por lo tanto, se debe cumplir X→Z en r.
4) Demostración de la Descomposición:
(1) X→YZ Dada
(2) YZ→Y Por Reflexividad (donde Y C YZ)
(3) X→Y Transitividad entre 1 y 2
5) Demostración de la Unión:
(1) X→Y Dada
(2) X→Z Dada
(3) X→XY Aumento con X en 1 (XX=X)
(4) XY→YZ Aumento con Y en 2
(5) X→YZ Transitividad entre 3 y 4
6) Demostración de la Pseudotransitividad:
(1) X→Y Dada
(2) WX→WY Aumento con W en 1
(3) WY→Z Dada
(4) WX→Z Transitividad entre 3 y 2

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

CLAUSURAS:
❖ CLAUSURA DE UN CONJUNTO DE DEPENDENCIAS: Todas las dependencias posibles que se pueden
inferir de F.
❖ CLAUSURA DE UN CONJUNTO DE ATRIBUTOS: Conjunto de atributos que se pueden determinar con un
atributo X.
EQUIVALENCIA ENTRE DOS CONJUNTOS DE Df:
Dos conjuntos son equivalentes cuando sus clausuras son iguales. teniendo F y G, F puede inferirse en G (G
cubre a F) y G puede inferirse en F (F cubre a G).
CONJUNTO MÍNIMO DE Df (Fmin):
Es un conjunto de dependencias funcionales sin redundancia. Puede haber más de una cobertura minimal.
Todas las dependencias tienen un solo atributo en la parte derecha. no se puede reemplazar la Df XY ³ A
por Y ³ A y que siga siendo una Df equivalente. No se puede quitar ninguna Df y seguir teniendo un
conjunto equivalente. Fmin no tiene Df triviales.
FORMAS NORMALES:
❖ 1FN: Admite atributos con valores atómicos. No admite los atributos multivaluados, los atributos
compuestos ni sus combinaciones. Si en una Df, X SI pertenece a la clave candidata entonces esa Df está
en 1FN. Todas las Df son 1FN
❖ 2FN: Se basa en el concepto de dependencia parcial. Si en una Df, X NO pertenece a una clave, entonces
esa Df está en 2FN. 2FN no admite dependencias parciales. Esta en 2FN cuando X no es superclave, Y no
es primo o X no pertenece a ninguna clave.
❖ 3FN: Se basa en el concepto de dependencias transitivas. Si hay Df transitivas, NO es 3FN. La Df es 3FN si
X no es superclave o Y es primo.
❖ FNBC: una Df es FNBC cuando X es superclave.
ALGORITMOS DE NORMALIZACIÓN:
ALGORITMO DE 3FN: Asegura que no hay perdida de Df ni de Información.
ALGORITMO DE FNBC: Asegura la no perdida de información, pero puede haber perdida de Df.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

ALGEBRA RELACIONAL:
DADAS LAS RELACIONES R(AB) Y S(AC)
MÍNIMOS EN AR:
El Atributo B de menor valor
máximosR ÿ πA (σ ((2) > (4) (R x R))) // Obtengo todos los que son mayores a alguien

Rta ÿ (πA (R) - máximosR) // Obtengo el/los que sean más chicos que el resto.

MÁXIMOS EN AR:
El atributo B de mayor valor
mínimosR ÿ πA (σ ((2) < (4) (R x R))) // Obtengo todos los que son menores a alguien

Rta ÿ (πA (R) - mínimosR) // De todos los que tengo, saco los más chicos que el resto.

POR LO MENOS DOS:


Atributo A que tenga como mínimo 2 del atributo B.
Rta ÿ( σ (1) = (3) AND (2) <> (4) (R x R))
// Obtengo las tuplas que se refieren al mismo id, pero distinto atributoObjetivo.

EXACTAMENTE 2:
Atributo A que tenga exactamente 2 del atributo B.
porLoMenos2 ÿ ( σ (1) = (3) AND (2) <> (4) (R x R))
masDe2 ÿ (σ (1) = (3) AND (1) = (5) AND (2) <> (4) AND (2) <> (6) AND (4) <> (6) (R x R x R))
Rta ÿ masDe2 – porLoMenos2

MAS DE DOS:
Atributo A que tenga más de 2 del atributo B. Mas de dos se puede interpretar como 3 o más. y se hace el mismo
procedimiento que en porLoMenos2, pero con tres tablas.
porLoMenos2 ÿ ( σ (1) = (3) AND (2) <> (4) (R x R))
porLoMenos3 ÿ (σ (1) = (3) AND (1) = (5) AND (2) <> (4) AND (2) <> (6) AND (4) <> (6) (porLoMenos2 x R))

COCIENTE:
Todos los atributos A que se relacionan con el atributo C.
todosLosA ÿ πA (R)
todosLosC ÿ πC (S)
todasLasPosibilidades ÿ (R x S)
noExisten ÿ todasLasPosibilidades – S // S son las relaciones entre A y C que si existen.
Rta ÿ todasLasPosibilidades - noExisten

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

OPERACIONES DEL ALGEBRA:


UNIÓN COMPATIBLE: Dos conjuntos R y S dados, son compatibles cuando tienen igual grado(misma cantidad
de atributos) y mismo dominio (mismo tipo de dato). Cuando son compatibles se dice que son conjuntos
unión compatible.
Copia una relación con menos cantidad de atributos, pero con
SELECCIÓN σ todas las tuplas que contiene. Genera una nueva relación.
Elimina repetidos.

OPERADORES DE ALGEBRA RELACIONAL


UNARIAS Realiza una reducción de tuplas evaluando su contenido en
base a una condición. El conjunto que se genera tiene la misma
PROYECCIÓN π cantidad de atributos, pero con tuplas desde 0 (conjunto vacío)
hasta la misma cantidad que la relación original.
Asigna una relación a otra nueva. Si se quisiera cambiar los
ASIGNACIÓN ± nombres de los atributos se hace S(mno) ± R(abc)
Produce un nuevo conjunto que contiene todas las
PRODUCTO combinaciones posibles que surgen de asociar cada uno de los
CARTESIANO ⨯ elementos de R con S. Se genera una nueva relación. Es
conmutativa.
Se asocian dos relaciones según una condición implícita. Iguala
las tuplas que tienen el atributo con el mismo nombre en R y
JUNTA
NATURAL ⨝ en S. Se eliminan las columnas que tengan nombre repetido. Se
crea una nueva relación con los atributos de la primera
relacion mas los distintos de la segunda.
Es exactamente igual que la natural, pero hay que especificar la
JUNTA THETA ⨝ condición por la cual se va a juntar las relaciones.
BINARIAS Unir dos conjuntos en uno solo, eliminando tuplas repetidas.
UNIÓN ∪ Se obtiene una nueva relación. Es conmutativa y asociativa.

OPERADORES DE ALGEBRA DE
R y S deben tener el mismo grado y mismo dominio.
Obtener un conjunto compuesto por las tuplas que están en R
y además están en S (tuplas exactamente iguales). El nombre

CONJUNTOS
INTERSECCIÓN de las columnas se define por el primer conjunto. Si no hay
tuplas iguales, devuelve un conjunto vacío. Es conmutativa y
asociativa. R y S deben ser unión compatible
El conjunto resultante son los elementos que están en R, pero
no están en S. Se genera una nueva relación. Es anti
conmutativa, si se cambia el orden se obtiene otro resultado y
DIFERENCIA - no es asociativa.
R y S deben ser unión compatible: mismo grado y mismo
dominio.
Teniendo una relación (T) que indica como se relaciona R y S,
OPERADOR DE ALGEBRA

/ genera un conjunto donde aquellos elementos de R se


relacionan con TODOS los elementos de S. Digo que es ternaria
RELACIONAL

porque necesito de una tercera relación (T) para saber las


"TERNARIA" COCIENTE relaciones que existen entre R y S. pero sigue siendo binaria.
En caso de no haber ningún elemento de R que se asocie con
% todos los de S se genera un conjunto vacío.
R%S = T, grado(R) > grado(S).
Atributos de R incluidos en los atributos de S.
EQUIVALENCIA ENTRE OPERADORES
Junta Natural / Junta Theta:
R ± A ⋈ B // R ± Π a1,a2,b1,& (σ <condicion> (A X B))
Intersección:
R ± A ∩ B // R ± A - (A - B)
División:
R ± A / B // R ± Π a1, a2, &. an (A) - Π a1, a2, &. an (Π a1, a2, &. an (A X B) - A)

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

SQL:
VISTAS: Son consultas almacenadas en la base de datos con un nombre, no contienen información, sino que
devuelven el resutlado de la consulta la cual se ejecuta cada vez que la vista es invocada.
Se usan principalmente para almacenar consultas que utilizamos con frecuencia y para restruingir permisos sobre
ciertos datos.

TRUNCATE: Permite eliminar todas las filas de una tabla. La diferencia con el delete es que truncate elimina todas las
tablas y no algunas, no permite ROLL BACK y libera el espacio físico que ocupan las filas.

STORED PROCEDURES: es un programa que esta almacenado físicamente en una base de datos. Se ejecutan
directamente en el motor de base de datos. Poseen acceso directo a los datos que necesitan manipular y solo
necesitan enviar sus resultados de regreso al usuario. Se usan para procesos complejos o grandes que podrían
requerir ejecutar varias sentencias SQL. tienen un nombre y se ejecutan a petición del usuario/cliente. Se puede
llamar a un SP dentro de otro.
Ventajas: Reutilizacion de código, mayor redimiento y trafico de red.
Desventajas: lógica de la aplicación termina distribuida parte en la BD y parte en el código de la aplicación, Aumenta
la dependencia del repositorio de datos.

TRIGGERS: se ejecutan por algún evento de la BD. Se usan para hacer validaciones de datos. Se pueden definir varios
triggers del tipo FOR/AFTER para un mismo objeto y un mismo evento pero para INSTEAD OF solo se puede definir
uno para un mismo objeto y evento. Dentro del trigger se pueden usar las tablas inserted y deleted, no existe
updated.

FUNCIONES: Las funciones siempre retornan un valor como resultado. Se usan en las sentencias SELECT. Las
funciones escalares devuelve un único valor y las funciones de tabla devuelven una tabla, tabla de varias
instrucciones (se define una tabla y se carga con datos para retornarla como resultado) o tabla en línea (solo
devuelve el resultado de una consulta).

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

COSTOS: Se mide en accesos a bloques. El bloque es la mínima unidad de almacenamiento y lectura. Cada
vez que el SGBD accede a disco, lee o escribe N bloques.
COSTO DE ACCESO AL ALMACENAMIENTO SECUNDARIO: Es el costo de buscar, leer y escribir bloques de datos
generalmente en disco.
COSTO DE ALMACENAMIENTO: costo de almacenar cualquier dato intermedio apra poder ejecutar una consulta.
COSTO DE COMPUTO: costo de ejecutar las operaciones de una consulta.
COSTO DE USO DE MEMORIA: costo relacionado con el uso de la memoria para poder llevar a cabo la consulta.
COSTO DE COMUNICACIÓN: Costo de enviar los datos de resultado de donde se origino la consulta.

TIPO DE COSTOS:
COSTO DE ESCRITURA (CE): COSTO DE LECTURA (CL): cuando COSTO TOTAL (CT): CE + CL
Cuando escribimos bloques a leemos bloques del disco.
disco.

TABLAS EMPAQUETAS: esta empaquetada cuando ocupa la menor cantidad de bloques posibles.

VARIABLES DE LA ESTIMACION DE COSTOS: siendo 8r9 el nombre de una tabla.


Tr: cantidad de tuplas de la V (A, r) o I (A, r): Variabilidad o CL: costo de lectura
relación R. imagen del atributo A en la CE: costo de escritura
Br: Cantidad de bloques de la instancia de relación R. Es la M: cantidad de bloques de
relación R. cantidad de valores distintos que memoria disponibles.
FBr: Factor de bloqueo. Indica la tiene A en r(R). TB: tamaño del bloque.
cantidad de tuplas por bloque de Lr: Longitud máxima de una tupla
la relación R. de la relación R.

Tr: cantidad de tuplas de la Br: Cantidad de bloques de la FBr: Factor de bloqueo. Indica la
relación R. relación R. cantidad de tuplas por bloque de
la relación R.
tamanioDeNtuplas tamanioDeNtuplas
tamanioDeUnbloque
ý�㕎þ�㕎ÿ�㕖ĀýþĀÿ�㕎ÿþāý�㕎 ý�㕎þ�㕎ÿ�㕖ĀýþĀÿ�㔵ýĀĂþþ
ý�㕎þ�㕎ÿ�㕖ĀýþĀÿ�㕎ÿþāý�㕎
PROCESAMIENTO DE CONULTAS:
I. se valida la sintaxis y semántica de la consulta SQL.
II. La consulta validad es convertida a AR.
III. El AR obtenido se conviente en árbol canocnico.
IV. El SGBD determina el algoritmo a utilizar en cada operador del árbol.

PLAN DE EJECUCION: es el camino mas eficiente que encontró el SGBD para ejecutar una consulta.

HEURISTICAS: Son reglas que generalmente ayudan al SGBD a optimizar las consultas y tomar el camino mas
eficiente.
1. EJECUTAR OPERACIONES DE SELECCIÓN TAN PRONTO COMO SEA POSIBLE.
2. EJECUTAR PRIMERO LAS SELECCIONES MAS RESTRICTIVAS (LAS QUE PRODUCEN LA MENOR CANTIDAD DE
TUPLAS).
3. UTILIZAR JUNTAS EN LUGAR DE PRODUCTOS CARTESIANOS.
4. EJECUTAR PROYECCIONES TAN PRONTO COMO SEA POSIBLE PERO NO DIRECTO SOBRE LAS TABLAS.

ESTADISTICAS: Información estadisiticas sobre la distribución de los valores de una o mas columnas de una tabla
dentro de la base de datos. Se usa para estimar la cardinalidad del resultado de una operación.
▪ nr: número de tuplas de la relación R. ▪ σA = V(r): numero de filas que satisfacen la condición
▪ br: número de bloques de la relación R. (nr / V (A, r)). Lo ideal seria que este valor sea 1.
▪ fr: Factor de bloqueo. Indica la cantidad de tuplas por ▪ lr: tamaño de una tupla de la relación R.
bloque de la relación R. ▪ mínimo/ máximo valor.
▪ cantidad de valores nulos.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

INDICES: son estructuras generadas sobre una clave de búsqueda para una tabla o vista. Se puede crear multiples
índices sobre la misma tabla/vista y cada índice contendrá uno o varios atributos. se deberían crear en tablas que
tengan una imagen grande. Las PK siempre tienen un índice asociado. Lo campos que se ponen en el where, order by
o group by son candidatos a índices. Los valores NULL no están indexados. Cuando se actualiza la tabla se tiene que
regenerar el índice. Se pueden crear sobre una o varias columnas de una tabla. Se usan frecuentemente en los
campos de búsquedas, campos donde sus valores no se modifican demasiado, tienen una imagen muy grande.
Ventajas: Aceleran el tiempo de respuesta de las consultas.
Desvenajas: ocupan espacio físico, retardan las operación de actualización de datos porque se regera el índice,
tienen un costo de lectura adicional asociado.
Se clasifican en:
I. INDICES ORDENADOS (cluster o agrupammiento): Se utilizan en atributos que tengan una inserción en forma
ordenada. La tabla se encuentra ordenada físicamente por el inidice. Solo puede existir uno de estos por tabla.
A. Densos: cada valor de cada fila aparece dentro del índice.
B. Dispersos: Se posee una entrada solo para algunos valores de las filas. Se busca la clave de acceso mas
cercana al valor buscadoy luego se recorre a partir de ese valor hasta encontrar el deseado, dado que están
ordenados.
II. INDICES HASH (no cluster o no agrupamiento): no se encuentran ordenados sino que se basan en una funcion
hash ara poder distribuir los valores. Es un índice lógico. Se pueden tener varios por tabla.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

HINTS: agregados a un comando SQL.


1. JOIN HINTS: especifican que tiempo de join vamos a usar en la query.
A. NESTED LOOPS: recorre la tabla mas pequeña o sin índices y para cada fila de esa tabla busca en la otra
mediante el índice, las filas que tienen igual valor de atributo de junta. Se usa para tablas muy pequeñas con muy
grandes e índice en atributo de junta. Se aplica a joins por =, <, > y <>
B. MERGE JOIN: Las dos tablas están ordenadas físicamente por el atributo de junta o solo una esta ordenada y la
otra es lo suficientemente pequeña como para ordenarla. Es muy eficiente, solo lee cada tabla una vez y por lo
tanto su costo es muy bajo. Lee una fila y la compara con la fila de la otra tabla. Funciona igual que el merge de
archivos en C. soporta cualquier condición de junta. Requeire al menos una condición de igualdad en la condición
de jutna. Si tiene mas de una ondicion resuelve la de igualdad y las otras las resuleve en memoria.
C. HASH JOIN: Se usa cuando no están ordenadas ni tienen índices. Requiere una condición de igualdad en la
codicion de junta
2. INDEX HINTS: fuerzan el uso de uno o mas índices en la ejecución de la query.
3. LOCK HINTS: especifican un tipo de lockeo.
A. NOLOCK (READ UNCOMMITED): indica al motor que ignore los lockeos exclusivos de datos y lea directamente
de la tabla (hace un dirty read). Se logra performance y escalabilidad pero leo datos no commiteados. Se usa en
SELECT.
B. ROWLOCK: especifica que se apliquen bloqueos de fila cuando normalemten se aplicarían a blqoueos de pagna
o tabla. SE USA EN UPDATE, DELETE E INSERT.
4. PROCESSING HINTS: especifican una estrategia particular en la ejecución de la query.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

TRANSACCIONES: unidad lógicay atómica de procesamiento que puede incluir una o mas
operaciones.

ESTADOS DE UNA TRANSACCION: Activo – parcialmente confirmada – fallido – confirmada – terminada.

PROPIEDADES DE UNA TRANSACCIONES – ACID:


ATOMICIDAD: re realiza bien o se aborta.
CONSERVACION DE CONSISTENCIA: la ejecución de una transacción no tiene que alterar la consistencia de la BD.
AISLAMIENTO: la ejecución de una transacción se debe ejecutar de forma aislada de las otras. La ejecución de una no
debe interferir en la ejecución de la otra. Se debe obtener el mismo resultado si las transacciones se ejecutaran en
otro orden.
DURABILIDAD: los commits de una transacción deben perdurar en la base de datos, no deben perderse ante un fallo
posterior.

CONTROL DE CONCURRENCIA (TRANSACTION MANAGER): asegura la consistencia de los datos controlando la


concurrencia a los recursos.

PROBLEMAS DE CONCURRENCIA:
I. LOST UPDATE: Se lee un dato que esta siendo modificado por otra transacción. Esto produce que modifique
valores viejos, porque la acutalizacion todavía no fue comiteada.
II. DIRTY READS: Se lee un dato que luego fue rollbackeado y por lo tanto es basura y no es valido.
III. NON REPEATABLE READS: lee dos veces un recursos y obtiene en cada una un valor distinto.

SERIABILIDAD DE LOS PLANES:


PLANES EN SERIE: Las transacciones se ejecutan una atrás de la otra.
PLANES NO EN SERIE: las operaciones de cada transacción se ejecutan en forma intercalada.
PLANES SERIALIZABLES: un plan es serializable si es equivalente a algún plan en serie.

EQUIVALENCIA DE PLANES:
EQUIVALENTE POR RESULTADOS: producen el mismo estado al final del plan.
EQUIVALENTES POR CONFLICTOS: cuando el orden de dos operaiones cualquiera en conflicto es el mismo en ambos
planes.

LOCKEOS: Mecanismo que permite que las transacciones puedan ejecutar en forma serializable, controlando el uso
de los recursos para las transacciones que necsitan el mismo elelemnto que pueden aguantar a obtenerlo si otra
transacción lo tiene en uso. Principios: Obtener un lockeo antes de acceder al recurso. Luego de usuarlo, liberar el
recurso.

LOCK ESCALATION: Se da cuando la T1 tiene que aumentar el nivel de lockeo que tiene establecido.
TIMEOUT: es el tiempo que espera un lockeo la liberación de un recurso antes de rollbackearse por no poder
acceder a ese recurso.

GRANULARIDAD DEL LOCKEO: Es el objeto que bloqueara: database – table – page – row

DEADLOCK: Es un bloqueo infinito que se da cuando una T1 espera que T2 libere un recurso y al mismo tiempo T2
espera que T1 libere un recurso. Un deadlock se ignora (se deja que los programadores lo manejen), se previenen
(defino el orden de los lockeos para que no se produzcan deadlocks), se evitan (detectar potenciales deadlocks y
tomar una acción sobre las transacciones) o se detectan y recuperan (permitir deadlcoks, detener y recuperar las
transacciones).

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

PROTOCOLO DE LOCKEOS:
BLOQUEO BINARIO: limita a que los bloqueos no peuydan ser tomados en un mismo elemento por mas de una
transacción. Bloquea o desbloquea un elemento
BLOQUEO COMPARTIDO/EXCLUSIVO: Este bloquea la lectura o la escritura de un elemento y la desbloquea.

PROTOCOLO DE DOS FASES: todas las operaciones de bloqueo preceden a la primera operación de desbloqueo de la
transacción.
FASE DE EXPANSION: Se adquieren los bloqueos en los elementos pero no se liberan.
FASE DE CONTRACCION: se pueden liberar bloqueos, pero no se pueden adquirir nuevos

PROTOOLO DE DOS FASES ESTRICTO: Libera los recursos de la transacción una vez que se hizo commit.

NIVELES DE AISLAMIENTO:
DIRTY READS: la T1 lee un dato actualizado por una T2, pero ese update es rollbackeado y la transacción T1 sigue
trabajando con ese dato que ahora es basura.
REPEATABLE READ: T1 lee un valor, T2 actualiza ese valor y despues T1 lo vuelve a leer y no tiene el mismo valor que
leyó antes.
PHANTOM READ: T1 opera con un conjunto de registros a través de una clausula where, si T2 esta actualizando esa
tabla al mismo tiempo y hay valores que cumplen la condición del where, y T1 se vuelve a ejecutar, podría no darnos
el mismo resultado, estaría leyedo registros fantasmas.

LOGS: es una bitácora de todas las operaciones que se van realizando en el motor. A medida que se inicia una T que
realiza cambios, los cambios se van almacenando en le archivo log. El log garantiza la consistencia de la BD, si no hay
log no puedo reestablecer la BD.
CIRCULARES: Active logs va pisando el log a medida que se van haciendo checkpoints. Tengo un solo archivo de logs
que se va pisando.
SECUENCIALES: asgino un tamaño para los logs, a medida que se van llenando se van creando nuevos logs. Puedo
recuperar toda la BD si uso esto pero consumo espacio.

CHECKPOINT: es un evento por el cula los bloques modificados que están en memoria son llevados al disco. Se peude
modificar el tiempo cada cuando se hace.

PROCESO DE COMMIT:
1. Genera una entrada en el log de commit
2. Actualiza todas las paginas que hayan sido utilizadas en la T al log en disco.
3. retorna el commit.
4. fin de la T en el log.

PROCESO DE ROLLBACK.
1. Gener auna entrada en el log de abort.
2. Obtiene el ultimo lastLSN que haya generado la T.
3. Recorre cada pagina afectada tomando el previo LSN de cada una de las entradas.
4. Genera un CLR. Por cada una de las ioperaciones de actualización.
5. Deshacer la operación, utilizando la imagen anterior.
6. Fin de la T en el log.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

SEGURIDAD:
AMENAZAS A LAS BASES DE DATOS:
PERDIDA DE INTEGRIDAD: se elimina o modifica información involuntariamente. Se evita registringiendo permisos y
teniendo varias instancias/entonnos de base de datos. Para recuperar la inforamcion se puede usar un backup. Se
puede hacer <en caliente=.
PERDIDA DE DISPONIBILIDAD: la BD deja de funcionar por una falla del disco rigido. Se puede evitar teniendo un
sistema RAID: RAID 1 (se usan dos discos espejados, si se rompe uno se usa el otro hasta arreglar el primero) y
RAID 5 (los datos se distribuyen en varios discos con suficiente redundancia como para reemplazar un solo disco).
Tambien se evita usando un sistema de almacenamiento independiente. Servidores especialmente disenados para
almacenar información y si se va la luz el servidor se puede mantener con un UPS y un generados.
PERDIDA DE CONFIDENCIALIDAD: Alguien no autorizado accede a información confidencial. Se pueden usar los
mecanismo de seguridad:
DAC: otorga y revoca privilegios a los distintos usuarios con GRANT y REVOKE.
RBAC: usa un sistema de roles. Los permisos se asignan a los roles y a los usuarios se les asigna esos roles.
MAC: consiste en clasificar los objetos de la BD en topSecret – Secrete – Classified – Unclassified. A los usuarios se les
asigna un nivel de seguridad y pueden acceder a ese nivel de seguridad o menor.

SQL INJECTION: Es una técnica que aporvecha las vulnerabliaddes de una aplicación que tiene sentencias SQL
embebidas en su código fuente. Se inyecta fragmentos de código SQL donde se deberían ingresar valores de
parámetros. Se evita validando los datos ingresados por el usuario y no permitir símbolos especiales, evitar armar
consultas SQL en el código fuente y usar SP, usar binding de variables para los parámetros.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

ESTOS OBJETOS NO SON TABLAS:


STORED PROCEDURES:
es un procedimiento almacenado. es un proceso que se ejecuta en la base de datos para realizar una acción en la
base de datos. conjunto de sentencias SQL que se ejecutan invocando su nombre. Puede incluir 1 o n sentencias SQL,
acepta parámetros de entrada y puede emitir parámetros de salida (recibe parámetros y retorna parámetros), se
puede llamar a otro procedure, puede devolver el estado de ejecución del procedure en su nombre (devuelve si
ejecuto con éxito o no, su nombre devuelve eso). No se puede llamarlos sp_nombre, xp_nombre. Cuando lo ejecuta
la bd guarda de qué manera fue la mejor manera de ejecutar ese SP, es una ventaja frente a ejecutar las sentencias
normalmente. no deben tener más de 200 líneas. cuando se hace un alter, no se modifica solo una parte, se modifica
todo el procedure, es como si se creara de cero. sirve para tener sentencias en una sola línea que se ejecuta.
Reutiliza el código.

CREATE PROCEDURE nombreProc (@parámetros tipo de datos)


AS
[BEGIN]
sentenciasSQL
[END]

EJEMPLO:
CREATE PROCEDURE pNombreProc (@nombreParam1 tipoDato, @nombreParam2 tipoDato)
AS
sentenciasSQL

DROP PROCEDURE nombreProcedure

ALTER PROCEDURE nombreProcedures


AS
sentenciasSQL

EXECUTE PROCEDURE nombreProcedure @param1, @param2


EXECUTE PROCEDURE nombreProcedure @idProv, @idCleinte

VARIABLES:
DECLARE @nombreVar AS tipoDato
DECLARE @id in, @vnombre varchar(100)

SET @nombreVar = <valor>


SET @id = 1
SET @vNombre = 8Nicolas9

WHILE <CONDICION>
sentenciasSQL

WHILE @cant > 0


UPDATE producto&
set @cant = @cant – 1

IF <condicion>
sentenciasSQL
ELSE
sentenciasSQL

IF @sueldo > 20000


UPDATE &
ELSE
UPDATE&

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

FUNCTION:
es aquello que en realidad puede devolver algo en su nombre. conjunto de sentencias SQL, igual que SP pero la
función devuelve algo en su nombre y ese valor puede ser interpretado por quien lo llamo. SIEMPRE RETORNAN
ALGO EN SU NOMBRE. No son performantes. si se puede hay que evitarlo. Dif con SP, las funciones siempre retornan
algo, SP no.
CREATE FUNCTION nombreFuncion (@param1 tipo, @param2 tipo, &)
RETURNS return_tipoDeDatps // pongo el tipo de dato de lo que retorna.
AS
BEGIN
setenciasSQL.
return valor // tiene que ser del mimo tpo de dato que se puso en el returns.
END

CREATE FUNCTION nombreFuncion ()


RETURNS int
AS
BEGIN
declare @ult int
set @ult = (SELECT &)
return @ult + 1
END

Funciones escalares:
devuelven tipos de datos esacalares(texto, int, etc.) devuelve un unico valor, simple
Table functions:
devuelve un tipo de dato table. RETURNS table|@vartable
Con vartable yo creo una tabla y en <definicion> pongo como quiero que sea la tabla (nombre y tipo de dato), es una
tabla en memoria, es una variable. table es una tabla que está definida.
CREATE FUNCTIONS nombreF ()
RETURNS table
AS
return (select idCliente from Cliente)

CREATE FUNCTIONS nombreF ()


RETURNS @vartable (<definicion>)
AS
BEGIN
sentenciasSQL
INSERT INTO @vartable
RETURN
END

CREATE FUNCTIONS nombreF ()


RETURNS @tablaCliente (idCliente INT NOT NULL, nombre varchar(100), etc&)
AS
BEGIN
sentenciasSQL
INSERT INTO @tablaCliente
RETURN
END

table functions:
SELECT *
FROM f_clientes() // se pone aca porque devuelve una tabla, la tabla se muestra con el select.
scalar function: no pueden ir en el from porque edvuelven valores específicos.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

INSERT INTO clientes values (f_proximocliente(),9Juan9) // si la función devuelve un numero, pone ese numero la
tabla.
-- DROP FUNCTION nombreFunction
-- ALTER FUNCTION nombreFunction (params). Se cambia todo, se hace como un reemplazo, igual que SP.
RETURNS table|vartable
AS
BEGIN
RETURN
END

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

TRIGGER:
conjunto de sentencias que se disparan cuando ocurre un evento. Los eventos pueden ser insert, delete o update.
pueden tener 1 o n sentencias SQL, se puede usar técnicas de programación, se peude usar el mismo trigger para
distintos eventos, se utiliza para una sola vista o tabla, puede utilizar tablas temporales deleted, inserted para
verificar lo que está tratando de cambiarse en el trigger. no se invoca específicamente para usarlo, se activa y se
desactiva. For|after lo hace DESPUÉS de que se haga la acción. INSTEAD OF en lugar de hacer la acción ejecutada
hace el trigger. inserted y deleted son tablas temporales que solo existen dentro del trigger. son mas para auditoria y
no son tan recomendables.
CREATE TRIGGER nombreTrigger ON table|view
FOR|AFTER|INSTEAD OF
INSERT,UPDATE,DELETE
AS
sentenciasSQL

CREATE TRIGGER nombreTrigger ON cliente INSTEAD OF DELETE AS


select nro from deleted // contiene los registros que se eliminarían por la sentencia original del inserted

CREATE TRIGGER nombreTrigger ON cliente AFTER INSERT, UPDATE AS


UPDATE cliente
set Fecha = getdate()
where nro IN (select nro from inserted)
// inserted: contiene los registros que se insertarían por la sentencia original.

DROP TRIGGER nombreTrigger

ALTER TRIGGER nombreTrigger ON table|view FOR|AFTER|INSTEAD OF INSTER, UPDATE, DELETE


AS
BEGIN
sentenciasSQL
END

ENABLE TRIGGER nombreTrigger|ALL ON table|view


DISABLE TRIGGER nombreTrigger|ALL ON table|view

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

COSAS EXTRAS PRACTICA

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

: Para que sean equivalentes las


clausuras de cada conjunto deben ser iguales.
R (A, B, C, D)
F = {A³B, A³C, B³A, D³A}
G = {D³ABC, B³A, B³C, A³B}
Primero tomo la primera Df de F (A ³ B) y verifico si en G se cumple que A³B. Esto se hace obteniendo la clausura
de A (A+) y tengo que ver que llegue a B. Con la última Df veo que con A llego a B, entonces esta Df se cumple. Sigo
con la siguiente, A ³ C. Calculo la clausura de A en G. Con A llego a B (por la ultima Df) y con B llego a C, por lo tanto,
se cumple esa Df. Sigo asi con las demás Df de F. y despues hago lo mismo con las Df de G. Para que sean iguales, las
clausuras de los atributos tienen que ser iguales.

R(ABCDE)
F = {A³BCD, AB³DE, BE³AC}
1) Descompongo la parte derecha de cada dependencia. Todas las Df tienen que tener un solo atributo en la parte
derecha.
F1 = {A³B, A³C, A³D, AB³D, AB³E, BE³A, BE³C}

2) Eliminar redundancia en la parte izquierda. Tomo solo las Df con dos o más atributos del lado izquierdo y me fijo si
con cada atributo POR SEPARADO puedo llegar a la misma letra. Con AB llego a D, lo que tengo que averiguar es si
puedo llegar a D solo con A o solo con B.
AB ³ D ➔ ➔ A+ = ABCD ÿ Solo con A, ya llego a D, entonces B es redundante y lo saco de la Df.
AB ³ D ➔ ➔ B+ = B ÿ Solo puedo llegar a B, como no llego a D.
Si con B también hubiera llegado a D, entonces A seria redundante. Si se llega a D con los dos, elijo solo uno. Sin
embargo, con resolver uno solo y ver que la otra letra es redundante es suficiente.
F2 = {A³B, A³C, A³D, A³D, A³E, BE³A, BE³C}
En este último conjunto me quedaron dos Df iguales, saco una. Igualmente, si no lo hago, en el siguiente paso
cuando elimine Df redundantes, estas se van a eliminar, quedando solo una de esas.
F2 = {A³B, A³C, A³D, A³E, BE³A, BE³C}

3) Elimino las dependencias redundantes. Tomo una Df y veo si con el determinante puedo llegar al mismo
determinado, pero sin usar la Df que estoy analizando.
A ³ B, calculo la clausura de A (A+) en F2, pero sin usar la Df <A ³ B=, si en esa clausura llego a B, entonces la Df es
redundante. Si no llego, no es redundante. A ³ B, A+F2 – {A ³ B} = ACDE. No llegue a B, no es redundante.
A ³ C, A+F2 – {A ³ C} = ABCDE. Llegue a C, es redundante.
Como A ³ C es redundante, para las siguientes comprobaciones además de no usar la que no tengo que usar en ese
momento tampoco tengo que usar esta Df. A ³ D, A+F2 – {A ³ C, A ³ D} = ABEC. No llegue a D, no es
redundante.
Finalmente, el ultimo conjunto que queda es Fmin:
Fmin = {A³B, A³D, A³E, BE³A, BE³C}

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

Sirve para transformar a 3FN una relación que está en una forma normal menor a 3FN. La
relación resultante que queda en 3FN sería la unión de cada relación que queda luego de hacer el algoritmo

1) Calcular Fmin y obtener las claves candidatas (CC)


R (C, P, D, I, K, N) F = {PC³D, PC³I, DI³K, K³I} CC = {PCN}
2) Por cada determinante igual en Fmin, creo una relación con esas Df y esos atributos involucrados. Tomo las Df que
tienen igual determinante y hago una relación nueva:
R1(P, C, D, I) F1 = {PC ³ D, PC ³ I} CC = {PC}
R2(D, I , K) F2 = {DI ³ K, K ³ I} CC = {DK, DI}
La relación R2, aunque no tengan el mismo determinante, incluye las mismas letras, por eso es que puede ir en la
misma relación.
R3(N) F3 = {} CC = {N}
Como ninguna Df contiene el atributo N (que pertenece a R), entonces hago una relación por cada atributo que no
puedo ser agrupado como los anteriores. Todos los atributos juntos que quedaron fuera, en una sola relación.
R4 = (P, C, N) F4 = {} CC = {PCN}
Como ninguna relación contiene la CC de la F original, entonces hago una nueva relación solo con la clave. Sin Df.
De esta forma, la relación R queda descompuesta de manera que todas las Df y todo F quede, mínimo, en 3FN.

Sirve para transformar a FNBC una relación que está en una forma normal menor a
FNBC. La relación resultante que queda en FNBC sería la unión de cada relación que queda luego de hacer el
algoritmo.

R (M, N, O, P, Q, S)
F ={ M ³ON, N ³MO, O ³MN, MQ ³SO, OP ³Q} CC = {PM, PN, PO}
1) No es obligatorio calcular Fmin, pero es recomendable para no tener redundancia y tener el menor F posible.
Fmin = {M ³N, N ³O, O ³ M, MQ³S, OP ³Q}
2) Calculo la forma normal de cada Df y solo hago el algoritmo para aquellas que no sea FNBC. Si la Df es FNBC, sigo
con la siguiente. La primera Df que no es FNBC es M ³ N. A partir de acá, divido el esquema en dos. Descompongo
al lado izquierdo esta Df que no es FNBC como una relación nueva. Del lado derecho Hago una nueva relación con las
mismas Df que la original, pero sin incluir EL ATRIBUTO DETERMINADO de la Df que mandamos al lado izquierdo. Si
mandamos M ³ N al lado izquierdo, entonces del lado derecho nos va a quedar una relación sin el atributo N y sin
las Df que incluyen la N. Estas Df se pierden, se pueden <conseguir= más Df infiriéndolas con las Df que tengo antes
de sacar la N. Para la siguiente relación tendría que aplicar el algoritmo en para todas las Df menos en la última que
ya se encuentra en FNBC.
Fmin = {M ³N, N ³O, O ³ M, MQ³S, OP ³Q} ➔ Esta en 2FN.
3FN 3FN 3FM 2FN FNBC
R1(M,N) R2(M,O,P,Q,S)
F1 = {M³N} F2 = {O³M, MQ³S, OP³Q}
CC1 = {M} CC2 = {PO}
Si del lado derecho quedan Df que no sean FNBC, repito el proceso. Ver que en R2 quedaron las mismas letras
menos la N que fue la que se tuvo que sacar. Lo mismo con la Df N ³ O que se perdió porque como la N se sacó, se
pierde esa Df también. Al igual que en 3FN, si hay más de una Df con las mismas letras con las que se está operando,
mando todas del lado derecho a una misma relación, pero si esa relación no queda en FNBC, tengo que hacer el
mismo algoritmo para esa relación hasta que queden todas las relaciones en FNBC y despues sigo con la relación del
lado izquierdo haciendo el mismo algoritmo.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

Con este método verifico si en la relación hay perdida de información o no. El proceso
termina cuando toda una fila de la tabla queda completada con a (no hubo perdida de información) o cuando se
hace el algoritmo y para cada una de las Df de la relación, no hubo ningún cambio en la tabla (hubo perdida de
información)

R(A,B,C,D,E)
F={C³E, E³D,AD³B, B³E }
R1(A,B,C) R2 (C,D) R3 (A,D,E)
1) Armar una tabla las columnas son los atributos de R y las filas son las relaciones R1, R2, & ,Rn. (Es mas cómodo
armarlo en un Excel).
A B C D E
R1
R2
R3
2) Para cada letra que esta en una relación, le pongo la letra 8a9 y el numero es el numero de la columna en la que
esta. Para la primera fila en la R1 solo esta A, B y C, entonces pongo solo esas letras. Como 8a9 esta en la columna 1
pongo 8a19, lo mismo para las demás. Las celdas que no tengan 8a9 se completan con 8b9, y el número que acompaña
esa b es el numero de fila y columna. En la primera fila queda b14, por estar en la fila 1 y columna 4.
A B C D E
R1 a1 a2 a3 b14 b15
R2 b11 b12 a3 a4 B25
R3 a1 b32 b33 a4 a5
3) Para cada Df de la relación R, voy recorriendo la tabla viendo si se cumple. La primera Df es C ³ E, voy a la
columna C y a la columna E y veo que es (1) a3 ³ b15,
(2) a3 ³ b25,
(3) b33 ³ a5
Solo me fijo en las filas que tienen A, (la (1) y (2)). Acá tengo que decir si a3 implica b15 (fila 1) entonces a3 (fila 2)
también debería implicar b15. Entonces tacho el b25 de la fila 2 y pongo b15. Porque un mismo valor de X tiene que
determinar un mismo valor de Y (definición de dependencia funcional). Se podría hacer al revés también, si a3
determina b25, entonces a3 debería determinar b25, tacharía b15 y pondría b25. Es lo mismo.
4) Repito 3) con todas las Df. Si antes de terminar las Df llego a una fila completa con 8a9, termino el algoritmo y
concluyo que no hubo perdida de información. Si al recorrer desde la primera Df hasta la ultima no hago NINGÚN
cambio, entonces termino el algoritmo y concluyo que SI HUBO perdida de información.

C³E AD³B
A B C D E (1) a1 a4 ³ a2
R1 a1 a2 a3 b14 b15 (2) b11 a4 ³ b12
R2 b11 b12 a3 a4 b15 (3) a1 a4 ³ b32
R3 a1 b32 b33 a4 a5 A B C D E
R1 a1 a2 a3 a4 b15
E³D: Un mismo determinante implica un mismo R2 b11 b12 a3 a4 b15
determinado. Siempre predomina la a, pero aca, los R3 a1 a2 b33 a4 a5
mismos determinantes son b no a. Acá no podría ser
al revés de escribir en lugar de b15 ³ a4 hacer B³E
b15 ³ 14, porque siempre predomina la a. (1) a2 ³ b15 ➔ a2 ³ a5
(1) b15 ³ a4 (2) b12 ³ b15
(2) b15 ³ b14 ➔ b15 ³ a4 (3) a2 ³ a5
(3) a5 ³ a4 A B C D E
A B C D E R1 a1 a2 a3 a4 a5
R1 a1 a2 a3 a4 b15 R2 b11 b12 a3 a4 b15
R2 b11 b12 a3 a4 b15 r3 a1 a2 b33 a4 a5
R3 a1 b32 b33 a4 a5

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)


lOMoARcPSD|34573484

Como la primera fila quedo toda con a, entonces termino de verificar y digo que NO HUBO perdida de información.

Con el árbol optimizado obtengo la forma mas eficiente de hacer una consulta. A
diferencia del canónico que no esta optimizado ni tampoco es eficiente.
1) Acomodar las tablas de menor a mayor según la cantidad de bloques que ocupa cada tabla. Para obtener la
cantidad de bloques (si es que no me los dan como dato):
Si tengo que 1 registro = tamReg, que esa tabla tiene cantReg registros y que el tamaño del bloque = tamBloque.
Entonces: (A) 1 reg ----------- tamReg
cantReg reg ----------- X = (cantReg * tamReg) / 1 reg ³ X: tamCantRegs

Luego: (B) 1 bloque ----------- tamBloque


Y bloques ----------- X
Y = (X * 1) / tamBloque ➔ Y = cantBloques que ocupan CantReg

Ejemplo:
Tabla (campo1 (5), campo2 (5), campo3 (4), campo5 (6)) // 10 tuplas/registros
TamBloque = 10B

tamReg = 5 + 5 + 4 + 6 ³ tamReg = 20B.


Para sacar cuanto espacio ocupan los 10 registros (porque 20 bytes ocupan solo UN registro):
(A): X = (10 * 20) / 1 ³ X = 200B, 200 Bytes es lo que ocupan 10 registros.

Luego (B): si 1 bloque ocupa 10, cuantos bloques son 200 bytes.
Y = (200 * 1) / 10 ³ Y = 20B.
Entonces los 20 registros de 10 Bytes cada uno, ocupan un total de 200 Bytes lo que serian 20 bloques de 10 bytes.
Con esta información de la cantidad de bloques, puedo ubicar en que posición va la tabla en el árbol.

2) Siempre se busca ubicar las tablas de menor a mayor, pero si la tabla mas chica solo se junta con la tabla mas
grande, entonces pongo esas dos tablas primero. Sin embargo, la tercera tabla que se vaya a usar tiene que ser la
mas chica que se combine con el resultado de las primeras dos. Siempre voy buscando la tabla más pequeña posible
para combinar con la tabla que tengo.
3) Como regla, se tienen que aplicar selecciones y proyecciones lo mas pronto posible pero las proyecciones no
directamente sobre la tabla, sino que previamente tengo que hacer algún select o alguna junta para aplicar la
proyección sobre ese resultado y no sobre la tabla.
4) A medida que vaya haciendo las juntas voy proyectando solo las columnas que necesito para mostrar el resultado
final y las que necesito para hacer las juntas con la tabla siguiente.

Descargado por Rodrigo Castillo (castillo.rn972@gmail.com)

También podría gustarte