07.11.2014 Views

Bases de Datos y Sistemas de Información ... - Pedeciba

Bases de Datos y Sistemas de Información ... - Pedeciba

Bases de Datos y Sistemas de Información ... - Pedeciba

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Maestría en Bioinformática<br />

<strong>Bases</strong> <strong>de</strong> <strong>Datos</strong> y <strong>Sistemas</strong> <strong>de</strong> Información<br />

Fundamentos <strong>de</strong> Lógica<br />

Ing. Alfonso Vicente, PMP<br />

alfonso.vicente@logos.com.uy


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ ¿Qué es la lógica?<br />

‣ ¿Por qué es importante?


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Definiciones


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Lógica proposicional<br />

‣ Lógica <strong>de</strong> predicados<br />

‣ Conectivos y tablas <strong>de</strong> verdad<br />

‣ Implicancia<br />

‣ Equivalencia, tautología,<br />

contradicción<br />

‣ ¿Para qué sirve todo esto?


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Necesidad <strong>de</strong>l valor NULL<br />

‣ Problemas <strong>de</strong>l valor NULL<br />

‣ Lógica trivalorada


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Aplicabilidad en la disciplina <strong>de</strong><br />

<strong>Bases</strong> <strong>de</strong> <strong>Datos</strong>


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ ¿Qué es la lógica?<br />

‣ ¿Por qué es importante?


Introducción<br />

La lógica estudia los principios <strong>de</strong>l razonamiento, la<br />

<strong>de</strong>mostración y la inferencia.<br />

Toda teoría es un sistema <strong>de</strong> sentencias o <strong>de</strong>claraciones, que<br />

se aceptan como verda<strong>de</strong>ras y pue<strong>de</strong>n ser utilizadas para<br />

obtener nuevas <strong>de</strong>claraciones utilizando reglas bien <strong>de</strong>finidas.<br />

Es importante en computación, porque nosotros <strong>de</strong>bemos<br />

enseñar a razonar a las máquinas.<br />

Es importante en la disciplina <strong>de</strong> <strong>Bases</strong> <strong>de</strong> datos, porque<br />

trabajaremos con una lógica diferente a la clásica bi-valorada.


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Definiciones


Valores, variables y tipos<br />

• Un Valor es una constante individual, con un significado bien<br />

<strong>de</strong>finido (por ejemplo, el entero 17). Un Valor no se pue<strong>de</strong><br />

modificar, ya que no sería el mismo Valor. Los Valores se<br />

codifican <strong>de</strong> alguna manera y pue<strong>de</strong>n ser arbitrariamente<br />

complejos.<br />

“El peso atómico <strong>de</strong>l Helio es 4,0026”


Valores, variables y tipos<br />

• Una Variable mantiene un Valor, pero pue<strong>de</strong> mantener<br />

múltiples Valores a lo largo <strong>de</strong>l tiempo. Las Variables sí se<br />

pue<strong>de</strong>n modificar; cambiando el Valor que mantienen. Las<br />

Variables tienen nombre, lo que nos permite hablar (o<br />

predicar) sobre ellas.<br />

v_peso_atomico := 4,0026;<br />

If (v_peso_atomico < 28,88) then<br />

print “Este elemento es más liviano que el aire”<br />

end if


Valores, variables y tipos<br />

• Diremos que todas las Variables tienen un Tipo, y diremos<br />

que el Tipo <strong>de</strong> una Variable es el conjunto <strong>de</strong> todos los<br />

Valores que la Variable pue<strong>de</strong> mantener. Ejemplos comunes<br />

<strong>de</strong> tipo son strings, números enteros o fechas.<br />

<strong>de</strong>fine v_peso_atomico numeric(12,9);<br />

<strong>de</strong>fine v_<strong>de</strong>scubierto date;<br />

<strong>de</strong>fine v_nombre varchar(20);<br />

• Una base <strong>de</strong> datos se pue<strong>de</strong> ver como una variable; en<br />

cada momento <strong>de</strong>l tiempo tiene un <strong>de</strong>terminado valor (<strong>de</strong> un<br />

tipo muy complejo, <strong>de</strong>terminado por el esquema <strong>de</strong> la base).


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Lógica proposicional<br />

