BASES DE DADOS I LTSI/2 Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011 Sistema Gestor de Bases de Dados Requisitos Fundamentais de um SGBD: Segurança. É um dos requisitos básicos exigidos a um SGBD. Consiste basicamente em proteger os dados armazenados dos acessos não autorizados e garantir que todas as operações executadas sobre a base de dados o são por utilizadores (aplicações) devidamente credenciados. Sistema Gestor de Bases de Dados Requisitos Fundamentais de um SGBD: Integridade. Por definição, uma base de dados está num estado de integridade se todos os dados que contém são válidos, isto é, não contradizem a realidade que estão a representar nem se contradizem entre si. Todas as operações que envolvam alteração da informação contida numa base de dados implicam evoluções no seu estado de integridade. O SGBD possui regras que garantem a integridade após cada processo de alteração de informação (restrições de integridade). Sistema Gestor de Bases de Dados Requisitos Fundamentais de um SGBD: Controlo Já da Concorrência atrás foi referido que uma das vantagens importantes de um modelo de base de dados é a possibilidade de execução paralela. Cabe ao SGBD a definição de políticas de escalonamento por forma a garantir que cada utilizador (aplicação-cliente) interage com a base de dados como se fosse o único. O mecanismo de transacção é a unidade base que garante a concorrência. Sistema Gestor de Bases de Dados Requisitos Fundamentais de um SGBD: Tolerância a Falhas Devido à potencial importância dos dados armazenados numa base de dados, é essencial a implementação de mecanismos de tolerância a falhas (hardware / software), que garantam a reposição da informação para um estado anterior válido. Para tal são utilizados basicamente dois mecanismos: Backups: Implementação de cópias de segurança com estados válidos da base de dados Registos de actividade (Logging). Registo de todas as operações efectuadas sobre a base de dados. Pode facilitar a identificação de origens de problemas e evitar que se voltem a repetir Transacções O exemplo típico ilustrativo da necessidade de implementar transacções é o da transferência de dinheiro entre duas entidades “A” e “B”. Imagine-se que o cliente “A” efectuou uma compra de 1000 euros à empresa “B”, sendo necessário respectivamente debitar e creditar este valor nas correspondentes contas. Em primeiro lugar, é debitado o valor na conta de “A”, passando este a apresentar saldo (X-1000). Imagine-se agora a ocorrência de uma qualquer situação excepcional que interrompe a aplicação que está a manipular a informação, e a quantia não é creditada na conta de “B”. Nesta situação, a informação da base de dados fica corrompida, sem que haja uma forma imediata de percepção da falha. Transacções Este exemplo demonstra que existem situações em que é necessário garantir que, de entre um conjunto de operações, ou são executadas todas ou nenhuma delas o será, permanecendo em qualquer dos casos a base de dados num estado consistente. Uma Transacção é, então, um conjunto de operações efectuadas sobre a base de dados, perfeitamente delimitado em que garantidamente são executadas todas as instruções ou então nenhuma o será. Begin Transaction Operação 1 Operação 2 ... Operação n End Transaction Transacções Por definição, uma transacção deve exibir algumas características fundamentais (Propriedades ACID): Atomicidade (Atomicity) O conjunto de instruções que compõem a transacção é indivisível, no sentido em que todas elas são executadas, ou então nenhuma o será. Sempre que todas sejam executadas sem nenhuma situação excepcional diz-se que foi executado o COMMIT da transacção. Na ocorrência de alguma situação excepcional que impossibilite a sua completa execução, deve ser anulado o efeito de todas as instruções que compõem a transacção e que ainda foram executadas (ROLLBACK). Transacções Integridade (Consistency) Uma transacção deve, após a sua completa execução, deixar a base de dados num estado consistente. Pode acontecer que, entre a execução de alguma das operações que a compõem, a consistência não se verifique, no entanto após a execução de todas as operações, ela tem que ser verificada. Transacções Isolamento (Isolation) Apesar de ser possível a execução paralela e simultânea de diferentes transacções, o sistema deve dar a ilusão de que cada uma delas é a única a executar, estando por isso aparentemente isolada. Sempre que existam várias transacções a aceder aos mesmos dados, o sistema deve evitar que existam interferências mútuas, e que o estado final da base de dados seria o mesmo após a eventual execução em série. Transacções Persistência (Durability) Deve ser assegurado que após a execução bem sucedida de uma transacção (COMMIT), os efeitos dela resultantes se tornam persistentes (não voláteis) na base de dados. Qualquer transacção futura deve operar sobre o novo conjunto de dados, bem como qualquer eventual falha não deve anular as alterações entretanto produzidas. Desta forma os efeitos de cada transacção podem apenas ser desfeitos ou alterados por outras transacções. Linguagens da Bases de Dados Nas linguagens de programação mais comuns, as instruções de declaração e execução fazem parte de um só conjunto, isto é, estão englobadas pela mesma linguagem. Em modelos de bases de dados a interacção com o nível aplicacional fazse através de linguagens específicas: Data Definition Language Utilizada para definir a estrutura da base de dados e da informação que deve armazenar. Uma vez que não possui instruções de execução (não pode ser utilizada para obter ou alterar os dados em si), pode ser entendida como uma notação utilizada para descrever a estrutura da informação. Linguagens da Bases de Dados Data Manipulation Language (DML) É a linguagem disponibilizada ao nível aplicacional para obter, armazenar, alterar ou eliminar informação da base de dados. As instruções pertencentes a esta linguagem podem ser executadas interactivamente por um utilizador a partir do terminal, ou estar embebidas em linguagens hospedeiras (C, Pascal, Visual Basic, Fortran, ...). Como se verá à frente, a linguagem focada neste curso (Structured Query Language - SQL) possui sub-conjuntos de instruções de definição (SQL-DDL) e de manipulação (SQL-DML) de informação. Modelos de Dados Pode-se definir um Modelo de Dados como sendo um conjunto de instrumentos conceptuais para descrever os dados, as suas relações, semântica e restrições. Um modelo de dados é, pelo menos, a colecção de 3 componentes: Um conjunto de tipos de estruturas de dados. Uma colecção de operadores. Define o tipo de dados a armazenar, e os relacionamentos existentes. Operam (manipulam) as estruturas de dados atrás mencionadas. Um conjunto de regras de integridade. Definem um conjunto de regras sobre a forma como os operadores devem manipular as estruturas de dados, servindo como garantia da consistência da base de dados. Modelos de Dados Os modelos focados neste curso (Modelos baseados em registos), podem-se dividir em: Modelos Hierárquicos Modelos em Rede Modelos Relacionais Devido à relevância do modelo relacional (2ª geração), pode-se também classificar os modelos “Hierárquico” e de “Rede” como modelos PréRelacionais, ou modelos de 1ª geração) Existem actualmente em desenvolvimento paralelo diferentes modelos (de 3ª geração) com o objectivo de aumentar o nível de abstracção da informação e permitir aos novos paradigmas da programação (objectos, agentes,...) Modelo Hierárquico Tal como o próprio nome indica, os dados estão organizados hierarquicamente, numa estrutura de árvore. Os dados são representados por registos e as relações entre eles por ligações (links) entre registos. BD Cliente 1 Encomenda 1 Encomenda 2 Cliente 2 Encomenda 3 Encomenda 4 Encomenda 5 O acesso aos dados não é directo, tendo que ser efectuada a travessia da estrutura (árvore) até encontrar o registo pretendido. Modelo Hierárquico Não é possível registar informação acerca de elementos de níveis inferiores enquanto não estiverem criados os respectivos níveis superiores. No exemplo anterior, não se poderia registar informação acerca de uma encomenda, enquanto não estivesse criado o registo correspondente ao cliente que a efectuou. Sempre que um item se relacionar com múltiplos registos-pai, é necessário duplicar a informação sobre ele, originando redundância de informação na base de dados. A manipulação da informação neste modelo é efectuada através das operações: Get First (Permite aceder ao primeiro registo de um dado segmento – conjunto de registos de um determinado nível e com o mesmo registo-pai) Get Next (permite aceder ao elemento seguinte de um determinado segmento) Get Next Within ... (Permite aceder ao próximo segmento que verifica uma determinada condição) Get Parent (Permite obter o registo-pai de um determinado registo) Modelo de Rede O modelo de rede pode ser entendido como uma extensão ao modelo hierárquico. Ao eliminar o conceito de hierarquia, permite-se que um registo esteja relacionado com vários outros e evita-se a duplicação da informação. A base de dados passa a ser entendida como um grafo. Encomenda 1 Produto 1 Encomenda 2 Produto 2 Cliente 2 BD Cliente 1 Produto 3 Encomenda 3 Produto 4 Modelo Relacional Contrariamente aos modelos hierárquicos e de rede, o modelo relacional não evoluiu a partir de técnicas de processamento de ficheiros. Foi desenvolvido a partir de estudos teóricos, tendo por base a teoria dos conjuntos. Existem actualmente múltiplos fornecedores de SGBD´s relacionais, entre os quais: IBM Corporation (DB/2) Microsoft (SQL Server, Access) Informix (Informix Dynamic Server) Oracle (Oracle Server) Sybase (Sybase SQL Server) ... Modelo Conceptual Existe uma classe de modelos utilizados ao nível conceptual, para modelar os itens presentes numa base de dados e a forma como o seu relacionamento se vai efectuar, sendo o mais representativo o modelo Entidade / Relacionamento. Baseia-se na percepção de que o mundo real se pode classificar com base em: Entidades: Objectos com características particulares diferentes de quaisquer outros. Relações: Relacionamento entre diferentes tipos de objectos. Notação: Entidades Relações Modelo Entidade/Relacionamento Exemplo: n Obtém Nota n 1 Aluno Notações: Entidades escritas no singular Letra inicial das entidades maiúscula. Verbo das relações ilustrativo. Refere 1 Disciplina Modelo Relacional A estrutura fundamental do modelo relacional é a “relação”. Dada uma colecção de conjuntos D1, D2, ..., Dn, R é uma relação naqueles conjuntos se for constituída por um conjunto de n-uplos ordenados <d1, d2, ..., dn> tais que d1 Є D1, d2 Є D2, ..., dn Є Dn. D1, D2, ..., Dn constituem o domínio da relação. O número de tuplos <d1, d2, ..., dn> existente define a cardinalidade da relação. O número de elementos de cada tuplo determina o grau da relação. Modelo Relacional Na prática uma relação é uma estrutura de dados bidimensional (tabela), constituída por um conjunto de instâncias (linhas, zero ou mais) e um conjunto de atributos (colunas, um ou mais). Cada instância (linha) de uma relação designa-se por tuplo. O domínio da relação traduz-se pelo conjunto de valores que cada um dos seus atributos pode tomar. O número de tuplos (linhas) determina a sua cardinalidade e o número de atributos (colunas) define o grau da relação. Modelo Relacional O termo “Relação” deriva do relacionamento existente entre linhas e colunas, significando que diferentes propriedades da mesma entidade são registadas na mesma linha. A B C a b c d e f Relacionamento Horizontal A relação acima ilustrada indica que existe alguma entidade que tem para a propriedade “A” o valor “a”, para a propriedade “B” o valor “b” e para a propriedade “C” o valor “c”. Outra entidade similar irá possuir valores “e”, “f” e “g” para as mesmas propriedades. Modelo Relacional Tendo uma relação R com atributos: Codigo Nome Data_nascimento 1 Vitor Almeida 1-10-1956 2 Rita Duarte 2-11-1926 3 Catarina Pais 19-7-1927 4 Nuno Santos 11-11-1977 Podemos supor que (Inteiros (N), Cadeias de Caracteres, Datas) constituem o domínio da relação “R”, por constituírem respectivamente o domínio de cada um dos seus atributos. Modelo Relacional Atributos (Grau=3) Codigo Tuplo Nome Idade 1 Vitor Almeida 34 2 Rita Duarte 23 3 Catarina Pais 41 4 Nuno Santos 25 Cardinalidade = 4 Modelo Relacional O valor de cada atributo num tuplo é obrigatoriamente atómico. Isto significa que em cada par (linha, coluna) só pode existir um único valor. Os atributos de uma relação devem ter identificadores distintos. Na prática significa que não podem existir duas colunas com nomes identificadores iguais. Os tuplos de uma relação devem ser distintos. Numa relação não podem existir dois tuplos cujos respectivos atributos sejam completamente iguais. A ordem dos tuplos numa relação, bem como a ordem dos atributos num tuplo não tem qualquer significado. Todos os valores passíveis de preencher um atributo de um dado tuplo têm obrigatoriamente que provir de um domínio. Nos casos em que o valor não é conhecido pode exclusivamente ser atribuído o valor null. Modelo Relacional - Chaves Um conceito fundamental no contexto do modelo relacional é o de “chave”. Existem diferentes tipos de chaves: Chave Candidata: Subconjunto dos atributos de uma relação que podem ser utilizados como identificadores de uma instância. O subconjunto não pode ser reduzido sem perder esta qualidade. Nome B.I. Contribuinte Nº Eleitor Freguesia José 1234567 45662536 1234 Covilhã Rita 6272632 72761376 6666 Fundão Joana 6182930 12765676 1234 Fundão Exemplos: {BI}, {Contribuinte}, {Nº Eleitor, Freguesia} Modelo Relacional - Chaves Super-Chave: O conceito de super-chave é mais abrangente que o de “chave candidata” definido anteriormente. Qualquer subconjunto de atributos de uma relação que possa identificar univocamente qualquer instância da relação é considerado uma super-chave. Nome B.I. Contribuinte Nº Eleitor Freguesia José 1234567 45662536 1234 Covilhã Rita 6272632 72761376 6666 Fundão Joana 6182930 12765676 1234 Fundão Exemplos: {BI}, {BI, nome}, {Nº Eleitor, Freguesia}, {NºEleitor, BI}, {Nº Eleitor, BI, Nome}, {Nome, BI, Nº Contribuinte, Nº Eleitor, Freguesia} No limite, o conjunto de todos os atributos de uma relação será sempre uma super-chave. Modelo Relacional - Chaves Chave Primária: Escolhida entre as possíveis chaves candidatas, identifica de forma unívoca os tuplos de uma relação. Deve respeitar as seguintes propriedades: Unívoca: Os atributos da chave primária têm um valor único para qualquer tuplo de uma relação. Não redundante: Se algum dos atributos for retirado da chave, os restantes atributos deixam de satisfazer a propriedade anterior. Não nula. Nenhum dos atributos que a constituem pode assumir o valor nulo. Nome B.I. Contribuinte Nº Eleitor Freguesia José 1234567 45662536 1234 Covilhã Rita 6272632 72761376 6666 Fundão Joana 6182930 12765676 1234 Fundão Exemplos: {Nº Eleitor, Freguesia} Modelo Relacional - Chaves Chave estrangeira (externa): Subconjunto dos atributos de uma relação que constituem a chave primária de uma outra relação. A sua existência denota um relacionamento entre relações e constitui a base do modelo relacional. Pessoa CodigoPostal Nome B.I. CodPostal CodPostal Cidade José 1234567 6200 6200 Covilhã Rita 6272632 6300 6300 Fundão Joana 6182930 6200 7000 Leiria Exemplo: {CodPostal} da relação “Pessoa” é uma chave externa, uma vez que na relação “CodigoPostal” o mesmo atributo é uma chave primária. Álgebra Relacional A Álgebra Relacional define um conjunto de operações... ...baseadas na teoria de conjuntos (união, intercessão, diferença e produto cartesiano) (selecção, projecção, junção e divisão) Qualquer operador atrás enunciado actua sobre conjuntos e devolve como resultado conjuntos de tuplos. Operador Álgebra Relacional Pode suceder que: Operador Mesmo nestas situações, o operador transformou o conjunto inicial num outro conjunto com zero instâncias e zero atributos (conjunto vazio) Álgebra Relacional Exemplo: A B C a b c d e f g h i Operação: Seleccionar instâncias com atributo “A” igual a “j” Neste caso, a aplicação de um operador de selecção de instâncias (que satisfaçam uma determinada propriedade) transformou o conjunto inicial num conjunto com zero instâncias e zero atributos. Teoria de Conjuntos É o estudo da associação entre objectos com uma mesma propriedade, utilizando uma notação precisa e definindo uma série de operações e propriedades desses objectos. Conjunto é uma colecção ou classe de objectos, também chamados de elementos ou membros. A notação de pertença serve para indicar que um elemento x pertence a um conjunto A e é denotado por: x ∈A No estudo da teoria das bases de dados, pode-se estabelecer uma analogia “Relação” “Conjunto” e “Instância””Elemento” Teoria de Conjuntos Dois conjuntos são iguais se e só se possuem exactamente os mesmos elementos. Conjunto vazio é o conjunto que não possui nenhum elemento e é denotado por Ø. Os conjuntos podem ser finitos ou infinitos. Um conjunto finito pode ser definido listando todos os seus elementos separados por vírgulas. Um conjunto infinito pode ser definido por uma propriedade que deve ser satisfeita por todos os seus membros. Teoria de Conjuntos A cardinalidade ou ordem de um conjunto indica o número de elementos do conjunto e é denotada por # Um conjunto não possui ordenação, portanto, os seguintes conjuntos são iguais: {2,5,8}, {5,2,8}, {5,2,5,8} Um conjunto unitário possui um único elemento. Um conjunto A é dito estar contido em B (escreve-se ⊆ ) se, e somente se, todo elemento de A é elemento de B, desta forma, A é subconjunto de B. Teoria de Conjuntos Um conjunto A é igual a um conjunto B (escreve-se A=B) se, e somente se, A ⊆ B e B ⊆ A Um conjunto A está contido propriamente no conjunto B (escreve-se ⊂ ) se, e somente se, A ⊆ B e A ≠ B. Desta forma A é subconjunto próprio de B e, caso contrário, é subconjunto impróprio. Teoria de Conjuntos Operações básicas da teoria de conjuntos: União Intersecção Diferença Produto Cartesiano Divisão Junção Natural Selecção Projecção Operações Binárias Operações Unárias Teoria de Conjuntos Operações Fundamentais União de Conjuntos Sejam “R” e “S” conjuntos e “t” um tuplo de um conjunto. A união entre “R” e “S”, denota-se por R ∪ S e pode ser expressa por: R ∪ S = {t | t ∈ R ∨ t ∈ S} Teoria de Conjuntos Operações Fundamentais Intercessão de Conjuntos Sejam “R” e “S” conjuntos e “t” um tuplo de um conjunto. A intercessão entre “R” e “S”, denota-se por R ∩ S e pode ser expressa por: R ∩ S = {t | t ∈ R ∧ t ∈ S} Teoria de Conjuntos Operações Fundamentais Diferença de Conjuntos Sejam “R” e “S” conjuntos e “t” um tuplo de um conjunto. A diferença entre “R” e “S”, denota-se por R - S e pode ser expressa por: R - S = {t | t ∈ R ∧ t ∉ S} Teoria de Conjuntos Operações Fundamentais Produto Cartesiano de Conjuntos Sejam “R” e “S” conjuntos, “t” um tuplo de um conjunto e Ai um atributo de um conjunto. O produto cartesiano entre “R” e “S”, denota-se por R x S e pode ser expresso por: R x S = {t | t[A1, ...,An] ∈ R ∧ t [An+1, ...,An+m] ∈ S} Teoria de Conjuntos Operações Fundamentais Selecção de um Conjunto Seja “R” um conjunto e “t” um tuplo de um conjunto. A selecção de tuplos de “R” pode ser dada por: σθ (R) = { t | t ∈ R ∧ θ(t) } Teoria de Conjuntos Operações Fundamentais Projecção de um Conjunto Seja “R” um conjunto e “t” um tuplo de um conjunto. A projecção do conjunto “R” pode ser dada por: ΠΑ1,..., Ακ (R) = { t [A1, ...., Ak] | t ∈ R } Teoria de Conjuntos Operações Fundamentais Junção de Conjuntos Sejam “R” e “S” conjuntos e “t” um tuplo de um conjunto. A junção de “R” e “S” pode ser dada por: R θ S = { t [R ∪ S] ∧ θ(t) } = σθ (R x S) Teoria de Conjuntos Operações Fundamentais Divisão de Conjuntos Sejam “R” e “S” conjuntos e “t”, “u” e “v” tuplos de conjuntos. A divisão entre “R” e “S” pode ser dada por: R ÷ S = { t [R - S] | ∀ u ∈ S, ∃ v ∈ R | v[S] = u ∧ v [R - S] = t } Álgebra Relacional Esquema de uma Relação Dada uma relação R, define-se o “Esquema” de R através do número total de atributos e do domínio de cada um em particular. O esquema da relação ilustrada será: 3 atributos Domínio do 1º Atributo Seq.ª de Caracteres Domínio do 2º Atributo Inteiros Domínio do 3º Atributo Inteiros Nome B.I. CodPostal José 1234567 6200 Rita 6272632 6300 Joana 6182930 6200 Álgebra Relacional Compatibilidade de Esquemas Duas relações “R” e “S” têm esquemas compatíveis se e só se: O número de atributos de “R” é igual ao número de atributos de “S” Cada atributo de “R” tem domínio compatível com o respectivo atributo de “S”. Nome B.I. CodPostal José 1234567 6200 Rita 6272632 6300 Joana 6182930 6200 OK Morada Codigo CodFuncao Rua da ... 11 12 Avenida... 717 18 Praça... 888 1218 Álgebra Relacional Compatibilidade de Esquemas Nome B.I. CodPostal Nome B.I. José 1234567 6200 José 1234567 Rita 6272632 6300 Rita 6272632 Joana 6182930 6200 Joana 6182930 Morada Codigo CodFuncao Rua da ... 11 12 Avenida... 717 18 Praça... 888 1218 X OK Morada CodFuncao Codigo Rua da ... 12 11 Avenida... 18 717 Praça... 1218 888 Álgebra Relacional • União: R=A∪B Esta operação exige que as duas relações iniciais tenham esquemas compatíveis (isto é, além do mesmo grau, é necessário que tenham domínios compatíveis). O resultado consiste numa relação contendo os tuplos pertencentes à primeira ou à segunda relação ou a ambas. A B C a1 b1 c1 a2 b2 c2 a3 b3 c3 ∪ A B C a1 b1 c1 a4 b4 c4 = A B C a1 b1 c1 a2 b2 c2 a3 b3 C3 a4 b4 c4 Álgebra Relacional Intersecção: R=A∩B Da mesma forma que a anterior, exige que as duas relações iniciais tenham esquemas compatíveis (isto é, além do mesmo grau, é necessário que tenham domínios compatíveis). A relação final contém os tuplos comuns às duas relações iniciais. A B C a1 b1 c1 a2 b2 c2 a3 b3 c3 ∩ A B C a1 b1 c1 a4 b4 c4 = A B C a1 b1 c1 Álgebra Relacional Diferença: R=A-B À semelhança das anteriores, também exige que as duas relações iniciais tenham esquemas compatíveis (isto é, além do mesmo grau, é necessário que tenham domínios compatíveis). A relação final contém os tuplos pertencentes à primeira relação e não pertencentes à segunda. A B C a1 b1 c1 a2 b2 c2 a3 b3 c3 - A B C a1 b1 c1 a4 b4 c4 = A B C a3 b3 c3 a2 b2 c2 Álgebra Relacional Produto Cartesiano: R=AxB Dadas quaisquer relações sem atributos comuns, o resultado do produto cartesiano corresponde a todas as combinações possíveis dos tuplos da primeira relação com os da segunda. A B a1 b1 a2 b2 a3 b3 X C D c1 d1 c4 d4 = A B C D a1 b1 c1 d1 a2 b2 c1 d1 a3 b3 c1 d1 a1 b1 c4 d4 a2 b2 c4 d4 a3 b3 c4 d4 Álgebra Relacional Selecção: σ <condição> (Relação) Operador unário, que toma uma relação inicial e origina uma outra contendo os tuplos da relação inicial que satisfazem a condição descrita. R A B C a1 b1 c1 a2 b2 c2 a3 b3 C3 a2 b4 c4 σ <A=a2> (R) = A B C a2 b2 c2 a2 b4 c4 Álgebra Relacional Projecção: Π <lista_atributos> (Relação) Tal como o anterior, é um operador unário, que toma uma relação inicial e transforma-a em outra contendo apenas os atributos descritos em “lista_atributos” R A B C A B a1 b1 c1 a1 b1 a2 b2 c2 a2 b2 a3 b3 C3 a3 b3 a2 b4 c4 a2 b4 Π <A,B> (R) = Álgebra Relacional Junção Natural: R=A∞B Esta operação combina tuplos provenientes de duas relações distintas com base em atributos comuns. A relação final contém um tuplo por cada combinação de tuplos das duas relações que contenham valores iguais nos atributos comuns. É necessário existir pelo menos um atributo comum (domínio) nas duas relações. A B C a1 b1 c1 a2 b2 c2 a3 b3 c3 a2 b4 c4 ∞ C D A B C D c1 d1 a1 b1 c1 d1 c3 d3 a3 b3 c3 d3 = Álgebra Relacional Divisão: R=A÷B Dadas duas relações em que o conjunto dos atributos da relação-divisor está contido no conjunto de atributos da relação dividendo, o resultado da divisão das relações consiste nos atributos que não figuram na relação divisor. Os tuplos resultado serão os que na relação “dividendo” satisfazem os valores da relação “divisor”. A B C D a1 b1 c1 d1 a2 b2 c2 d2 a1 b1 c4 d4 a4 b4 c4 d4 a5 b5 c4 d4 a4 b4 c1 d1 ÷ C D A B c1 d1 a1 b1 c4 d4 a4 b4 = Álgebra Relacional A partir da combinação dos operadores da álgebra relacional descritos anteriormente pode-se formalizar toda a linguagem de pesquisa de informação numa base de dados. Exemplo: A B C a1 b1 c1 a2 b2 c2 a3 b3 C3 a2 b4 c4 Quais os atributos “A e B” dos tuplos da relação “R” em que o atributo “C” é igual a “c1”? Pode ser traduzido por: Π<A,B>(σ<C=c1>(R)) Álgebra Relacional Π<A,B>(σ<C=c1>( Selecção A B C a1 b1 c1 A B C a1 b1 c1 a2 b2 c2 a3 b3 c3 a2 b4 c4 Projecção )) A B a1 b1 Poder-se-ia aplicar comutatividade ? σ<C=c1>(Π<A,B> (R)) Álgebra Relacional A B C a1 b1 c1 a2 b2 c2 a3 b3 c3 a2 b4 c4 A partir de um conjunto de relações, é sempre possível a aplicação sequencial de diferentes operadores por forma a seleccionar a informação pretendida... ? ? ? A A B C C a1 a1 b1 c1 c1 a2 a2 b2 c2