12.07.2015 Views

ALGEBRA Y C´ALCULO RELACIONAL Bases de Datos Universidad ...

ALGEBRA Y C´ALCULO RELACIONAL Bases de Datos Universidad ...

ALGEBRA Y C´ALCULO RELACIONAL Bases de Datos Universidad ...

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.

ÁLGEBRA Y CÁLCULO <strong>RELACIONAL</strong><strong>Bases</strong> <strong>de</strong> <strong>Datos</strong><strong>Universidad</strong> <strong>de</strong> Talca, II Semestre 2005Jorge Pérez R.1


Álgebra RelacionalUn álgebra es un sistema matemático constituido por• Operandos: objetos (valores o variables) <strong>de</strong>s<strong>de</strong> los cualesnuevos objetos pue<strong>de</strong>n ser construidos.• Operadores: símbolos que <strong>de</strong>notan procedimientos paraconstruir nuevos objetos <strong>de</strong>s<strong>de</strong> objetos dados.El álgebra relacional es un álgebra en la cual• Sus operandos son relaciones (instancias) o variables querepresentan relaciones.• Sus operadores están diseñados para hacer la tareas máscomunes que se necesitan para manipular relaciones en unabase <strong>de</strong> datos.El resultado es que el álgebra relacional se pue<strong>de</strong> utilizarcomo un lenguaje <strong>de</strong> consulta.En la práctica el álgebra relacional <strong>de</strong>be ser extendida paraabarcar la mayor parte <strong>de</strong> las tareas reales que se hacen conlos datos.Estudiaremos en <strong>de</strong>talle los operadores clásicos.2


TablasEstas serán las tablas que usaremos en la mayoría <strong>de</strong> ejemplosEmpleadonombre sueldo cod <strong>de</strong>pt fecha ingTorres $ 1.200.000 A1 01/01/2004Soto $ 500.000 A2 01/01/2003Pérez $ 300.000 A2 01/10/2003Figueroa $ 600.000 A1 01/03/2002Salas $ 1.500.000 A1 01/01/2002Ríos $ 2.000.000 A3 01/06/2002Campos $ 800.000 A2 01/11/2003Venegas $ 600.000 A1 01/06/2002Carcamo $ 500.000 A2 01/04/2003Gonzalez $ 2.000.000 A3 01/10/2002Departamentonombre cod <strong>de</strong>pt fecha creacInformática A1 01/03/2002Marketing A2 01/01/2002Ventas A3 01/01/2001Recursos Humanos A4 01/01/2003


SelecciónOperador <strong>de</strong> selección σ, selecciona un subconjunto <strong>de</strong> lastuplas <strong>de</strong> una relación.Tuplas seleccionadas son las que satisfacen cierto predicadológico P. El predicado pue<strong>de</strong> <strong>de</strong>pen<strong>de</strong>r <strong>de</strong> los atributos <strong>de</strong> larelación y <strong>de</strong> valores constantes.El operador σ toma una relación como argumento y el resultadoes una nueva relación.Sintaxis:σ P (r)Seleccionar los datos <strong>de</strong>l empleado Soto:σ nombre=Soto (empleado)nombre sueldo cod <strong>de</strong>pt fecha ingSoto $ 500.000 A2 01/01/2003Los datos <strong>de</strong> los empleados con sueldo ≥ $500.000 que ingresarondurante el 2003:σ sueldo≥500000 ∧ fech ing≥1/1/2004 (empleado)nombre sueldo cod <strong>de</strong>pt fecha ingSoto $ 500.000 A2 01/01/2003Campos $ 800.000 A2 01/11/2003Carcamo $ 500.000 A2 01/04/20033


ProyecciónOperador <strong>de</strong> proyección π, proyecta una relación sobre unsubconjunto <strong>de</strong> sus atributos.El operador π toma una relación como argumento y el resultadoes una nueva relación.Sintaxis:π A (r)don<strong>de</strong> A representa el conjunto <strong>de</strong> atributos sobre los quela relación r se proyectará.Ejemplo: obtener los nombres <strong>de</strong> los distintos <strong>de</strong>partamentosπ nombre (<strong>de</strong>partamento)nombreInformáticaMarketingVentasRecursos HumanosObtener los montos <strong>de</strong> sueldo <strong>de</strong> los empleados:π sueldo (empleado)sueldo$ 1.200.000$ 500.000$ 300.000$ 600.000$ 1.500.000$ 2.000.000$ 800.000se eliminan los repetidos! una relación es un conjunto.4


Composición <strong>de</strong> OperacionesEl resultado <strong>de</strong> cada operación es una nueva relación ⇒ sepue<strong>de</strong>n aplicar operadores a los resultados <strong>de</strong> aplicacionesprevias.Por ejemplo:π A (σ P (r))σ P (π A (r))σ P1 (σ P2 (r))Obtener los nombres <strong>de</strong> los empleados que ganan más <strong>de</strong>$1.000.000.π nombre (σ sueldo>1000000 (empleado))nombreTorresSalasRíosGonzalezObtener el sueldo y la fecha <strong>de</strong> ingreso <strong>de</strong> Soto:π sueldo,fech ing (σ nombre=Soto (empleado))sueldo fecha ing$ 500.000 01/01/20035


UniónDado que las relaciones son conjuntos <strong>de</strong> tuplas, se pue<strong>de</strong>nrealizar las operaciones usuales <strong>de</strong> conjuntos como la unión.Sintaxis: usamos notación infijar 1 ∪ r 2Se <strong>de</strong>ben hacer ciertas restricciones para realizar la unión:• Ambas relaciones <strong>de</strong>ben tener el mismo número <strong>de</strong> atributos.• El dominio <strong>de</strong>l atributo i-ésimo <strong>de</strong> cada relación <strong>de</strong>be coincidir.Obtener los nombres <strong>de</strong> los empleados que ganan mas <strong>de</strong>$1.500.000 o que trabajan en el <strong>de</strong>partamento con códigoA1.π nombre (σ sueldo>1500000 (empleado) ∪ σ cod <strong>de</strong>pt=A1 (empleado))nombreTorresFigueroaSalasRíosVenegasGonzalez6


DiferenciaTambién se pue<strong>de</strong> usar la diferencia <strong>de</strong> conjuntos, las tuplasque están en una relación pero no en la otra.Sintaxis: usamos notación infijar 1 − r 2Para po<strong>de</strong>r realizar la diferencia se <strong>de</strong>ben cumplir las mismasrestricciones que para la uniónEjemplo:π nombre (alumno) − π nombre (σ carrera=Bioinformatica (alumno))Resulta en una relación que contiene a todos los nombres <strong>de</strong>los alumnos excepto <strong>de</strong> los alumnos <strong>de</strong> la carrera <strong>de</strong> Bioinformática.7


Producto CartesianoRepresenta al producto cartesiano usual <strong>de</strong> conjuntos.Combina tuplas <strong>de</strong> cualquieras dos (o más) relaciones, hacela combinación <strong>de</strong> todos con todos.Si las relaciones a operar tienen N y M tuplas <strong>de</strong> n y mcomponentes respectivamente, la relación resultante <strong>de</strong>l elproducto cartesiano tiene N ×M tuplas <strong>de</strong> n+m componentes.Sintaxis: usamos notación infijar 1 × r 2No hay restricciones a los dominios <strong>de</strong> las relaciones similaresa las anteriores operaciones.Nos permite reunir datos <strong>de</strong> dos relaciones distintas.Cuidado con los nombres repetidos! se <strong>de</strong>ben renombrar ciertosatributos para no tener porblemas.<strong>de</strong>partamento × <strong>de</strong>partamentonombre c d fec creac nombre c d fec creacInformática A1 01/03/2002 Informática A1 01/03/2002Informática A1 01/03/2002 Marketing A2 01/01/2002Informática A1 01/03/2002 Ventas A3 01/01/2001Informática A1 01/03/2002 Rec. Hum. A4 01/01/2003Marketing A2 01/01/2002 Informática A1 01/03/2002Marketing A2 01/01/2002 Marketing A2 01/01/2002Marketing A2 01/01/2002 Ventas A3 01/01/2001Marketing A2 01/01/2002 Rec. Hum. A4 01/01/2003Ventas A3 01/01/2001 Informática A1 01/03/2002Ventas A3 01/01/2001 Marketing A2 01/01/2002Ventas A3 01/01/2001 Ventas A3 01/01/2001Ventas A3 01/01/2001 Rec. Hum. A4 01/01/2003Rec. Hum. A4 01/01/2003 Informática A1 01/03/2002Rec. Hum. A4 01/01/2003 Marketing A2 01/01/2002Rec. Hum. A4 01/01/2003 Ventas A3 01/01/2001Rec. Hum. A4 01/01/2003 Rec. Hum. A4 01/01/20038


Producto Cartesiano: EjemplosObtener el nombre <strong>de</strong>l <strong>de</strong>partamento en el que Soto trabaja:Primero hacemos la unión cartesiana igualando un atributoσ <strong>de</strong>pto.cod <strong>de</strong>pto=emp.cod <strong>de</strong>pto (empleado × <strong>de</strong>partamento)Ahora po<strong>de</strong>mos hacer la selección y proyecciónπ <strong>de</strong>pto.nombre (σ emp.nombre=Soto(σ <strong>de</strong>pto.cod <strong>de</strong>pto=emp.cod <strong>de</strong>pto (empleado × <strong>de</strong>partamento)))<strong>de</strong>partamento.nombreMarketing9


RenombreA veces necesitamos obtener información uniendo datos <strong>de</strong>la misma tabla.Por ejemplo, obtener los nombres <strong>de</strong> todos los empleadosque ingresaron <strong>de</strong>spués que Soto a la empresa.Primer intento:empleado × (σ nombre=Soto (empleado))¿Cómo nos referimos a una u otra instancia <strong>de</strong> la tablaempleado?El operador <strong>de</strong> renombre ρ soluciona el problema.El operador ρ toma una relación y entrega la misma relaciónpero con otro nombre, po<strong>de</strong>mos referirnos a distintasinstancias <strong>de</strong> la misma relación.Sintaxis:ρ x (r)Volviendo al ejemplo, obtener los nombres <strong>de</strong> todos los empleadosque ingresaron <strong>de</strong>spués que Soto a la empresa, segundointento:empleado × (σ nombre=Soto (ρ empleado2 (empleado))Ahora po<strong>de</strong>mos hacer:π empleado.nombre (σ empleado.fecha ing>empleado2.fecha ing(empleado × (σ nombre=Soto (ρ empleado2 (empleado))))10


Formalización y Notación <strong>de</strong> ÁrbolEl álgebra relacional es un lenguaje <strong>de</strong> expresiones. Todaexpresión se pue<strong>de</strong> generar a partir <strong>de</strong> las siguientes reglas:• Toda relación <strong>de</strong> la base <strong>de</strong> datos es una expresión.• Si E 1 y E 2 son expresiones entonces las siguientes tambiénson expresiones:◦ E 1 ∪ E 2◦ E 1 − E 2◦ E 1 × E 2◦ σ P (E 1 ) don<strong>de</strong> P es un predicado con atributos <strong>de</strong> E 1◦ π A (E 1 ) don<strong>de</strong> A es una lista <strong>de</strong> atributos <strong>de</strong> E 1◦ ρ x (E 1 ) don<strong>de</strong> x es el nuevo nombre <strong>de</strong> la relación E 1 .Cada expresión generada por las reglas anteriores tiene comoresultado una relación.Toda relación resultado <strong>de</strong> una expresión en el álgebra relacionalse pue<strong>de</strong> ver como un árbol don<strong>de</strong> cada nodo internoestá etiquetado por una operación:• Las hojas son relaciones efectivas <strong>de</strong> la base <strong>de</strong> datos.• La relación representada por un árbol es la relación queresulta <strong>de</strong> aplicar la operación etiquetada en su raíz a lasrelación representadas por cada uno <strong>de</strong> los subárboles hijos.Por ejemplo la relación resultante <strong>de</strong>π <strong>de</strong>pto.nombre (σ emp.nombre=Soto(σ <strong>de</strong>pto.cod <strong>de</strong>pto=emp.cod <strong>de</strong>pto (empleado × <strong>de</strong>partamento)))Está representada por el siguiente árbol (en la pizarra...)A veces es más cómodo representar expresiones extensasusando árboles.11


————————————————-


Operaciones Adicionales, IntersecciónLas operaciones anteriores son suficientes para <strong>de</strong>finir todael algebra relacional.Algunas consultas habituales son complejas <strong>de</strong> realizar concombinaciones <strong>de</strong> operaciones simples, usamos algunos operadoresadicionales.IntersecciónLa intersección usual <strong>de</strong> conjuntos.Sintaxis: usamos notación infijar 1 ∩ r 2Se <strong>de</strong>ben cumplir las mismas restricciones que en la unión ydiferencia, los atributos <strong>de</strong> la relaciones involucradas <strong>de</strong>bentener los mismos dominios.La intersección se pue<strong>de</strong> crear a partir <strong>de</strong> la diferencia:r 1 ∩ r 2 = r 1 − (r 1 − r 2 )Ejemplo:π nombre (alumno preg) ∩ π nombre (alumno posg)resulta en una relación que contiene los nombres <strong>de</strong> todoslos alumnos que son simultáneamente <strong>de</strong> pre y posgrado.12


Reunión Natural(Join)Hace un producto cartesiano <strong>de</strong> sus dos argumentos y realizauna selección forzando la igualdad <strong>de</strong> atributos que aparecenen ambas relaciones.Elimina repetidos (como toda operación <strong>de</strong> conjuntos).Sintaxis:r 1 ⋊⋉ r 2Ejemplo: listar todos los empleados y el nombre <strong>de</strong>l <strong>de</strong>partamentoen el que trabajanπ emp.nombre,<strong>de</strong>pt.nombre (empleado ⋊⋉ <strong>de</strong>partamento)empleado.nombreTorresSotoPérezFigueroaSalasRíosCamposVenegasCarcamoGonzalez<strong>de</strong>partamento.nombreInformáticaMarketingMarketingInformáticaInformáticaVentasMarketingInformáticaMarketingVentas13


Join en GeneralUn forma más general <strong>de</strong> hacer Join es especificando unapropiedad <strong>de</strong> reunión.Se hace entonces un producto cartesiano <strong>de</strong> las dos relacionesy se realiza una selección forzando una propiedad másgeneral que la igualdad <strong>de</strong> atributos que aparecen en ambasrelaciones.Sintaxis:r 1 ⋊⋉ P r 2don<strong>de</strong> P es la propiedad <strong>de</strong> reunión.Ejemplo: listar todos los pares <strong>de</strong> nombres <strong>de</strong> empleados y<strong>de</strong>partamentos tales que el empleado ingresó a la empresaen una fecha anterior a la <strong>de</strong> creación <strong>de</strong>l <strong>de</strong>partamentoπ emp.nombre,<strong>de</strong>pto.nombre (empleado ⋊⋉ (fecha ing


Relaciones TemporalesA veces las consultas se hacen muy extensas.Una forma <strong>de</strong> simplificarlas es usando relaciones temporalesy asignándoles expresiones para usar <strong>de</strong>spués:r ← E asigna la expresión <strong>de</strong> álgebra relaciones E a la nuevarelación r.Ejemplo:temp ← σ sueldo>500000 (empleado ⋊⋉ <strong>de</strong>partamento)π empleado.nombre,<strong>de</strong>partamento.nombre (temp)El último resultado son los nombres <strong>de</strong> empleados y el <strong>de</strong>partamentoen el que trabajan tales que el sueldo <strong>de</strong>l empleadoes mayor a $500.000.15


Cálculo Relacional <strong>de</strong> TuplasEl cálculo relacional <strong>de</strong> tuplas es un lenguaje no procedural.Con el álgebra relacional damos un procedimiento para unaexpresión.π A1 ,B 1(σ A1 =v(r A ⋊⋉ r B ))En el cálculo relacional <strong>de</strong> tuplas especificamos la información<strong>de</strong>seada sin dar un procedimiento para obtenerla.{t|P(t)}Este último conjunto representa a la relación <strong>de</strong> todas lastuplas t que cumplen la propiedad lógica P.Supongamos que necesitamos sólo los nombres <strong>de</strong> los empleadosque tienen sueldo mayor a $500.000.En álgebra relacional usamos el operador π para obtenersólo los nombres. En el cálculo relacional <strong>de</strong> tuplas <strong>de</strong>bemosusar la construcción existe “∃”:∃ t ∈ r(Q(t))que significa: “existe una tupla t en la relación r que cumpleel predicado Q(t)”.Ejemplo: obtener los nombres <strong>de</strong> los empleados que tienensueldo mayor a $500.000.{t | ∃s ∈ empleado (t[nombre] = s[nombre]∧ s[sueldo] > 500000}Se lee: “el conjunto <strong>de</strong> todas las tuplas tales que existe unatupla s en la relación empleado para la cual los valores <strong>de</strong> ty s son iguales en el atributo nombre y el valor <strong>de</strong> s en elatributo sueldo es mayor que 500000”.La variable <strong>de</strong> tupla t se <strong>de</strong>fine sólo en el atributo nombre, esel único atributo cuantificado. El resultado es una relacióncon sólo un atributo.16


Cálculo Relacional <strong>de</strong> Tuplas: EjemplosSupongamos que necesitamos los datos <strong>de</strong> todos los empleados<strong>de</strong>l <strong>de</strong>partamento <strong>de</strong> Marketing y no sabemos el código<strong>de</strong>l <strong>de</strong>partamento.En álgebra relacional usamos el operador ⋊⋉ para obtener losdatos <strong>de</strong> ambas tablas.En el cálculo relacional <strong>de</strong> tuplas <strong>de</strong>bemos usar también laconstrucción existe:{t | t ∈ empleado ∧ ∃s ∈ <strong>de</strong>partamento (s[cod <strong>de</strong>pto] =t[cod <strong>de</strong>pto] ∧ s[nombre] = marketing}Se lee: “el conjunto <strong>de</strong> todas las tuplas t <strong>de</strong> la relaciónempleado tales que existe una tupla s en la relación <strong>de</strong>partamentopara la cual los valores <strong>de</strong> t y s son iguales en el atributocod <strong>de</strong>pto y el valor <strong>de</strong> s en el atributo nombre es marketing”.¿Cómo expresamos consultas <strong>de</strong>l tipo “los nombres <strong>de</strong> todoslos alumnos que no son <strong>de</strong> bioinformática, suponiendo quecontamos con las relaciones alumno y alumno bioinformatica?Necesitamos el operador lógico <strong>de</strong> negación “¬”.{t | ∃s ∈ alumno (s[nombre] = t[nombre])∧ ¬∃u ∈ alumno bioinformatica (u[nombre] = t[nombre])}Se lee: “el conjunto <strong>de</strong> todas las tuplas t tales que existeuna tupla s en la relación alumno que comparte el atributonombre con t y NO existe una tupla u en la relaciónalumno bioinformatica que comparta el atributo nombre cont”.17


Cálculo Relacional <strong>de</strong> Tuplas: Ejemplos (cont.)En general po<strong>de</strong>mos usar “casi” cualquier expresión lógicapara seleccionar tuplas.Po<strong>de</strong>mos usar las construcciones para todo “∀”, implica que“⇒”, etc.{t | ∃s ∈ <strong>de</strong>patamento (s[nombre] = t[nombre] ∧∀u ∈ empleado (u[cod <strong>de</strong>pto] = s[cod <strong>de</strong>pto] ⇒ u[sueldo] >500000))}Se lee: “el conjunto <strong>de</strong> todas las tuplas t tales que, existeuna tupla s en la relación <strong>de</strong>partamento con la que comparteel atributo nombre y que para toda tupla u en la relaciónempleado, si u comparte el atributo cod <strong>de</strong>pto con s entoncesel valor <strong>de</strong>l atributo sueldo <strong>de</strong> u es mayor que 500000.En este conjunto están los nombres <strong>de</strong> los <strong>de</strong>partamentoscuyos empleados tienen todos un sueldo mayor a $500.000.¿Cómo hacemos esta consulta en álgebra relacional?¿Por qué “casi” todas las expresiones lógicas? ¿Qué resulta<strong>de</strong> la siguiente consulta?{t | ¬(t ∈ empleado)}¡Resulta una relación con un número infinito <strong>de</strong> tuplas!¡Tuplas que ni siquiera se encuentran en nuestra base <strong>de</strong>datos!No aceptamos entonces este tipo <strong>de</strong> consultas, aceptamossólo consultas seguras.Una consulta {t | P(t)} es segura si el resultado son valoresque pertenecen a dom(P), don<strong>de</strong> dom(P) es la unión <strong>de</strong> losdominios <strong>de</strong> todas las relaciones que aparecen en P.{t | ¬(t ∈ empleado)} no es segura{t | t ∈ alumno ∧ ¬(t ∈ alumno bioinformatica)} si es segura.18


Cálculo Relacional <strong>de</strong> DominiosEs un lenguaje <strong>de</strong> consulta sobre el mo<strong>de</strong>lo relacional noprocedural.A diferencia <strong>de</strong>l cálculo relacional <strong>de</strong> tuplas, consulta acercavalores <strong>de</strong>l dominio <strong>de</strong> los atributos <strong>de</strong> las relaciones, no <strong>de</strong>las tuplas <strong>de</strong> éstas.Una consulta en cálculo relacional <strong>de</strong> dominios es <strong>de</strong> la siguienteforma:{< x 1 , x 2 , . . . , x n > | P(x 1 , x 2 , . . . , x n )}dón<strong>de</strong> x 1 , x 2 , . . . , x n se llaman variables <strong>de</strong> dominio y P es unafórmula proposicional sobre las variables <strong>de</strong>l dominio.Ejemplo: Obtener el nombre, el código y la fecha <strong>de</strong> creación<strong>de</strong> los <strong>de</strong>partamentos creados <strong>de</strong>spués <strong>de</strong>l 2003{< a, b, c > | < a, b, c >∈ <strong>de</strong>partamento ∧ c > 1/1/2003}Ejemplo: Obtener el nombre <strong>de</strong> los empleados que ganan$800.000{< n > | ∃a, b, c(< n, a, b, c >∈ empleado ∧ c = 800000)}Ejemplo: Obtener los nombres <strong>de</strong> los empleados y <strong>de</strong> los<strong>de</strong>partamentos en los que trabajan{< e, d > | ∃a, b, c, f (< e, a, b, c >∈ empleado ∧< d, a, f >∈ <strong>de</strong>partamento}A veces es más simple representar consultas para atributosespecíficos en el cálculo <strong>de</strong> dominios que en el cálculo <strong>de</strong>tuplas.También existe una noción muy similar <strong>de</strong> consultas segurasen el cálculo <strong>de</strong> tuplas. Las consultas que se salen <strong>de</strong>l dominiono son seguras.19


Álgebra vs Cálculo RelacionalEl cálculo relacional nos entrega dos lenguajes <strong>de</strong> consultaen una base <strong>de</strong> datos bajo el mo<strong>de</strong>lo relacional.A veces se hace mucho más “natural” expresar consultas enun lenguaje <strong>de</strong> cálculo relacional que con el álgebra relacional.Ventaja: se expresa “lo que se quiere” sin necesitar explicarcómo obtenerlo (sin especificar un procedimiento).Resultado muy importante:El álgebra relacional, el cálculo relacional <strong>de</strong> tuplas y elcálculo relacional <strong>de</strong> dominios tienen el mismo po<strong>de</strong>rexpresivo ⇒ pue<strong>de</strong>n respon<strong>de</strong>r el mismo tipo<strong>de</strong> consultas en una base <strong>de</strong> datos relacional.20


Modificación <strong>de</strong> la Base <strong>de</strong> <strong>Datos</strong>Hasta ahora hemos visto como obtener información <strong>de</strong>s<strong>de</strong> laBase <strong>de</strong> <strong>Datos</strong>.Es necesario entregar herramientas para po<strong>de</strong>r alterar el estado<strong>de</strong> la Base <strong>de</strong> <strong>Datos</strong>.Eliminación, Inserción, Actualización son algunas <strong>de</strong> las tareasnecesarias, usaremos el álgebra relacional.EliminaciónUsamos el operador <strong>de</strong> diferencia (−) y asignación (←)r ← r − Edon<strong>de</strong> r es una relación y E una expresión <strong>de</strong>l álgebra relacional.Eliminar los datos <strong>de</strong> Sotoempleado ← empleado−σ nombre=Soto (empleado)Eliminar todos los empleados <strong>de</strong>l <strong>de</strong>partamento <strong>de</strong> Marketingr 1 ←σ <strong>de</strong>p.nombre=Marketing (empleado ⋊⋉ <strong>de</strong>partamento)r 2 ←π emp.nombre,sueldo,emp.cod <strong>de</strong>pto,fech ing (r 1 )empleado ← empleado − r 2nombre sueldo cod <strong>de</strong>pt fecha ingTorres $ 1.200.000 A1 01/01/2004Figueroa $ 600.000 A1 01/03/2002Salas $ 1.500.000 A1 01/01/2002Ríos $ 2.000.000 A3 01/06/2002Venegas $ 600.000 A1 01/06/2002Gonzalez $ 2.000.000 A3 01/10/200221


Modificación <strong>de</strong> la Base <strong>de</strong> <strong>Datos</strong> (cont.)InserciónUsamos el operador <strong>de</strong> uniónr ← r ∪ Edon<strong>de</strong> r es una relación y E una expresión <strong>de</strong>l álgebra relacional.Agregar el <strong>de</strong>partamento <strong>de</strong> Finanzas con código A5 y fecha<strong>de</strong> creación 5/8/2004<strong>de</strong>partamento ← <strong>de</strong>partamento ∪ {(Finanzas,A5,5/8/2004)}nombre cod <strong>de</strong>pt fecha creacInformática A1 01/03/2002Marketing A2 01/01/2002Ventas A3 01/01/2001Recursos Humanos A4 01/01/2003Finanzas A5 05/08/2004ActualizaciónA veces queremos cambiar el valor <strong>de</strong> algún atributo <strong>de</strong> unatupla sin cambiarla entera. Podría hacerse una eliminación einserción, pero resulta engorrosos muchas veces.Usamos un nuevo operador δ (no reasignamos!):δ A←E (r)que representa el hecho <strong>de</strong> cambiar el atributo A por la expresiónmatemática E en la relación r.Subir el sueldo <strong>de</strong> todos los empleados en %10 si su sueldoactual es mayor que $1.000.000 y en %20 si es menorδ sueldo←sueldo∗1,1 (σ sueldo≥1000000 (empleado))δ sueldo←sueldo∗1,2 (σ sueldo


Cuidado con el or<strong>de</strong>n!!!nombre sueldo cod <strong>de</strong>pt fecha ingTorres $ 1.320.000 A1 01/01/2004Soto $ 600.000 A2 01/01/2003Pérez $ 360.000 A2 01/10/2003Figueroa $ 720.000 A1 01/03/2002Salas $ 1.650.000 A1 01/01/2002Ríos $ 2.200.000 A3 01/06/2002Campos $ 960.000 A2 01/11/2003Venegas $ 720.000 A1 01/06/2002Carcamo $ 600.000 A2 01/04/2003Gonzalez $ 2.200.000 A3 01/10/2002


VistasHasta ahora hemos operado al nivel conceptual, directamentecon las tablas <strong>de</strong> la base <strong>de</strong> datos. Muchas veces es mejorque ciertos usuarios tenga acceso a ciertos datos o vistas <strong>de</strong>los datos.Por ejemplo en una aplicación para fijar reuniones, los empleados<strong>de</strong>ben po<strong>de</strong>r ver los nombres <strong>de</strong> los empleados y los<strong>de</strong>partamentos a los que pertenecen pero no sus sueldos.π emp.nombre,emp.cod <strong>de</strong>pt,<strong>de</strong>pt.nombre (empleado ⋊⋉ <strong>de</strong>partamento)Para crear una vista usaremos conceptualmente la sentenciacreate view <strong>de</strong> la siguiente forma:create view v as Edón<strong>de</strong> v es el nombre <strong>de</strong> la vista a crear y E es una expresión<strong>de</strong> consulta.Una vista pue<strong>de</strong> usarse como cualquier relación efectiva <strong>de</strong>la base <strong>de</strong> datos, pero cuidado una vista NO es una nuevarelación, es simplemente una forma abreviada <strong>de</strong> referirse auna consulta. La vista se instancia cada vez que nos referimosa ella.Ejemplo:create view importantes asπ nombre,cod <strong>de</strong>pt (σ sueldo≥1000000 (empleado))importantesnombre cod <strong>de</strong>ptTorres A1Salas A1Ríos A3Gonzalez A323


Actualización <strong>de</strong> Vistas y Valores NulosLas vistas son útiles para consultar datos, pero presentanproblemas para actualizaciones.Por ejemplo, si escribimosimportantes ← importantes ∪ {(Gomez,A4)}implica una actualización <strong>de</strong> la relación empleado pero sinespecificar ni sueldo ni fecha <strong>de</strong> ingreso. Existen entoncesdos posibilida<strong>de</strong>s:• Rechazar la inserción y gatillar un error.• Insertar la tupla (Gomez,null,A4,null) en la relación empleadoEl valor ‘null’ representa un valor nulo, <strong>de</strong>sconocido o que noexiste. Todas las comparaciones que implican ‘null’ son por<strong>de</strong>finición falsas (esto último tendrá implicancias prácticasimportantes).Un problema importante <strong>de</strong> la anterior actualización es que,a pesar <strong>de</strong> que la relación empleado tiene una nueva tuplanombre sueldo cod <strong>de</strong>pt fecha ingTorres $ 1.200.000 A1 01/01/2004Soto $ 500.000 A2 01/01/2003Pérez $ 300.000 A2 01/10/2003Figueroa $ 600.000 A1 01/03/2002Salas $ 1.500.000 A1 01/01/2002Ríos $ 2.000.000 A3 01/06/2002Campos $ 800.000 A2 01/11/2003Venegas $ 600.000 A1 01/06/2002Carcamo $ 500.000 A2 01/04/2003Gonzalez $ 2.000.000 A3 01/10/2002Gomez null A4 nullLa vista importantes no cambia24


Actualización <strong>de</strong> Vistas (cont.)El siguiente es el reultado <strong>de</strong> la vista importantes antes y<strong>de</strong>spués <strong>de</strong> la inserción si se ingresan valores nulos para losatributos no especificados.importantesnombre cod <strong>de</strong>ptTorres A1Salas A1Ríos A3Gonzalez A3importantes ← importantes ∪ {(Gomez,A4)}importantesnombreTorresSalasRíosGonzalezcod <strong>de</strong>ptA1A1A3A3El tema <strong>de</strong> actualización sobre vistas es muy interesante <strong>de</strong>s<strong>de</strong>el punto <strong>de</strong> vista teórico y aun hay investigación en el áreaprincipalmente por el crecimiento <strong>de</strong> necesida<strong>de</strong>s <strong>de</strong> integración<strong>de</strong> información.Una posible solución al problema sería haber insertado datos(mínimos) adicionales al ingresar la nueva tupla en la vista <strong>de</strong>manera <strong>de</strong> obtener el resultado <strong>de</strong>seado, o sea, haber insertadola tupla con atributo (Gomez, 1000000, A4, null) pero¿cómo po<strong>de</strong>mos tomar esta <strong>de</strong>cisión automáticamente?... uninteresante tema para estudiar...25

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

Saved successfully!

Ooh no, something went wrong!