‣ Lógica <strong>de</strong> predicados<br />

‣ Conectivos y tablas <strong>de</strong> verdad<br />

‣ Implicancia<br />

‣ Equivalencia, tautología,<br />

contradicción<br />

‣ ¿Para qué sirve todo esto?


Proposiciones y predicados<br />

• Una proposición es una sentencia <strong>de</strong>clarativa que pue<strong>de</strong> ser<br />

verda<strong>de</strong>ra o falsa, y se <strong>de</strong>be po<strong>de</strong>r <strong>de</strong>cidir cuál <strong>de</strong> las dos.<br />

Po<strong>de</strong>mos <strong>de</strong>terminar si una sentencia S es <strong>de</strong>clarativa<br />

verificando que tenga sentido la pregunta ¿es cierto que S?<br />

• Diremos que las proposiciones tienen un valor <strong>de</strong> verdad,<br />

que pue<strong>de</strong> ser verda<strong>de</strong>ro o falso.<br />

• Un ejemplo <strong>de</strong> proposición es "1 + 1 = 3", la cual<br />

obviamente, es falsa…


Proposiciones y predicados<br />

• Un predicado, a diferencia <strong>de</strong> una proposición, admite<br />

variables <strong>de</strong> las que no se conoce su valor <strong>de</strong> verdad. Estas<br />

variables se conocen como parámetros <strong>de</strong>l predicado.<br />

• Un ejemplo <strong>de</strong> predicado es "X aprobará <strong>Bases</strong> <strong>de</strong> <strong>Datos</strong>", y<br />

po<strong>de</strong>mos suponer que el valor <strong>de</strong> verdad <strong>de</strong> este predicado<br />

<strong>de</strong>pen<strong>de</strong>rá <strong>de</strong>l parámetro X, que varía en el conjunto <strong>de</strong><br />

estudiantes.<br />

• Si sustituye el lector la variable X por su nombre (esto se<br />

<strong>de</strong>nomina instanciar un predicado con valores) obtendrá una<br />

proposición. Queda como tarea averiguar el valor <strong>de</strong> verdad<br />

<strong>de</strong> la proposición que obtiene.


Proposiciones y predicados<br />

• Hay MUCHO más: Lógica para Ingeniería en Computación<br />

Fuente: http://www.fing.edu.uy/inco/cursos/logica/admin/Programa.pdf, 2012-03-14


Proposiciones y predicados<br />

• Los parámetros <strong>de</strong> un predicado también se <strong>de</strong>nominan<br />

variables libres, y se pue<strong>de</strong>n cuantificar (esto es, vincular <strong>de</strong><br />

alguna forma a un conjunto <strong>de</strong> valores).<br />

• No permitiremos algunos tipos especiales <strong>de</strong> <strong>de</strong>claraciones<br />

como "esta proposición es falsa", ya que son <strong>de</strong>claraciones<br />

auto referenciadas que generan paradojas con las que no<br />

queremos lidiar. Tampoco <strong>de</strong>claraciones mal formadas como<br />

la proposición "3 es un elemento <strong>de</strong> 4" ya que 4 no es un<br />

conjunto, o "el conjunto <strong>de</strong> todas las cosas...“ ya que "todas<br />

las cosas“ es un conjunto que no po<strong>de</strong>mos <strong>de</strong>finir<br />

matemáticamente.


Proposiciones y predicados<br />

• Recor<strong>de</strong>mos los conectivos lógicos básicos <strong>de</strong> la lógica<br />

proposicional: conjunción (AND), disyunción (OR) y<br />

negación (NOT). Los conectivos lógicos son operadores<br />

lógicos; toman predicados y <strong>de</strong>vuelven predicados,<br />

permitiendo construir (en un proceso inductivo) predicados<br />

compuestos a partir <strong>de</strong> predicados simples (predicados sin<br />

conectivos).<br />

• El significado preciso <strong>de</strong> los conectivos pue<strong>de</strong> ser <strong>de</strong>finido<br />

mediante tablas <strong>de</strong> verdad, que son estudiadas en los<br />

