lunes, 19 de noviembre de 2012

Tratamiento de valores nulos



Valores nulos


A menudo hay varias formas de tratar los valores nulos y, como resultado, las siguientes definiciones pueden ser a veces arbitrarias. Las operaciones y las comparaciones con valores nulos se deberían evitar siempre que sea posible. Dado que el valor especial nulo indica «valor desconocido o no existente», cualquier operación aritmética (como +, –, * y /) que incluya valores nulos debe devolver un valor nulo. De manera similar, cualquier comparación (como <, <=, >, >= y ≠) que incluya un valor nulo se evalúa al valor especial desconocido; no se puede decir si el resultado de la comparación es cierto o falso, así que se dice que el resultado es el nuevo valor lógico desconocido. Las comparaciones que incluyan nulos pueden aparecer dentro de expresiones booleanas que incluyan las operaciones y (conjunción), o (disyunción) y no (negación). Se debe definir la forma en que estas operaciones tratan el valor lógico desconocido.
•y: (cierto y desconocido) = desconocido; (falso y desconocido) = falso; (desconocido y desconocido)= desconocido.
•o: (cierto o desconocido) = cierto; (falso o desconocido)= desconocido; (desconocido o desconocido)= desconocido.
• no: (no desconocido) = desconocido.
select: la operación selección evalúa el predicado P en σP(E) sobre cada tupla de E. Si el predicado devuelve el valor cierto, se añade t al resultado. En caso contrario, si el predicado devuelve desconocido o falso, t no se añade al resultado.



Reunión

Producto cartesiano seguido de una selección. Por tanto, la definición de la forma en que la selección trata los nulos también define la forma en que la operación reunión trata los nulos. En una reunión natural r se puede observar de la definición anterior que si dos tuplas, tr ∈r y ts ∈ s, tienen un valor nulo en un atributo común, entonces las tuplas no casan.
Ejemplo:
R = (A, B, C, D)
S = (E, B, D)
• Esquema de relación = (A, B, C, D, E)
• r x s se define como:
∏r.A, r.B, r.C, r.D, s.E(σr.B = s.B ∧r.D = s.D(r x s))





Proyección

Trata los nulos como cualquier otro valor al eliminar duplicados. Así, si dos tuplas del resultado de la proyección son exactamente iguales, y ambos tienen nulos en los mismos campos, se tratan como duplicados. La decisión es un tanto arbitraria porque sin saber cuál es el valor real no se sabe si los dos valores nulos son duplicados o no.
Unión, intersección, diferencia: tratan los valores nulos al igual que la operación proyección; tratan las tuplas que tienen los mismos valores en todos los campos como duplicados incluso si algunos de los campos tienen valores nulos en ambas tuplas. El comportamiento es un tanto arbitrario, especialmente en el caso de la intersección y la diferencia, dado que no se sabe si los valores reales (si existen) representados por los nulos son los mismos.


Proyección generalizada

Se describió la manera en que se tratan los nulos en las expresiones al principio del Apartado 3.3.4. Las tuplas duplicadas que contienen valores nulos se tratan como en la operación proyección. Cuando hay nulos en los atributos agregados, la operación borra los valores nulos del resultado antes de aplicar la agregación. Si el multiconjunto resultante está vacío, el resultado agregado es nulo. Obsérvese que el tratamiento de los valores nulos aquí es diferente que en las expresiones aritméticas ordinarias; se podría haber definido el resultado de una operación de agregación como nulo si incluso sólo uno de los valores agregados es nulo. Sin embargo, esto significaría que un único valor desconocido en un gran grupo podría hacer que el resultado agregado sobre el grupo fuese nulo, y se perdería una gran cantidad de información útil.

Ejemplo: 


Dada la relación info-credito(nombre-cliente, limite, saldocredito), encontrar cuanto puede gastar cada persona: 


∏nombre-cliente, limite – saldo-credito (info-credito)

Funciones de agregación


Las funciones de agregación toman como argumentos un conjunto de valores y devuelven un valor simple como resultado.
avg: valor medio
min: valor mínimo
max: valor máximo
sum: suma de valores
count: número de valores

Ejemplo:



Reunión externa

Las operaciones de reunión externa se comportan como las operaciones reunión, excepto sobre las tuplas que no aparecen en el resultado. Estas tuplas se pueden añadir al resultado (dependiendo de si la operación es , o ) añadiendo nulos.

Ejemplo: