840 likes | 1.29k Views
Modelo relacional. Informática aplicada. Contenido. Estructura de las bases de datos relacionales Operaciones básicas del álgebra relacional Operaciones adicionales del álgebra relacional Valores nulos Modificación de la base de datos. Ejemplo de una relación. Estructura básica.
E N D
Modelo relacional Informática aplicada
Contenido • Estructura de las bases de datos relacionales • Operaciones básicas del álgebra relacional • Operaciones adicionales del álgebra relacional • Valores nulos • Modificación de la base de datos
Estructura básica Formalmente, dados los conjuntos D1, D2, …, Dn una relación es un subconjunto de D1D2, Dn Entonces, una relación es un conjunto de n-tuplas (a1, a2, …, an) donde cada a1D1. • Ejemplo: Si • custome_name = {Jones, Smith, Curry, Linsay, …} /*conjunto de todos los nombre*/ • customer_street = {Main, North, Park, …} /*conjunto de todos los nombres de calles*/ • customer_city = {Harrison, Rye, Pittsfield, ..} /*conjunto de todos los nombres de ciudades*/ Entonces r = {(Jones, Main, Harrison), (Smith, North, Rye), (Curry, North, Rye), (Linsay, Park, Pittsfield)} Es una relación sobre custome_namecustomer_streetcustomer_city
Tipos de atributos • Cada atributo de una relación tiene nombre • El conjunto de valores permitidos para cada atributo es llamado el dominio del atributo. • Los valores de los atributos (normalmente) se requiere que sea atómicos, esto es, idivisibles. • Los valores multivaluados no son atómicos • Los atributos compuestos no son atómicos • Un valor especial null es miembro de todo dominio. • Los valores nulos causan complicaciones en la definición de mucha operaciones. • Ignoraremos los efectos de los valores nulos en nuestra presentación principal y consideraremos sus efectos después.
Esquema de relaciones • A1, A2, …, An son atributos • R = (A1, A2, …, An ) es un esquema de relación Customer_schema = (customer_name, customer_street, customer_city) • r(R) es una relación en el esquema de relación R customer(Customer_schema)
Esquemas del banco • Account-schema = (account-number, branch-name, balance) • Branch-schema = (branch-name, branch-city, assets) • Customer-schema = (customer-name, customer-street, customer-city) • Depositor -schema = (customer-name, account-number) • Loan-schema = (loan-number, branch-name, amount) • Borrower-schema = (customer-name, loan-number)
Instancia de relación • Los valores actuales (instanciaderelación) de una relación son especificados por una tabla • Un elemento t de r es una tupla, representada por un renglón en la tabla atributos (o columnas) customer-name customer-street customer-city Jones Smith Curry Lindsay Main North North Park Harrison Rye Rye Pittsfield tuplas (o renglones) customer
Las relaciones no tiene orden • El orden en la tuplas es irrelevante (las tuplas se pueden almacenar en orden arbitrario) • Relación account con tuplas desordenadas
Bases de datos • Una base de datos consiste de múltiples relaciones • La información acerca de una empresa es rota en partes, con cada relación guardando una parte de la información • account: guarda información de las cuentas • depositor: guarda información acerca de que cliente posee cual cuenta. • customer: guarda información acerca de los clientes • Guardando información como una relación simple como bank(account_number, balance, customer_name, …) resulta en • Repetición de infrormación (dos clientes poseen una cuenta) • Necesidad de valores nulos (representar un cliente sin una cuenta) • La teoría de normalización trata del diseño de esquemas relacionales.
Claves • Sea K R • K es superllave de R los valores de K son suficientes para identificar una tupla única de cada posible relación r(R) • Por “posible r” queremos decir una relación r que puede existir en una empresa que estemos modelando. • Ejemplo: {cutomer_name, customer_street} y {cutomer_name} • Son ambas superllaves de customer, si ningún par de clientes pueden tener el mismo nombre. • K es una llave candidata si K es mínima. • Ejemplo: {cutomer_name} es una llave candidata para customer, ya que es una supellave , y ningún subconjunto de esta es superllave. • Debe cumplirse que si t1 y t2 están en r y t1t2, entonces t1[K] t2[K].
Determinando claves desde conjuntos ER • Conjunto de entidades fuertes: La llave primaria de una entidad viene a ser la llave primaria de la relación • Conjunto de entidades débil: La llave primaria de la relación consiste de la unión de la llave primaria de la entidad fuerte y el discriminador de la entidad debil • Conjunto de relaciones: La unión de las llaves primarias de los conjuntos de entidades relacionadas es la superllave de una relación. • Para un conjunto de relaciones binarias de mucho a uno, la llave primaria del conjunto de entidades “muchos” es la llave primaria de la relación • Para un conjunto de relaciones uno a uno, la llave primaria de la relación puede ser cualquiera de las llaves de los conjuntos de entidades. • Para un conjunto de relaciones muchos a muchos, la unión de las llaves primarias viene a ser la llave primaria de la relación
Diagrama esquema para la empresa del banco En el diagrama del esquema aparece cada relación como un rectángulo con loa atributos listados adentro y el nombre de la relación arriba. En un recuadro superior del rectángulo aparecen los atributos clave. Las dependencias de llaves foráneas aparecen como flechas desde la llave foránea hasta la llave primaria de la relación referenciada.
Lenguajes de consulta • Lenguajes para que el usuario solicite información de la base de datos • Categorías de los lenguajes • Procedural • No Procedural • Lenguajes puros • Álgebra relacional • Cálculo relacional de tuplas • Cálculo relacional de dominios • Los lenguajes puros forman la base de los lenguajes de consulta que usa la gente
Álgebra relacional • Lenguaje procedural • Seis operadores básicos • Selección • Proyección • Unión • Diferencia de conjuntos • Producto cartesiano • Renombrado • Los operadores toman dos o más relaciones como entrada y generan una nueva relación como resulatdo
Operación de selección - ejemplo Relación r sA=B^D>5(r)
Operación de selección • Notación: sp(r) • p es llamado predicado de selección • Definido como: sp(r) = {t | tr y p(t)} Donde p es una fórmula del cálculo proposicional consistiendo de términos conectados por: (y), (o), (no) Cada término es uno de: <atributo> op <atributo> o <constante> Donde op es uno de: =, , >, ,<, • Ejemplo de selección: sbranch_name(account)
Ejemplos • sbranch_name=‘Perryridge’ (loan) • sloan>1200 (loan) • sloan>1200 ^ branch_name=‘Perryridge’ (loan) • sloan>1200 ^ loan<4000 (loan)
Operación de proyección - ejemplo Relación r PA, C(r)
Operación de proyección • Notación: PA1,A2,…,Ak(r) • Donde A1, A2, son nombres de atributos y r es el nombre de la relación • El resultado está definido como una relación de k columnas obtenidas al borrar las columnas no listadas • Los renglones duplicados son eliminados del resultado, yaque son conjuntos • Ejemplo: para eliminar el atributo branch_name de account Paccount_number, balance(account)
Operación de unión - ejemplo Relaciones r y s r s
Operación de unión • Notación: r s • Definido como: r s = {t | tr o ts} • Para que r s sea válido • r y s deben tener la misma aridad (mismo número de atributos) • Los atributos deben ser compatibles (los valores de las columnas correspondientes debes ser del mismo tipo) • Ejemplo: encontrar todos los clientes con una cuenta o un préstamo Pcustomer_name(depositor) Pcustomer_name(borrowert
Operación de diferencia - ejemplo Relaciones r y s r - s
Operación de diferencia • Notación: r - s • Definido como: r - s = {t | tr y ts} • Para que r - s sea válido • r y s deben tener la misma aridad (mismo número de atributos) • Los atributos deben ser compatibles (los valores de las columnas correspondientes debes ser del mismo tipo) • Ejemplo: encontrar todos los clientes con una cuenta pero sin un préstamo Pcustomer_name(depositor) - Pcustomer_name(borrower)
Operación de producto cartesiano - ejemplo Relaciones r y s r s
Operación de producto cartesiano • Notación: r s • Definido como: r s = {t q | tr y q s} • Se supone que los atributos de r(R) y s(S) son disjuntos. (R S = ) • Si no son disjuntos, se debe usar renombrado.
Composición de operaciones • Se pueden construir expresiones usando múltiples operaciones • Ejemplo: sA=B (r s) • r s • sA=B (r s)
Ejemplos • Nombres de clientes que viven en Harrison. Pcustomer-name (scustomer-city =“Harrison”(customer)) • bcustomer_name, borrower.loan_number, loan.loan_number, branch_name, amount sbranch-name =“Perryridge”(borrower × loan) • Misma que la anterior pero de clientes que SI tiene préstamo. sborrower.loan_number= loan.loan_number(sbranch-name =“Perryridge”(borrower × loan)) • Solo los nombres Pbcustomer_name(sborrower.loan_number= loan.loan_number(sbranch-name =“Perryridge”(borrower × loan)))
Operación de renombrado • Permite nombrar, y por lo tanto referirse a, el resultado de una expresión del álgebra relacional • Permite referirse a una relación con más de un noombre Ejemplo: rx (E) regresa la expresión E bajo el nombre x. Si la expresión de álgebra relacional E tiene aridad n, entonces rx(A1, A2,…, An) (E) regresa la expresión E bajo el nombre x y con los atributos renombrados A1, A2, …, An.
Banking Example branch (branch-name, branch-city, assets) customer (customer-name, customer-street, customer-only) account (account-number, branch-name, balance) loan (loan-number, branch-name, amount) depositor (customer-name, account-number) borrower (customer-name, loan-number)
Example Queries • Encontrar todos los préstamos sobre $1200 amount> 1200 (loan) • Encontrar los números de préstamo para cada préstamo para el cual la cantidad es mayos que $1200. loan-number (amount> 1200 (loan))
Example Queries • Encontrar los nombres de todos los clientes que tienen un préstamo, o una cuenta o ambos en el banco. customer-name (borrower) customer-name (depositor) • Encontrar los nombres de todos los clientes que tienen un préstamo y una cuenta en el banco. customer-name (borrower) customer-name (depositor)
Example Queries • Encontrar los nombres de todos los clientes que tienen un préstamo en la sucursal Perryridge customer-name (branch-name=“Perryridge” (borrower.loan-number = loan.loan-number(borrower x loan))) • Encontrar los nombres de todos los clientes que tienen un préstamo en la sucursal Perryridge pero que no tienen cuenta en cualquier sucursal del banco. customer-name (branch-name = “Perryridge” (borrower.loan-number = loan.loan-number(borrower x loan))) – customer-name(depositor)
Example Queries • Encontrar los nombres de todos los clientes que tienen un préstamo en la sucursal Perryridge • Query 1customer-name(branch-name = “Perryridge”( borrower.loan-number = loan.loan-number(borrower x loan))) Query 2 customer-name(loan.loan-number = borrower.loan-number( (branch-name = “Perryridge”(loan)) x borrower))
Example Queries Encontrar la cuenta con el saldo más alto. Renombre la relación account como d La consulta es balance(account) - account.balance (account.balance < d.balance(account x rd (account)))
Definiciones formales • Una expresión básica del álgebra relacional consiste de una de las siguientes: • Una relación en la base de datos • Una relación constante • Sean E1 y E2 expresiones del álgebra relacional: las siguientes son todas expresiones del álgebra relacional: • E1 E2 • E1 – E2 • E1 E2 • sp(E1), p es un predicado en atributos en E1 • Ps(E1), S es una lista consistiendo de algunos de los atributos en E1 • r x (E1) x es un nuevo nombre para el resultado de E1.
Operaciones adicionales Agregaremos nuevas operaciones que no añaden poder al álgebra relacional, pero que simplifican consultas comunes. • Intersección de conjuntos • Reunión natural • División • Asignación
Operación de intersección • Notación: r s • Definido como: r s = {t | tr y ts} • Para que r s sea válido • r y s deben tener la misma aridad (mismo número de atributos) • Los atributos deben ser compatibles (los valores de las columnas correspondientes debes ser del mismo tipo) • Nota: r s = r – ( r – s)
Operación de unión - ejemplo Relaciones r y s r s
Operación unión natural • Notación: r s • Sean r y s relaciones en los esquemas R y S respectivamente. Entonces, r s es una relación en esquema R S obtenida como sigue: • Considere un par de tuplas tr en r y ts en s. • Si tr y ts tienen el mismo valor en cada uno de los atributos de R S, agregar t al resultado, donde • t tiene el mismo valor que tr en r • t tiene el mismo valor que ts en s • Ejemplo • R = (A, B, C, D) • S = (E, B, D) • Esquema resultante = (A, B, C, D, E) • r s se define como: Pr.A, r.B, r.C, r.D, s.E(s r.B = s.B ^ r.D = s.D(r s))
Ejemplo de reunión natural r s r s
Operación de división r s • Adecuada para las consultas que incluyen la frase “para todos” • Sean r y s relaciones en los esquemas R y S respectivamente donde: • R = (A1, …, Am, B1, …, Bn) • S = (B1, …, Bn) • El resultado de r s es una relación en el esquema R – S = (A1, …, Am) • r s = {t | t PR-S(r) ^ u s(tu r) }
Ejemplo de división s r r s
Otro ejemplo de división r s r s
Operación de división cont. • Propiedad • Sea q – r s • Entonces q es la relación más grande que satisface q r s • Definición en términos de las operaciones básicas del álgebra relacional. Sea r(R) y s(S) relaciones, y sea S R r s = PR–S(r) – PR–S((PR–S(r) s) – PR–S,S(r)) • Para ver como • PR–S,S(r) simplemente reordena los atributos de r • PR–S((PR–S(r) s) – PR–S,S(r)) da aquellas tuplas en PR–S(r) tales que para alguna tupla u s, ts r.
Operación de asignación • La operación de asignación ( ) provee una forma conveniente de expresar consultas complejas. • Escriba consultas como un programa secuencial consistiendo en • Una seria de asignaciones • Seguidas por una expresión cuyo valor es desplegado como resultado de la consulta • Las asignaciones deben ser hechas sobre variables de relación temporales • Ejemplo: escriba r s como • temp1 PR–S(r) • temp2 PR–S((temp1 s) – PR–S,S(r)) • result temp1 – temp2 • El resultado a la derecha de es asignado a la variable relación a la izquierda de . • Se puede usar la variable en las expresiones subsecuentes.
Consulta 1 CN(BN=“Downtown”(depositoraccount)) CN(BN=“Uptown”(depositoraccount)) Donde CN denota customer-name y BN denota branch-name. Consulta 2 customer-name, branch-name(depositoraccount) temp(branch-name) ({(“Downtown”), (“Uptown”)}) Ejemplos de Consultas • Encontrar los clientes que tienen una cuenta en por lo menos en la sucursal “Downtown” y “Uptows”