cursos <strong>de</strong> lógica.


• Tabla <strong>de</strong>l AND<br />

Proposiciones y predicados


• Tabla <strong>de</strong>l OR<br />

Proposiciones y predicados


• Tabla <strong>de</strong>l NOT<br />

Proposiciones y predicados<br />

• Queda como tarea recordar las tablas <strong>de</strong> verdad <strong>de</strong> la<br />

implicancia y <strong>de</strong> la equivalencia


Proposiciones y predicados<br />

• Una implicancia se pue<strong>de</strong> consi<strong>de</strong>rar como un or<strong>de</strong>n entre<br />

predicados, <strong>de</strong>terminando uno más fuerte y uno más débil.<br />

Si se tiene una implicancia verda<strong>de</strong>ra P Q se dice que P<br />

es más fuerte que Q (o que Q es más débil que P).<br />

• Por ejemplo, en la implicancia "X > 42 X > 0", <strong>de</strong>cimos<br />

que "X > 42" es más fuerte que "X > 0". Esto es consistente<br />

con la noción <strong>de</strong> cantidad <strong>de</strong> información, el primer<br />

predicado contiene más información (es más fuerte) que el<br />

segundo.


Proposiciones y predicados<br />

• Dados dos predicados P y Q no siempre se cumple que P <br />

Q o que Q P, por lo que la implicancia es un or<strong>de</strong>n parcial<br />

en el conjunto <strong>de</strong> los predicados, pero no es un or<strong>de</strong>n total.<br />

• Hay un predicado más fuerte que todos los <strong>de</strong>más y es valor<br />

F (falso), ya que para cualquier Q, se cumple que F Q. De<br />

manera análoga, hay un predicado más débil que todos los<br />

<strong>de</strong>más y es el valor V (verda<strong>de</strong>ro), ya que para cualquier P,<br />

se cumple que P V.


Proposiciones y predicados<br />

• Hay proposiciones (y <strong>de</strong> la misma forma predicados) que<br />

son equivalentes, e.g. los predicados "X < 10 OR X > 20" y<br />

"NOT(X >= 10 AND X


Proposiciones y predicados<br />

• Una <strong>de</strong>claración pue<strong>de</strong> ser rescrita en una forma<br />

equivalente, pero que tal vez requiera menos trabajo <strong>de</strong><br />

cómputo para ser evaluada por una computadora.<br />

• Por ejemplo, el predicado "X < 2 OR X > 1" es una<br />

tautología, y es equivalente a V. Lo que se pue<strong>de</strong> ganar con<br />

una rescritura, es que si X varía en un conjunto <strong>de</strong> 100<br />

elementos sería necesario evaluar 200 <strong>de</strong>sigualda<strong>de</strong>s, y<br />

calcular 100 veces un conectivo OR para hallar el valor <strong>de</strong><br />

verdad <strong>de</strong>l predicado en función <strong>de</strong> cada valor <strong>de</strong>l parámetro<br />

X. Si se rescribe el predicado, no importa dón<strong>de</strong> varíe X, se<br />

sabe <strong>de</strong> antemano que para cualquier X el predicado será<br />

verda<strong>de</strong>ro.


Proposiciones y predicados<br />

• Normalmente, se pue<strong>de</strong> evaluar <strong>de</strong> forma sistemática si se<br />

pue<strong>de</strong> aplicar alguna tautología conocida, o regla <strong>de</strong><br />

reescritura, como i<strong>de</strong>mpotencia ( P AND P es equivalente a<br />

P, así como P OR P es equivalente a P), doble negación (<br />

NOT NOT P es equivalente a P), etc<br />

• El siguiente ejemplo es bastante avanzado por el momento,<br />

pero ya po<strong>de</strong>mos compren<strong>de</strong>r por qué el optimizador <strong>de</strong><br />

DB2 ni siquiera acce<strong>de</strong> a la tabla para resolver una consulta.


Proposiciones y predicados<br />

create table numeros(n int);<br />

insert into numeros values (1), (2), (3), (4), (5), (6), (7);<br />

select n<br />

from numeros<br />

where n < 2<br />

Estimated Cost = 7.582313<br />

Optimizer Plan:<br />

RETURN<br />

( 1)<br />

|<br />

TBSCAN<br />

( 2)<br />

|<br />

Table:<br />

DB2INST9<br />

NUMEROS<br />

select n<br />

from numeros<br />

where n < 2 and n > 3<br />

Estimated Cost = 0.000177<br />

Optimizer Plan:<br />

RETURN<br />

( 1)<br />

|<br />

TBSCAN<br />

( 2)<br />

|<br />

TFunc:<br />

SYSIBM<br />

GENROW


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Necesidad <strong>de</strong>l valor NULL<br />

‣ Problemas <strong>de</strong>l valor NULL<br />

‣ Lógica trivalorada


Valores nulos<br />

• Hasta aquí todo es sencillo, las proposiciones lógicas<br />

pue<strong>de</strong>n ser verda<strong>de</strong>ras o falsas, y <strong>de</strong>cimos que trabajamos<br />

en una lógica bi-valorada.<br />

• Sin embargo, en sistemas <strong>de</strong> información, muchas veces<br />

<strong>de</strong>sconocemos alguna información, o no aplica (por ejemplo,<br />

fecha <strong>de</strong> <strong>de</strong>ceso en una base <strong>de</strong> personas).<br />

• Admitiremos la existencia <strong>de</strong> un valor que no es verda<strong>de</strong>ro<br />

ni falso, sino que representa la ausencia <strong>de</strong> información, sea<br />

porque es <strong>de</strong>sconocido (UNKNOWN) o simplemente porque<br />

no aplica. Llamaremos NULL a este valor.


Valores nulos<br />

• Es importante notar que el valor <strong>de</strong>sconocido es un valor<br />

que aplica a todos los tipos <strong>de</strong> datos, y <strong>de</strong> naturaleza<br />

diferente al resto <strong>de</strong> los valores <strong>de</strong>l tipo. Por ejemplo, NULL<br />

no <strong>de</strong>bería ser igual al string vacío o al número entero 0 (se<br />

<strong>de</strong>bería codificar <strong>de</strong> una forma diferente).<br />

• Sin embargo... Oracle implementa el NULL como un string<br />

vacío<br />

“Oracle Database currently treats a character value with a length of zero as null. However,<br />

this may not continue to be true in future releases, and Oracle recommends that you do<br />

not treat empty strings the same as nulls.”<br />

Fuente: http://docs.oracle.com/cd/E11882_01/server.112/e17118/sql_elements005.htm


Valores nulos<br />

• La introducción <strong>de</strong>l valor <strong>de</strong> verdad <strong>de</strong>sconocido hace que<br />

<strong>de</strong>bamos repensar la semántica <strong>de</strong> las operaciones lógicas.<br />

Por ejemplo, ¿qué <strong>de</strong>bería <strong>de</strong>volver el OR entre falso y<br />

<strong>de</strong>sconocido?<br />

• Diremos que cada vez que el valor <strong>de</strong> verdad <strong>de</strong>l resultado<br />

<strong>de</strong> una operación lógica <strong>de</strong>penda <strong>de</strong>l valor que pudiera<br />

tener algún operando <strong>de</strong>sconocido, el resultado será<br />

<strong>de</strong>sconocido (para la semántica <strong>de</strong> la lógica tri-valorada<br />

conviene pensar en NULL como un valor <strong>de</strong>sconocido).<br />

• Así, <strong>de</strong>bemos construir nuevas tablas <strong>de</strong> verdad,<br />

extendidas, para admitir valores <strong>de</strong>sconocidos.


• Tabla <strong>de</strong>l AND, extendida<br />

Valores nulos


• Tabla <strong>de</strong>l OR, extendida<br />

Valores nulos


• Tabla <strong>de</strong>l NOT, extendida<br />

Valores nulos


Valores nulos<br />

• Más allá <strong>de</strong> las operaciones lógicas, al admitir el valor<br />

<strong>de</strong>sconocido en variables <strong>de</strong> cualquier tipo, se nos<br />

presentan otros problemas como ¿cuál <strong>de</strong>bería ser la suma<br />

<strong>de</strong> 5 y NULL? En general, cualquier operación que involucre<br />

un NULL <strong>de</strong>volverá NULL.<br />

• En ocasiones se <strong>de</strong>be <strong>de</strong>volver un valor <strong>de</strong> verda<strong>de</strong>ro o<br />

falso, pero no <strong>de</strong>sconocido. Por ejemplo, si tenemos que<br />

<strong>de</strong>cidir si NULL es mayor que 9 y no po<strong>de</strong>mos <strong>de</strong>volver<br />

NULL, tendremos que tomar una <strong>de</strong>cisión. En general, se<br />

asume que cualquier comparación con NULL es falsa, pero<br />

por supuesto que esto nos traerá problemas.


Valores nulos<br />

• En nuestra lógica bi-valuada teníamos que proposiciones y<br />

predicados <strong>de</strong>l tipo P OR NOT P eran tautologías, pero<br />

consi<strong>de</strong>remos ahora que P tiene el valor NULL... y haga<br />

cuentas !!<br />

• Sólo para hacer énfasis en la complejidad <strong>de</strong>l asunto,<br />

imaginemos que queremos realizar una partición <strong>de</strong>l<br />

conjunto <strong>de</strong> personas; los mayores <strong>de</strong> edad y los menores<br />

<strong>de</strong> edad. Supongamos que tenemos una función para contar<br />

(COUNT), y que al contar las personas <strong>de</strong> 18 años o más el<br />

resultado nos da 37 personas. Por otro lado, las personas<br />

<strong>de</strong> menos <strong>de</strong> 18 años resultan ser 11.<br />

• ¿Cuál es el total <strong>de</strong> personas?


Valores nulos<br />

• Podríamos <strong>de</strong>ducir que el total <strong>de</strong> personas era <strong>de</strong> 37 + 11 =<br />

48, sin embargo esto es cierto solamente si no había<br />

personas con edad <strong>de</strong>sconocida (NULL). Para éstas, las<br />

comparaciones <strong>de</strong> <strong>de</strong>sigualdad se asumirán falsas, por lo<br />

que no sumarán en ninguno <strong>de</strong> los dos conjuntos, y el total<br />

<strong>de</strong> personas podría ser mayor <strong>de</strong>l que se <strong>de</strong>dujo.<br />

• En otras palabras, antes podíamos asumir que un conjunto<br />

se podía particionar en dos subconjuntos: los que cumplían<br />

P y los que cumplían NOT P. Con nulos, un conjunto se<br />

divi<strong>de</strong> en los que cumplen P, los que cumplen NOT P y los<br />

que por tener nulos no cumplen P ni tampoco NOT P.


Valores nulos<br />

• En resumen, la introducción <strong>de</strong>l valor NULL es un mal<br />

necesario, y se <strong>de</strong>be tener mucho cuidado cuando los datos<br />

pue<strong>de</strong>n admitir valores NULL. En los DBMSs existen formas<br />

<strong>de</strong> restringir los tipos <strong>de</strong> datos para que no admitan valor<br />

NULL, y a veces se recomienda hacer esto para evitar el<br />

valor NULL tanto como sea posible, especialmente para<br />

evitar errores como el <strong>de</strong>l ejemplo anterior…


Agenda<br />

Introducción<br />

Valores, variables y tipos<br />

Proposiciones y predicados<br />

Valores nulos<br />

Conclusiones<br />

‣ Aplicabilidad en la disciplina <strong>de</strong><br />

<strong>Bases</strong> <strong>de</strong> <strong>Datos</strong>


Conclusiones<br />

• En el mundo real, las consultas a una Base <strong>de</strong> <strong>Datos</strong> se<br />

basan y se parecen mucho a la lógica <strong>de</strong> predicados<br />

• Algunas construcciones <strong>de</strong> la lógica como las equivalencias,<br />

tautologías y contradicciones se pue<strong>de</strong>n utilizar para<br />

rescribir los predicados y optimizar las búsquedas<br />

• La comprensión <strong>de</strong> la lógica trivalorada es fundamental para<br />

trabajar con <strong>Bases</strong> <strong>de</strong> <strong>Datos</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!