DBMS - Guia Rápido

Database é uma coleção de dados relacionados e os dados são uma coleção de fatos e números que podem ser processados ​​para produzir informações.

Principalmente os dados representam fatos registráveis. Os dados auxiliam na produção de informações baseadas em fatos. Por exemplo, se tivermos dados sobre as notas obtidas por todos os alunos, podemos então concluir sobre os toppers e as notas médias.

UMA database management system armazena dados de forma que seja mais fácil recuperar, manipular e produzir informações.

Características

Tradicionalmente, os dados eram organizados em formatos de arquivo. O SGBD era um conceito novo na época, e toda a pesquisa foi feita para superar as deficiências do estilo tradicional de gerenciamento de dados. Um DBMS moderno tem as seguintes características -

  • Real-world entity- Um DBMS moderno é mais realista e usa entidades do mundo real para projetar sua arquitetura. Ele usa o comportamento e os atributos também. Por exemplo, um banco de dados escolar pode usar alunos como uma entidade e sua idade como um atributo.

  • Relation-based tables- SGBD permite que entidades e relações entre elas formem tabelas. Um usuário pode entender a arquitetura de um banco de dados apenas olhando os nomes das tabelas.

  • Isolation of data and application- Um sistema de banco de dados é totalmente diferente de seus dados. Um banco de dados é uma entidade ativa, enquanto os dados são considerados passivos, na qual o banco de dados funciona e se organiza. O DBMS também armazena metadados, que são dados sobre dados, para facilitar seu próprio processo.

  • Less redundancy- O SGBD segue as regras de normalização, que divide uma relação quando algum de seus atributos apresenta redundância de valores. A normalização é um processo matematicamente rico e científico que reduz a redundância de dados.

  • Consistency- Consistência é um estado em que todas as relações em um banco de dados permanecem consistentes. Existem métodos e técnicas que podem detectar tentativa de deixar o banco de dados em estado inconsistente. Um DBMS pode fornecer maior consistência em comparação com as formas anteriores de aplicativos de armazenamento de dados, como sistemas de processamento de arquivos.

  • Query Language- O DBMS está equipado com linguagem de consulta, o que o torna mais eficiente para recuperar e manipular dados. Um usuário pode aplicar tantas e diferentes opções de filtragem quanto necessário para recuperar um conjunto de dados. Tradicionalmente, não era possível onde o sistema de processamento de arquivos era usado.

  • ACID Properties - SGBD segue os conceitos de Atomicidade, Consistência, Isolação, e Durabilidade (normalmente abreviada como ACID). Esses conceitos são aplicados em transações, que manipulam dados em um banco de dados. As propriedades ACID ajudam o banco de dados a permanecer íntegro em ambientes multi-transacionais e em caso de falha.

  • Multiuser and Concurrent Access- DBMS suporta ambiente multiusuário e permite que eles acessem e manipulem dados em paralelo. Embora existam restrições nas transações quando os usuários tentam manipular o mesmo item de dados, os usuários nunca estão cientes disso.

  • Multiple views- DBMS oferece múltiplas visualizações para diferentes usuários. Um usuário que está no departamento de Vendas terá uma visão do banco de dados diferente de uma pessoa que trabalha no departamento de Produção. Este recurso permite que os usuários tenham uma visão concentrada do banco de dados de acordo com seus requisitos.

  • Security- Recursos como múltiplas visualizações oferecem segurança até certo ponto, onde os usuários não conseguem acessar dados de outros usuários e departamentos. O DBMS oferece métodos para impor restrições ao inserir dados no banco de dados e recuperá-los em um estágio posterior. O DBMS oferece muitos níveis diferentes de recursos de segurança, o que permite que vários usuários tenham visualizações diferentes com recursos diferentes. Por exemplo, um usuário do departamento de Vendas não pode ver os dados que pertencem ao departamento de Compras. Além disso, também pode ser gerenciado quantos dados do departamento de Vendas devem ser exibidos ao usuário. Visto que um DBMS não é salvo no disco como sistemas de arquivos tradicionais, é muito difícil para os malfeitores quebrar o código.

Comercial

Um DBMS típico tem usuários com direitos e permissões diferentes que o usam para finalidades diferentes. Alguns usuários recuperam dados e alguns fazem backup deles. Os usuários de um DBMS podem ser amplamente categorizados da seguinte forma -

  • Administrators- Os administradores mantêm o DBMS e são responsáveis ​​por administrar o banco de dados. Eles são responsáveis ​​por cuidar de seu uso e por quem deve ser usado. Eles criam perfis de acesso para usuários e aplicam limitações para manter o isolamento e forçar a segurança. Os administradores também cuidam dos recursos do DBMS, como licença do sistema, ferramentas necessárias e outros softwares e manutenções relacionadas ao hardware.

  • Designers- Designers são o grupo de pessoas que realmente trabalham na parte de design do banco de dados. Eles acompanham de perto quais dados devem ser mantidos e em que formato. Eles identificam e projetam todo o conjunto de entidades, relações, restrições e visualizações.

  • End Users- Os usuários finais são aqueles que realmente colhem os benefícios de ter um DBMS. Os usuários finais podem variar de simples visualizadores que prestam atenção aos registros ou taxas de mercado até usuários sofisticados, como analistas de negócios.

O projeto de um SGBD depende de sua arquitetura. Pode ser centralizado, descentralizado ou hierárquico. A arquitetura de um DBMS pode ser vista como camada única ou multicamadas. Uma arquitetura de n camadas divide todo o sistema em partes relacionadas, mas independentesn módulos, que podem ser modificados, alterados, alterados ou substituídos independentemente.

Na arquitetura de 1 camada, o DBMS é a única entidade em que o usuário se senta diretamente no DBMS e o usa. Quaisquer alterações feitas aqui serão feitas diretamente no próprio DBMS. Ele não fornece ferramentas úteis para usuários finais. Os designers e programadores de banco de dados normalmente preferem usar a arquitetura de camada única.

Se a arquitetura do DBMS for de 2 camadas, ele deve ter um aplicativo por meio do qual o DBMS possa ser acessado. Os programadores usam uma arquitetura de 2 camadas, na qual acessam o DBMS por meio de um aplicativo. Aqui, a camada de aplicativo é totalmente independente do banco de dados em termos de operação, design e programação.

Arquitetura de 3 camadas

Uma arquitetura de 3 camadas separa suas camadas umas das outras com base na complexidade dos usuários e como eles usam os dados presentes no banco de dados. É a arquitetura mais usada para projetar um SGBD.

  • Database (Data) Tier- Nesta camada, o banco de dados reside junto com suas linguagens de processamento de consulta. Também temos as relações que definem os dados e suas restrições neste nível.

  • Application (Middle) Tier- Nesta camada residem o servidor de aplicativos e os programas que acessam o banco de dados. Para um usuário, esta camada de aplicativo apresenta uma visão abstrata do banco de dados. Os usuários finais não sabem da existência do banco de dados além do aplicativo. Na outra extremidade, a camada do banco de dados não reconhece nenhum outro usuário além da camada do aplicativo. Portanto, a camada de aplicativo fica no meio e atua como um mediador entre o usuário final e o banco de dados.

  • User (Presentation) Tier- Os usuários finais operam nessa camada e não sabem nada sobre a existência do banco de dados além dessa camada. Nesta camada, várias visualizações do banco de dados podem ser fornecidas pelo aplicativo. Todas as visualizações são geradas por aplicativos que residem na camada do aplicativo.

A arquitetura de banco de dados de várias camadas é altamente modificável, pois quase todos os seus componentes são independentes e podem ser alterados de forma independente.

Os modelos de dados definem como a estrutura lógica de um banco de dados é modelada. Modelos de dados são entidades fundamentais para introduzir abstração em um DBMS. Os modelos de dados definem como os dados são conectados entre si e como são processados ​​e armazenados dentro do sistema.

O primeiro modelo de dados poderia ser modelos de dados simples, onde todos os dados usados ​​devem ser mantidos no mesmo plano. Modelos de dados anteriores não eram tão científicos, portanto, eram propensos a apresentar muitas duplicações e anomalias de atualização.

Modelo Entidade-Relacionamento

O modelo Entidade-Relacionamento (ER) é baseado na noção de entidades do mundo real e relacionamentos entre elas. Ao formular o cenário do mundo real no modelo de banco de dados, o Modelo ER cria conjunto de entidades, conjunto de relacionamentos, atributos gerais e restrições.

O modelo ER é mais bem usado para o projeto conceitual de um banco de dados.

O modelo ER é baseado em -

  • Entitiese seus atributos.

  • Relationships entre entidades.

Esses conceitos são explicados a seguir.

  • Entity - Uma entidade em um modelo ER é uma entidade do mundo real com propriedades chamadas attributes. Cadaattribute é definido por seu conjunto de valores chamados domain. Por exemplo, em um banco de dados escolar, um aluno é considerado uma entidade. O aluno tem vários atributos como nome, idade, classe, etc.

  • Relationship - A associação lógica entre entidades é chamada relationship. Os relacionamentos são mapeados com entidades de várias maneiras. As cardinalidades de mapeamento definem o número de associações entre duas entidades.

    Mapeando cardinalidades -

    • um a um
    • um para muitos
    • muitos para um
    • muitos para muitos

Modelo Relacional

O modelo de dados mais popular em DBMS é o Modelo Relacional. É um modelo mais científico do que outros. Este modelo é baseado na lógica de predicado de primeira ordem e define uma tabela como umn-ary relation.

Os principais destaques deste modelo são -

  • Os dados são armazenados em tabelas chamadas relations.
  • As relações podem ser normalizadas.
  • Em relações normalizadas, os valores salvos são valores atômicos.
  • Cada linha em uma relação contém um valor único.
  • Cada coluna em uma relação contém valores de um mesmo domínio.

Esquema de banco de dados

Um esquema de banco de dados é a estrutura de esqueleto que representa a visão lógica de todo o banco de dados. Define como os dados são organizados e como as relações entre eles são associadas. Ele formula todas as restrições que devem ser aplicadas aos dados.

Um esquema de banco de dados define suas entidades e o relacionamento entre elas. Ele contém um detalhe descritivo do banco de dados, que pode ser representado por meio de diagramas de esquema. São os designers de banco de dados que projetam o esquema para ajudar os programadores a entender o banco de dados e torná-lo útil.

Um esquema de banco de dados pode ser dividido amplamente em duas categorias -

  • Physical Database Schema - Este esquema diz respeito ao armazenamento real de dados e sua forma de armazenamento como arquivos, índices, etc. Ele define como os dados serão armazenados em um armazenamento secundário.

  • Logical Database Schema- Este esquema define todas as restrições lógicas que precisam ser aplicadas aos dados armazenados. Ele define tabelas, visualizações e restrições de integridade.

Instância de banco de dados

É importante distinguirmos esses dois termos individualmente. O esquema do banco de dados é o esqueleto do banco de dados. Ele é projetado quando o banco de dados não existe. Uma vez que o banco de dados esteja operacional, é muito difícil fazer qualquer alteração nele. Um esquema de banco de dados não contém nenhum dado ou informação.

Uma instância de banco de dados é um estado de banco de dados operacional com dados em um determinado momento. Ele contém um instantâneo do banco de dados. As instâncias de banco de dados tendem a mudar com o tempo. Um DBMS garante que cada instância (estado) esteja em um estado válido, seguindo diligentemente todas as validações, restrições e condições que os projetistas do banco de dados impuseram.

Se um sistema de banco de dados não tiver várias camadas, será difícil fazer qualquer alteração no sistema de banco de dados. Os sistemas de banco de dados são projetados em várias camadas, conforme aprendemos anteriormente.

Independência de dados

Um sistema de banco de dados normalmente contém muitos dados, além dos dados dos usuários. Por exemplo, ele armazena dados sobre dados, conhecidos como metadados, para localizar e recuperar dados facilmente. É bastante difícil modificar ou atualizar um conjunto de metadados, uma vez que é armazenado no banco de dados. Mas, à medida que um SGBD se expande, ele precisa mudar com o tempo para satisfazer os requisitos dos usuários. Se todos os dados forem dependentes, será uma tarefa tediosa e altamente complexa.

Os metadados em si seguem uma arquitetura em camadas, de modo que, quando alteramos os dados em uma camada, isso não afeta os dados em outro nível. Esses dados são independentes, mas mapeados entre si.

Independência de dados lógicos

Dados lógicos são dados sobre banco de dados, ou seja, armazenam informações sobre como os dados são gerenciados internamente. Por exemplo, uma tabela (relação) armazenada no banco de dados e todas as suas restrições, aplicadas a essa relação.

A independência lógica de dados é um tipo de mecanismo que se liberaliza dos dados reais armazenados no disco. Se fizermos algumas alterações no formato da tabela, isso não deve alterar os dados residentes no disco.

Independência de dados físicos

Todos os esquemas são lógicos e os dados reais são armazenados em formato de bits no disco. Independência de dados físicos é o poder de alterar os dados físicos sem afetar o esquema ou os dados lógicos.

Por exemplo, no caso de desejarmos alterar ou atualizar o próprio sistema de armazenamento - suponha que desejamos substituir os discos rígidos por SSD - isso não deve ter nenhum impacto nos dados lógicos ou esquemas.

O modelo ER define a visão conceitual de um banco de dados. Ele funciona em torno de entidades do mundo real e as associações entre elas. No nível da visão, o modelo ER é considerado uma boa opção para projetar bancos de dados.

Entidade

Uma entidade pode ser um objeto do mundo real, animado ou inanimado, que pode ser facilmente identificável. Por exemplo, em um banco de dados escolar, alunos, professores, turmas e cursos oferecidos podem ser considerados entidades. Todas essas entidades possuem alguns atributos ou propriedades que lhes conferem sua identidade.

Um conjunto de entidades é uma coleção de tipos semelhantes de entidades. Um conjunto de entidades pode conter entidades com atributos que compartilham valores semelhantes. Por exemplo, um conjunto de Alunos pode conter todos os alunos de uma escola; da mesma forma, um conjunto de Professores pode conter todos os professores de uma escola de todas as faculdades. Os conjuntos de entidades não precisam ser separados.

Atributos

As entidades são representadas por meio de suas propriedades, chamadas attributes. Todos os atributos possuem valores. Por exemplo, uma entidade de aluno pode ter nome, classe e idade como atributos.

Existe um domínio ou intervalo de valores que podem ser atribuídos a atributos. Por exemplo, o nome de um aluno não pode ser um valor numérico. Tem que ser alfabético. A idade de um aluno não pode ser negativa, etc.

Tipos de Atributos

  • Simple attribute- Atributos simples são valores atômicos, que não podem ser mais divididos. Por exemplo, o número de telefone de um aluno é um valor atômico de 10 dígitos.

  • Composite attribute- Os atributos compostos são compostos por mais de um atributo simples. Por exemplo, o nome completo de um aluno pode ter first_name e last_name.

  • Derived attribute- Atributos derivados são os atributos que não existem no banco de dados físico, mas seus valores são derivados de outros atributos presentes no banco de dados. Por exemplo, o salário_média em um departamento não deve ser salvo diretamente no banco de dados, mas pode ser derivado. Para outro exemplo, a idade pode ser derivada de data_of_birth.

  • Single-value attribute- Atributos de valor único contêm um valor único. Por exemplo - Social_Security_Number.

  • Multi-value attribute- Atributos de vários valores podem conter mais de um valor. Por exemplo, uma pessoa pode ter mais de um número de telefone, email_address, etc.

Esses tipos de atributos podem se reunir de uma forma como -

  • atributos simples de valor único
  • atributos simples de vários valores
  • atributos compostos de valor único
  • atributos compostos de múltiplos valores

Conjunto de entidades e chaves

Chave é um atributo ou coleção de atributos que identifica exclusivamente uma entidade entre o conjunto de entidades.

Por exemplo, o roll_number de um aluno torna-o identificável entre os alunos.

  • Super Key - Um conjunto de atributos (um ou mais) que identificam coletivamente uma entidade em um conjunto de entidades.

  • Candidate Key- Uma superchave mínima é chamada de chave candidata. Um conjunto de entidades pode ter mais de uma chave candidata.

  • Primary Key - Uma chave primária é uma das chaves candidatas escolhidas pelo designer do banco de dados para identificar exclusivamente o conjunto de entidades.

Relação

A associação entre entidades é chamada de relacionamento. Por exemplo, um funcionárioworks_at um departamento, um estudante enrollsem um curso. Aqui, Works_at e Enrolls são chamados de relacionamentos.

Conjunto de Relacionamento

Um conjunto de relacionamentos de tipo semelhante é chamado de conjunto de relacionamento. Como entidades, um relacionamento também pode ter atributos. Esses atributos são chamadosdescriptive attributes.

Grau de Relacionamento

O número de entidades participantes em um relacionamento define o grau do relacionamento.

  • Binário = grau 2
  • Ternário = grau 3
  • n-ária = grau

Mapeando cardinalidades

Cardinality define o número de entidades em um conjunto de entidades, que pode ser associado ao número de entidades de outro conjunto por meio de conjunto de relacionamento.

  • One-to-one - Uma entidade do conjunto de entidades A pode ser associada a no máximo uma entidade do conjunto de entidades B e vice-versa.

  • One-to-many - Uma entidade do conjunto de entidades A pode ser associada a mais de uma entidade do conjunto de entidades B, no entanto, uma entidade do conjunto de entidades B pode ser associada a no máximo uma entidade.

  • Many-to-one - Mais de uma entidade do conjunto de entidades A pode ser associada a no máximo uma entidade do conjunto de entidades B, no entanto, uma entidade do conjunto de entidades B pode ser associada a mais de uma entidade do conjunto de entidades A.

  • Many-to-many - Uma entidade de A pode ser associada a mais de uma entidade de B e vice-versa.

Vamos agora aprender como o modelo ER é representado por meio de um diagrama ER. Qualquer objeto, por exemplo, entidades, atributos de uma entidade, conjuntos de relacionamento e atributos de conjuntos de relacionamento, podem ser representados com a ajuda de um diagrama ER.

Entidade

As entidades são representadas por meio de retângulos. Os retângulos são nomeados com o conjunto de entidades que representam.

Atributos

Atributos são propriedades de entidades. Os atributos são representados por meio de elipses. Cada elipse representa um atributo e está diretamente conectada à sua entidade (retângulo).

Se os atributos forem composite, eles são divididos em uma estrutura semelhante a uma árvore. Cada nó é então conectado ao seu atributo. Ou seja, os atributos compostos são representados por elipses conectadas a uma elipse.

Multivalued atributos são representados por elipse dupla.

Derived atributos são representados por elipse tracejada.

Relação

Os relacionamentos são representados por uma caixa em forma de diamante. O nome do relacionamento é escrito dentro da caixa de diamante. Todas as entidades (retângulos) que participam de um relacionamento estão conectadas a ele por uma linha.

Relação Binária e Cardinalidade

Um relacionamento onde duas entidades estão participando é chamado de binary relationship. Cardinalidade é o número de instâncias de uma entidade de uma relação que pode ser associada à relação.

  • One-to-one- Quando apenas uma instância de uma entidade está associada ao relacionamento, ela é marcada como '1: 1'. A imagem a seguir reflete que apenas uma instância de cada entidade deve ser associada ao relacionamento. Ele descreve o relacionamento de um para um.

  • One-to-many- Quando mais de uma instância de uma entidade está associada a um relacionamento, ela é marcada como '1: N'. A imagem a seguir reflete que apenas uma instância de entidade à esquerda e mais de uma instância de uma entidade à direita podem ser associadas ao relacionamento. Ele descreve o relacionamento de um para muitos.

  • Many-to-one- Quando mais de uma instância de entidade está associada ao relacionamento, ela é marcada como 'N: 1'. A imagem a seguir reflete que mais de uma instância de uma entidade à esquerda e apenas uma instância de uma entidade à direita pode ser associada ao relacionamento. Ele descreve o relacionamento muitos para um.

  • Many-to-many- A imagem a seguir reflete que mais de uma instância de uma entidade à esquerda e mais de uma instância de uma entidade à direita podem ser associadas ao relacionamento. Ele descreve o relacionamento de muitos para muitos.

Restrições de participação

  • Total Participation- Cada entidade está envolvida no relacionamento. A participação total é representada por linhas duplas.

  • Partial participation- Nem todas as entidades estão envolvidas no relacionamento. A participação parcial é representada por linhas simples.

Vamos agora aprender como o modelo ER é representado por meio de um diagrama ER. Qualquer objeto, por exemplo, entidades, atributos de uma entidade, conjuntos de relacionamento e atributos de conjuntos de relacionamento, podem ser representados com a ajuda de um diagrama ER.

Entidade

As entidades são representadas por meio de retângulos. Os retângulos são nomeados com o conjunto de entidades que representam.

Atributos

Atributos são propriedades de entidades. Os atributos são representados por meio de elipses. Cada elipse representa um atributo e está diretamente conectada à sua entidade (retângulo).

Se os atributos forem composite, eles são divididos em uma estrutura semelhante a uma árvore. Cada nó é então conectado ao seu atributo. Ou seja, os atributos compostos são representados por elipses conectadas a uma elipse.

Multivalued atributos são representados por elipse dupla.

Derived atributos são representados por elipse tracejada.

Relação

Os relacionamentos são representados por uma caixa em forma de diamante. O nome do relacionamento é escrito dentro da caixa de diamante. Todas as entidades (retângulos) que participam de um relacionamento estão conectadas a ele por uma linha.

Relação Binária e Cardinalidade

Um relacionamento onde duas entidades estão participando é chamado de binary relationship. Cardinalidade é o número de instâncias de uma entidade de uma relação que pode ser associada à relação.

  • One-to-one- Quando apenas uma instância de uma entidade está associada ao relacionamento, ela é marcada como '1: 1'. A imagem a seguir reflete que apenas uma instância de cada entidade deve ser associada ao relacionamento. Ele descreve o relacionamento de um para um.

  • One-to-many- Quando mais de uma instância de uma entidade está associada a um relacionamento, ela é marcada como '1: N'. A imagem a seguir reflete que apenas uma instância de entidade à esquerda e mais de uma instância de uma entidade à direita podem ser associadas ao relacionamento. Ele descreve o relacionamento de um para muitos.

  • Many-to-one- Quando mais de uma instância de entidade está associada ao relacionamento, ela é marcada como 'N: 1'. A imagem a seguir reflete que mais de uma instância de uma entidade à esquerda e apenas uma instância de uma entidade à direita pode ser associada ao relacionamento. Ele descreve o relacionamento muitos para um.

  • Many-to-many- A imagem a seguir reflete que mais de uma instância de uma entidade à esquerda e mais de uma instância de uma entidade à direita podem ser associadas ao relacionamento. Ele descreve o relacionamento de muitos para muitos.

Restrições de participação

  • Total Participation- Cada entidade está envolvida no relacionamento. A participação total é representada por linhas duplas.

  • Partial participation- Nem todas as entidades estão envolvidas no relacionamento. A participação parcial é representada por linhas simples.

O modelo ER tem o poder de expressar entidades de banco de dados de maneira conceitual hierárquica. À medida que a hierarquia sobe, ela generaliza a visão das entidades e, à medida que avançamos na hierarquia, ela nos dá os detalhes de cada entidade incluída.

Subir nesta estrutura é chamado generalization, onde as entidades são agrupadas para representar uma visão mais generalizada. Por exemplo, um aluno específico chamado Mira pode ser generalizado junto com todos os alunos. A entidade passa a ser um aluno e, ainda, o aluno é uma pessoa. O reverso é chamadospecialization onde uma pessoa é uma estudante e essa estudante é Mira.

Generalização

Como mencionado acima, o processo de generalização de entidades, onde as entidades generalizadas contêm as propriedades de todas as entidades generalizadas, é chamado de generalização. Na generalização, várias entidades são reunidas em uma entidade generalizada com base em suas características semelhantes. Por exemplo, pombo, pardal, corvo e pomba podem ser generalizados como pássaros.

Especialização

A especialização é o oposto de generalização. Na especialização, um grupo de entidades é dividido em subgrupos com base em suas características. Pegue um grupo 'Pessoa', por exemplo. Uma pessoa tem nome, data de nascimento, sexo, etc. Essas propriedades são comuns a todas as pessoas, seres humanos. Mas, em uma empresa, as pessoas podem ser identificadas como funcionários, empregadores, clientes ou fornecedores, com base na função que desempenham na empresa.

Da mesma forma, em um banco de dados escolar, as pessoas podem ser especializadas como professores, alunos ou funcionários, com base no papel que desempenham na escola como entidades.

Herança

Usamos todos os recursos acima do ER-Model para criar classes de objetos na programação orientada a objetos. Os detalhes das entidades geralmente são ocultados do usuário; este processo conhecido comoabstraction.

Herança é um recurso importante de generalização e especialização. Ele permite que entidades de nível inferior herdem os atributos de entidades de nível superior.

Por exemplo, os atributos de uma classe Pessoa, como nome, idade e sexo, podem ser herdados por entidades de nível inferior, como Aluno ou Professor.

O Dr. Edgar F. Codd, após sua extensa pesquisa sobre o Modelo Relacional de sistemas de banco de dados, elaborou doze regras próprias, que, segundo ele, um banco de dados deve obedecer para ser considerado um verdadeiro banco de dados relacional.

Essas regras podem ser aplicadas em qualquer sistema de banco de dados que gerencie dados armazenados usando apenas seus recursos relacionais. Esta é uma regra básica, que serve de base para todas as outras regras.

Regra 1: Regra de Informação

Os dados armazenados em um banco de dados, sejam dados do usuário ou metadados, devem ser um valor de alguma célula da tabela. Tudo em um banco de dados deve ser armazenado em formato de tabela.

Regra 2: Regra de acesso garantido

Cada elemento de dados (valor) é garantido como acessível logicamente com uma combinação de nome de tabela, chave primária (valor de linha) e nome de atributo (valor de coluna). Nenhum outro meio, como ponteiros, pode ser usado para acessar dados.

Regra 3: Tratamento Sistemático de Valores NULL

Os valores NULL em um banco de dados devem receber um tratamento sistemático e uniforme. Esta é uma regra muito importante porque um NULL pode ser interpretado como um dos seguintes - dados ausentes, dados desconhecidos ou dados não aplicáveis.

Regra 4: Catálogo online ativo

A descrição da estrutura de todo o banco de dados deve ser armazenada em um catálogo online, conhecido como data dictionary, que pode ser acessado por usuários autorizados. Os usuários podem usar a mesma linguagem de consulta para acessar o catálogo que eles usam para acessar o próprio banco de dados.

Regra 5: Regra abrangente de sublinguagem de dados

Um banco de dados só pode ser acessado usando uma linguagem com sintaxe linear que suporta definição de dados, manipulação de dados e operações de gerenciamento de transações. Este idioma pode ser usado diretamente ou por meio de algum aplicativo. Se o banco de dados permite o acesso aos dados sem qualquer ajuda desta linguagem, então é considerado uma violação.

Regra 6: Ver regra de atualização

Todas as visualizações de um banco de dados, que teoricamente podem ser atualizadas, também devem ser atualizáveis ​​pelo sistema.

Regra 7: regra de inserção, atualização e exclusão de alto nível

Um banco de dados deve oferecer suporte a inserção, atualização e exclusão de alto nível. Isso não deve ser limitado a uma única linha, ou seja, também deve suportar operações de união, interseção e subtração para produzir conjuntos de registros de dados.

Regra 8: Independência de dados físicos

Os dados armazenados em um banco de dados devem ser independentes dos aplicativos que acessam o banco de dados. Qualquer mudança na estrutura física de um banco de dados não deve ter nenhum impacto sobre como os dados estão sendo acessados ​​por aplicativos externos.

Regra 9: Independência de dados lógicos

Os dados lógicos em um banco de dados devem ser independentes da visão de seu usuário (aplicativo). Qualquer mudança nos dados lógicos não deve afetar os aplicativos que os utilizam. Por exemplo, se duas tabelas forem mescladas ou uma for dividida em duas tabelas diferentes, não deve haver impacto ou alteração no aplicativo do usuário. Esta é uma das regras mais difíceis de aplicar.

Regra 10: Independência de integridade

Um banco de dados deve ser independente do aplicativo que o utiliza. Todas as suas restrições de integridade podem ser modificadas independentemente, sem a necessidade de qualquer alteração no aplicativo. Essa regra torna um banco de dados independente do aplicativo front-end e de sua interface.

Regra 11: Independência de Distribuição

O usuário final não deve ser capaz de ver que os dados estão distribuídos em vários locais. Os usuários sempre devem ter a impressão de que os dados estão localizados em apenas um site. Essa regra tem sido considerada a base dos sistemas de banco de dados distribuídos.

Regra 12: Regra de Não-Subversion

Se um sistema tem uma interface que fornece acesso a registros de baixo nível, a interface não deve ser capaz de subverter o sistema e contornar as restrições de segurança e integridade.

O modelo de dados relacionais é o modelo de dados primário, amplamente usado em todo o mundo para armazenamento e processamento de dados. Este modelo é simples e possui todas as propriedades e recursos necessários para processar dados com eficiência de armazenamento.

Conceitos

Tables- No modelo de dados relacional, as relações são salvas no formato de tabelas. Este formato armazena a relação entre entidades. Uma tabela possui linhas e colunas, onde as linhas representam os registros e as colunas representam os atributos.

Tuple - Uma única linha de uma tabela, que contém um único registro para essa relação, é chamada de tupla.

Relation instance- Um conjunto finito de tuplas no sistema de banco de dados relacional representa a instância da relação. As instâncias de relação não têm tuplas duplicadas.

Relation schema - Um esquema de relação descreve o nome da relação (nome da tabela), atributos e seus nomes.

Relation key - Cada linha possui um ou mais atributos, conhecidos como chave de relação, que podem identificar a linha na relação (tabela) de forma única.

Attribute domain - Cada atributo tem algum escopo de valor predefinido, conhecido como domínio de atributo.

Restrições

Cada relação tem algumas condições que devem ser mantidas para que seja uma relação válida. Essas condições são chamadasRelational Integrity Constraints. Existem três restrições de integridade principais -

  • Principais restrições
  • Restrições de domínio
  • Restrições de integridade referencial

Principais restrições

Deve haver pelo menos um subconjunto mínimo de atributos na relação, que pode identificar uma tupla exclusivamente. Este subconjunto mínimo de atributos é chamadokeypara essa relação. Se houver mais de um desses subconjuntos mínimos, eles são chamadoscandidate keys.

As principais restrições forçam que -

  • em uma relação com um atributo-chave, duas tuplas não podem ter valores idênticos para atributos-chave.

  • um atributo de chave não pode ter valores NULL.

As restrições de chave também são chamadas de restrições de entidade.

Restrições de Domínio

Os atributos têm valores específicos no cenário do mundo real. Por exemplo, a idade só pode ser um número inteiro positivo. As mesmas restrições foram tentadas empregar nos atributos de uma relação. Cada atributo é obrigado a ter um intervalo específico de valores. Por exemplo, a idade não pode ser menor que zero e os números de telefone não podem conter um dígito fora de 0-9.

Restrições de integridade referencial

As restrições de integridade referencial funcionam no conceito de Chaves Estrangeiras. Uma chave estrangeira é um atributo-chave de uma relação que pode ser referenciada em outra relação.

A restrição de integridade referencial afirma que, se uma relação se referir a um atributo-chave de uma relação diferente ou igual, então esse elemento-chave deve existir.

Espera-se que os sistemas de banco de dados relacional sejam equipados com uma linguagem de consulta que possa ajudar seus usuários a consultar as instâncias do banco de dados. Existem dois tipos de linguagens de consulta - álgebra relacional e cálculo relacional.

Álgebra Relacional

A álgebra relacional é uma linguagem de consulta procedural, que recebe instâncias de relações como entrada e produz instâncias de relações como saída. Ele usa operadores para realizar consultas. Um operador pode serunary ou binary. Eles aceitam relações como sua entrada e relações de produção como sua saída. A álgebra relacional é realizada recursivamente em uma relação e os resultados intermediários também são considerados relações.

As operações fundamentais da álgebra relacional são as seguintes -

  • Select
  • Project
  • Union
  • Definir diferente
  • produto cartesiano
  • Rename

Discutiremos todas essas operações nas seções a seguir.

Selecione a operação (σ)

Ele seleciona tuplas que satisfazem o predicado dado de uma relação.

Notation- σ p (r)

Onde σ significa predicado de seleção e rsignifica relação. p é a fórmula lógica preposicional que pode usar conectores comoand, or, e not. Esses termos podem usar operadores relacionais como - =, ≠, ≥, <,>, ≤.

For example -

σsubject="database"(Books)

Output - Seleciona tuplas de livros onde o assunto é 'banco de dados'.

σsubject="database" and price="450"(Books)

Output - Seleciona tuplas de livros onde o assunto é 'banco de dados' e o 'preço' é 450.

σsubject="database" and price < "450" or year > "2010"(Books)

Output - Seleciona tuplas de livros em que o assunto é 'banco de dados' e o 'preço' é 450 ou os livros publicados após 2010.

Operação do Projeto (∏)

Ele projeta coluna (s) que satisfazem um determinado predicado.

Notação - ∏ A 1 , A 2 , A n (r)

Onde A 1 , A 2 , A n são nomes de atributos da relaçãor.

As linhas duplicadas são eliminadas automaticamente, pois a relação é um conjunto.

For example -

subject, author (Books)

Seleciona e projeta colunas nomeadas como assunto e autor da relação Livros.

Operação Sindical (∪)

Ele realiza a união binária entre duas relações dadas e é definido como -

r ∪ s = { t | t ∈ r or t ∈ s}

Notation - r U s

Onde r e s são relações de banco de dados ou conjunto de resultados de relação (relação temporária).

Para uma operação sindical ser válida, as seguintes condições devem ser mantidas -

  • r, e s deve ter o mesmo número de atributos.
  • Os domínios de atributo devem ser compatíveis.
  • As tuplas duplicadas são eliminadas automaticamente.

author (Books) ∪ ∏ author (Articles)

Output - Projeta os nomes dos autores que escreveram um livro, um artigo ou ambos.

Definir diferença (-)

O resultado da operação de diferença de conjuntos são tuplas, que estão presentes em uma relação, mas não estão na segunda relação.

Notation - r - s

Encontra todas as tuplas que estão presentes em r mas não em s.

author (Books) − ∏ author (Articles)

Output - Fornece o nome de autores que escreveram livros, mas não artigos.

Produto cartesiano (Χ)

Combina informações de duas relações diferentes em uma.

Notation - r Χ s

Onde r e s são relações e sua saída será definida como -

r Χ s = {qt | q ∈ r e t ∈ s}

author = 'tutorialspoint'(Books Χ Articles)

Output - Rende uma relação, que mostra todos os livros e artigos escritos por ponto de tutorial.

Operação de renomeação (ρ)

Os resultados da álgebra relacional também são relações, mas sem nenhum nome. A operação de renomeação nos permite renomear a relação de saída. operação 'renomear' é indicada por uma pequena letra gregarho ρ .

Notation- ρ x (E)

Onde o resultado da expressão E é salvo com o nome de x.

Operações adicionais são -

  • Definir interseção
  • Assignment
  • Junção natural

Cálculo Relacional

Em contraste com a Álgebra Relacional, o Cálculo Relacional é uma linguagem de consulta não procedimental, ou seja, diz o que fazer, mas nunca explica como fazer.

O cálculo relacional existe em duas formas -

Cálculo Relacional Tupla (TRC)

Filtrando intervalos de variáveis ​​sobre tuplas

Notation- {T | Doença}

Retorna todas as tuplas T que satisfaçam uma condição.

For example -

{ T.name |  Author(T) AND T.article = 'database' }

Output - Retorna tuplas com 'nome' do Autor que escreveu artigo sobre 'banco de dados'.

O TRC pode ser quantificado. Podemos usar Quantificadores Existenciais (∃) e Universais (∀).

For example -

{ R| ∃T   ∈ Authors(T.article='database' AND R.name=T.name)}

Output - A consulta acima produzirá o mesmo resultado da anterior.

Cálculo Relacional de Domínio (DRC)

No DRC, a variável de filtragem usa o domínio de atributos em vez de valores de tupla inteiros (como feito no TRC, mencionado acima).

Notation -

{a 1 , a 2 , a 3 , ..., a n | P (a 1 , a 2 , a 3 , ..., a n )}

Onde a1, a2 são atributos e P significa fórmulas construídas por atributos internos.

For example -

{< article, page, subject > | ∈ TutorialsPoint ∧ subject = 'database'}

Output - Rende Artigo, Página e Assunto da relação TutorialsPoint, onde o assunto é o banco de dados.

Assim como o TRC, o DRC também pode ser escrito usando quantificadores existenciais e universais. A RDC também envolve operadores relacionais.

O poder de expressão de cálculo de relação de tupla e cálculo de relação de domínio é equivalente à álgebra relacional.

O modelo ER, quando conceituado em diagramas, oferece uma boa visão geral do relacionamento entidade, que é mais fácil de entender. Os diagramas ER podem ser mapeados para o esquema relacional, ou seja, é possível criar o esquema relacional utilizando o diagrama ER. Não podemos importar todas as restrições ER para o modelo relacional, mas um esquema aproximado pode ser gerado.

Existem vários processos e algoritmos disponíveis para converter Diagramas ER em Esquema Relacional. Alguns deles são automatizados e alguns deles são manuais. Podemos nos concentrar aqui no conteúdo do diagrama de mapeamento para os fundamentos relacionais.

Os diagramas ER consistem principalmente de -

  • Entidade e seus atributos
  • Relacionamento, que é a associação entre entidades.

Mapping Entity

Uma entidade é um objeto do mundo real com alguns atributos.

Processo de Mapeamento (Algoritmo)

  • Crie uma tabela para cada entidade.
  • Os atributos da entidade devem se tornar campos de tabelas com seus respectivos tipos de dados.
  • Declare a chave primária.

Relacionamento de mapeamento

Um relacionamento é uma associação entre entidades.

Processo de Mapeamento

  • Crie uma tabela para um relacionamento.
  • Adicione as chaves primárias de todas as entidades participantes como campos da tabela com seus respectivos tipos de dados.
  • Se o relacionamento tiver algum atributo, adicione cada atributo como campo da tabela.
  • Declare uma chave primária compondo todas as chaves primárias das entidades participantes.
  • Declare todas as restrições de chave estrangeira.

Mapeando conjuntos de entidades fracas

Um conjunto de entidades fraco é aquele que não possui nenhuma chave primária associada a ele.

Processo de Mapeamento

  • Crie uma tabela para um conjunto de entidades fraco.
  • Adicione todos os seus atributos à tabela como campo.
  • Adicione a chave primária de identificação do conjunto de entidades.
  • Declare todas as restrições de chave estrangeira.

Mapeando Entidades Hierárquicas

A especialização ou generalização de ER vem na forma de conjuntos de entidades hierárquicas.

Processo de Mapeamento

  • Crie tabelas para todas as entidades de nível superior.

  • Crie tabelas para entidades de nível inferior.

  • Adicione chaves primárias de entidades de nível superior na tabela de entidades de nível inferior.

  • Em tabelas de nível inferior, adicione todos os outros atributos de entidades de nível inferior.

  • Declare a chave primária da tabela de nível superior e a chave primária da tabela de nível inferior.

  • Declare restrições de chave estrangeira.

SQL é uma linguagem de programação para bancos de dados relacionais. Ele é projetado sobre álgebra relacional e cálculo relacional de tupla. O SQL vem como um pacote com todas as principais distribuições de RDBMS.

O SQL compreende as linguagens de definição e manipulação de dados. Usando as propriedades de definição de dados do SQL, é possível projetar e modificar o esquema do banco de dados, enquanto as propriedades de manipulação de dados permitem que o SQL armazene e recupere dados do banco de dados.

Linguagem de definição de dados

O SQL usa o seguinte conjunto de comandos para definir o esquema do banco de dados -

CRIO

Cria novos bancos de dados, tabelas e visualizações de RDBMS.

For example -

Create database tutorialspoint;
Create table article;
Create view for_students;

SOLTA

Descarta comandos, visualizações, tabelas e bancos de dados do RDBMS.

For example-

Drop object_type object_name;
Drop database tutorialspoint;
Drop table article;
Drop view for_students;

ALTERAR

Modifica o esquema do banco de dados.

Alter object_type object_name parameters;

For example-

Alter table article add subject varchar;

Este comando adiciona um atributo na relação article com o nome subject de tipo de string.

Linguagem de manipulação de dados

SQL é equipado com linguagem de manipulação de dados (DML). O DML modifica a instância do banco de dados inserindo, atualizando e excluindo seus dados. DML é responsável por todas as modificações de dados de formulários em um banco de dados. SQL contém o seguinte conjunto de comandos em sua seção DML -

  • SELECT/FROM/WHERE
  • INSERIR EM / VALORES
  • UPDATE/SET/WHERE
  • EXCLUIR DE / ONDE

Essas construções básicas permitem que os programadores e usuários do banco de dados insiram dados e informações no banco de dados e recuperem com eficiência usando várias opções de filtro.

SELECIONE / DE / ONDE

  • SELECT- Este é um dos comandos de consulta fundamentais do SQL. É semelhante à operação de projeção da álgebra relacional. Ele seleciona os atributos com base na condição descrita pela cláusula WHERE.

  • FROM- Esta cláusula leva um nome de relação como um argumento a partir do qual os atributos devem ser selecionados / projetados. Caso sejam fornecidos mais de um nome de relação, esta cláusula corresponde ao produto cartesiano.

  • WHERE - Esta cláusula define o predicado ou as condições, que devem corresponder para qualificar os atributos a serem projetados.

For example -

Select author_name
From book_author
Where age > 50;

Este comando irá fornecer os nomes dos autores da relação book_author com idade superior a 50 anos.

INSERIR EM / VALORES

Este comando é usado para inserir valores nas linhas de uma tabela (relação).

Syntax-

INSERT INTO table (column1 [, column2, column3 ... ]) VALUES (value1 [, value2, value3 ... ])

Ou

INSERT INTO table VALUES (value1, [value2, ... ])

For example -

INSERT INTO tutorialspoint (Author, Subject) VALUES ("anonymous", "computers");

ATUALIZAR / DEFINIR / ONDE

Este comando é usado para atualizar ou modificar os valores das colunas de uma tabela (relação).

Syntax -

UPDATE table_name SET column_name = value [, column_name = value ...] [WHERE condition]

For example -

UPDATE tutorialspoint SET Author="webmaster" WHERE Author="anonymous";

EXCLUIR / DE / ONDE

Este comando é usado para remover uma ou mais linhas de uma tabela (relação).

Syntax -

DELETE FROM table_name [WHERE condition];

For example -

DELETE FROM tutorialspoints
   WHERE Author="unknown";

Dependência Funcional

Dependência funcional (FD) é um conjunto de restrições entre dois atributos em uma relação. A dependência funcional diz que se duas tuplas têm os mesmos valores para os atributos A1, A2, ..., An, então essas duas tuplas devem ter os mesmos valores para os atributos B1, B2, ..., Bn.

A dependência funcional é representada por um sinal de seta (→) ou seja, X → Y, onde X determina funcionalmente Y. Os atributos do lado esquerdo determinam os valores dos atributos do lado direito.

Axiomas de Armstrong

Se F é um conjunto de dependências funcionais, então o fechamento de F, denotado como F + , é o conjunto de todas as dependências funcionais logicamente implícitas pelos Axiomas de F. Armstrong são um conjunto de regras que, quando aplicado repetidamente, gera um fechamento de dependências funcionais .

  • Reflexive rule - Se alpha for um conjunto de atributos e beta is_subset_of alpha, então alpha conterá beta.

  • Augmentation rule- Se a → b é válido ey é o atributo definido, então ay → por também é válido. Ou seja, adicionar atributos nas dependências, não altera as dependências básicas.

  • Transitivity rule- O mesmo que regra transitiva em álgebra, se a → b é válido eb → c é válido, então a → c também é válido. a → b é chamado como um funcionalmente que determina b.

Dependência funcional trivial

  • Trivial- Se uma dependência funcional (FD) X → Y for mantida, onde Y é um subconjunto de X, então ela é chamada de FD trivial. FDs triviais sempre valem.

  • Non-trivial - Se um FD X → Y for válido, onde Y não é um subconjunto de X, então é chamado de FD não trivial.

  • Completely non-trivial - Se um FD X → Y for válido, onde x intersecta Y = Φ, é dito que é um FD completamente não trivial.

Normalização

Se o design de um banco de dados não for perfeito, ele pode conter anomalias, que são como um pesadelo para qualquer administrador de banco de dados. Gerenciar um banco de dados com anomalias é quase impossível.

  • Update anomalies- Se os itens de dados estiverem espalhados e não estiverem vinculados uns aos outros adequadamente, isso pode levar a situações estranhas. Por exemplo, quando tentamos atualizar um item de dados com suas cópias espalhadas por vários lugares, algumas instâncias são atualizadas corretamente enquanto outras são deixadas com valores antigos. Essas instâncias deixam o banco de dados em um estado inconsistente.

  • Deletion anomalies - Tentamos excluir um registro, mas partes dele não foram excluídas por falta de conhecimento, os dados também são salvos em outro lugar.

  • Insert anomalies - Tentamos inserir dados em um registro que não existe.

A normalização é um método para remover todas essas anomalias e trazer o banco de dados a um estado consistente.

Primeira Forma Normal

A Primeira Forma Normal é definida na própria definição das relações (tabelas). Esta regra define que todos os atributos em uma relação devem ter domínios atômicos. Os valores em um domínio atômico são unidades indivisíveis.

Reorganizamos a relação (tabela) como abaixo, para convertê-la para a Primeira Forma Normal.

Cada atributo deve conter apenas um único valor de seu domínio predefinido.

Segunda Forma Normal

Antes de aprendermos sobre a segunda forma normal, precisamos entender o seguinte -

  • Prime attribute - Um atributo, que faz parte da chave candidata, é conhecido como atributo principal.

  • Non-prime attribute - Um atributo, que não faz parte da chave principal, é considerado um atributo não principal.

Se seguirmos a segunda forma normal, então cada atributo não principal deve ser totalmente funcionalmente dependente do atributo de chave principal. Ou seja, se X → A for válido, então não deve haver nenhum subconjunto apropriado Y de X, para o qual Y → A também é verdadeiro.

Vemos aqui na relação Student_Project que os atributos-chave principais são Stu_ID e Proj_ID. De acordo com a regra, os atributos não-chave, ou seja, Stu_Name e Proj_Name, devem ser dependentes de ambos e não de nenhum atributo da chave principal individualmente. Mas descobrimos que Stu_Name pode ser identificado por Stu_ID e Proj_Name pode ser identificado por Proj_ID independentemente. Isso é chamadopartial dependency, o que não é permitido na segunda forma normal.

Rompemos a relação em dois, conforme ilustrado na imagem acima. Portanto, não existe dependência parcial.

Terceira Forma Normal

Para uma relação estar na Terceira Forma Normal, ela deve estar na Segunda Forma Normal e o seguinte deve satisfazer -

  • Nenhum atributo não principal é transitivamente dependente do atributo de chave principal.
  • Para qualquer dependência funcional não trivial, X → A, então -
      X é uma superchave ou,
    • A é o atributo principal.

    Descobrimos que na relação Student_detail acima, Stu_ID é a chave e o único atributo da chave principal. Descobrimos que a cidade pode ser identificada por Stu_ID e também pelo próprio Zip. Nem Zip é uma superchave nem Cidade um atributo principal. Além disso, Stu_ID → Zip → Cidade, então existetransitive dependency.

    Para trazer essa relação à terceira forma normal, dividimos a relação em duas relações da seguinte forma -

    Forma normal de Boyce-Codd

    A Forma Normal de Boyce-Codd (BCNF) é uma extensão da Terceira Forma Normal em termos estritos. BCNF afirma que -

    • Para qualquer dependência funcional não trivial, X → A, X deve ser uma superchave.

    Na imagem acima, Stu_ID é a superchave na relação Student_Detail e Zip é a superchave na relação ZipCodes. Então,

    Stu_ID → Stu_Name, Zip

    e

    CEP → Cidade

    O que confirma que ambas as relações estão no BCNF.

    Entendemos os benefícios de tomar um produto cartesiano de duas relações, o que nos dá todas as tuplas possíveis que são emparelhadas. Mas pode não ser viável para nós, em certos casos, tomar um produto cartesiano no qual encontramos relações enormes com milhares de tuplas tendo um número considerável de atributos.

    Joiné uma combinação de um produto cartesiano seguido de um processo de seleção. Uma operação de junção emparelha duas tuplas de relações diferentes, se e somente se uma determinada condição de junção for satisfeita.

    Descreveremos brevemente vários tipos de junção nas seções a seguir.

    Associação Theta (θ)

    A junção Theta combina tuplas de relações diferentes, desde que satisfaçam a condição theta. A condição de junção é denotada pelo símboloθ.

    Notação

    R1 ⋈θ R2

    R1 e R2 são relações com atributos (A1, A2, .., An) e (B1, B2, .., Bn) de forma que os atributos não têm nada em comum, ou seja, R1 ∩ R2 = Φ.

    A junção Theta pode usar todos os tipos de operadores de comparação.

    Aluna
    SID Nome Std
    101 Alex 10
    102 Maria 11
    assuntos
    Classe Sujeito
    10 Matemática
    10 Inglês
    11 Música
    11 Esportes

    Student_Detail =

    STUDENT Student.Std = Subject.Class SUBJECT

    Student_detail
    SID Nome Std Classe Sujeito
    101 Alex 10 10 Matemática
    101 Alex 10 10 Inglês
    102 Maria 11 11 Música
    102 Maria 11 11 Esportes

    Equijoin

    Quando o Theta join usa apenas equalityoperador de comparação, é denominado equijoin. O exemplo acima corresponde a equijoin.

    União Natural ( )

    A junção natural não usa nenhum operador de comparação. Não concatena da mesma forma que um produto cartesiano. Podemos realizar uma junção natural apenas se houver pelo menos um atributo comum entre duas relações. Além disso, os atributos devem ter o mesmo nome e domínio.

    A junção natural atua sobre os atributos correspondentes em que os valores dos atributos em ambas as relações são iguais.

    Cursos
    CID Curso Departamento
    CS01 Base de dados CS
    ME01 Mecânica MIM
    EE01 Eletrônicos EE
    HoD
    Departamento Cabeça
    CS Alex
    MIM Maia
    EE Mira
    Cursos ⋈ HoD
    Departamento CID Curso Cabeça
    CS CS01 Base de dados Alex
    MIM ME01 Mecânica Maia
    EE EE01 Eletrônicos Mira

    Junções Externas

    Theta Join, Equijoin e Natural Join são chamados de junções internas. Uma junção interna inclui apenas aquelas tuplas com atributos correspondentes e o restante é descartado na relação resultante. Portanto, precisamos usar junções externas para incluir todas as tuplas das relações de participação na relação resultante. Existem três tipos de junções externas - junção externa esquerda, junção externa direita e junção externa completa.

    União Externa Esquerda (R
    S)

    Todas as tuplas da relação Esquerda, R, são incluídas na relação resultante. Se houver tuplas em R sem nenhuma tupla correspondente na relação direita S, então os S-atributos da relação resultante são tornados NULL.

    Esquerda
    UMA B
    100 Base de dados
    101 Mecânica
    102 Eletrônicos
    Direito
    UMA B
    100 Alex
    102 Maia
    104 Mira
    Cursos
    HoD
    UMA B C D
    100 Base de dados 100 Alex
    101 Mecânica --- ---
    102 Eletrônicos 102 Maia

    União Externa Direita: (R
    S)

    Todas as tuplas da relação Right, S, são incluídas na relação resultante. Se houver tuplas em S sem nenhuma tupla correspondente em R, então os atributos R da relação resultante são tornados NULL.

    Cursos
    HoD
    UMA B C D
    100 Base de dados 100 Alex
    102 Eletrônicos 102 Maia
    --- --- 104 Mira

    União externa completa: (R
    S)

    Todas as tuplas de ambas as relações participantes são incluídas na relação resultante. Se não houver tuplas correspondentes para ambas as relações, seus respectivos atributos não correspondentes serão tornados NULL.

    Cursos
    HoD
    UMA B C D
    100 Base de dados 100 Alex
    101 Mecânica --- ---
    102 Eletrônicos 102 Maia
    --- --- 104 Mira

    Os bancos de dados são armazenados em formatos de arquivo, que contêm registros. No nível físico, os dados reais são armazenados em formato eletromagnético em algum dispositivo. Esses dispositivos de armazenamento podem ser amplamente categorizados em três tipos -

    • Primary Storage- O armazenamento de memória que é diretamente acessível à CPU se enquadra nesta categoria. A memória interna (registros), a memória rápida (cache) e a memória principal (RAM) da CPU são diretamente acessíveis à CPU, pois estão todas localizadas na placa-mãe ou no chipset da CPU. Esse armazenamento é normalmente muito pequeno, ultrarrápido e volátil. O armazenamento primário requer fonte de alimentação contínua para manter seu estado. Em caso de falha de energia, todos os seus dados são perdidos.

    • Secondary Storage- Dispositivos de armazenamento secundário são usados ​​para armazenar dados para uso futuro ou como backup. O armazenamento secundário inclui dispositivos de memória que não fazem parte do chipset da CPU ou da placa-mãe, por exemplo, discos magnéticos, discos ópticos (DVD, CD, etc.), discos rígidos, drives flash e fitas magnéticas.

    • Tertiary Storage- O armazenamento terciário é usado para armazenar grandes volumes de dados. Como esses dispositivos de armazenamento são externos ao sistema do computador, eles são os mais lentos em velocidade. Esses dispositivos de armazenamento são usados ​​principalmente para fazer o backup de um sistema inteiro. Discos ópticos e fitas magnéticas são amplamente usados ​​como armazenamento terciário.

    Hierarquia de Memória

    Um sistema de computador possui uma hierarquia de memória bem definida. Uma CPU tem acesso direto à sua memória principal, bem como aos seus registros embutidos. O tempo de acesso da memória principal é obviamente menor que a velocidade da CPU. Para minimizar essa incompatibilidade de velocidade, a memória cache é introduzida. A memória cache fornece o tempo de acesso mais rápido e contém dados que são acessados ​​com mais frequência pela CPU.

    A memória com acesso mais rápido é a mais cara. Dispositivos de armazenamento maiores oferecem velocidade lenta e são mais baratos, no entanto, eles podem armazenar grandes volumes de dados em comparação com os registros da CPU ou memória cache.

    Discos Magnéticos

    As unidades de disco rígido são os dispositivos de armazenamento secundário mais comuns nos sistemas de computador atuais. Eles são chamados de discos magnéticos porque usam o conceito de magnetização para armazenar informações. Os discos rígidos consistem em discos de metal revestidos com material magnetizável. Esses discos são colocados verticalmente em um eixo. Um cabeçote de leitura / gravação se move entre os discos e é usado para magnetizar ou desmagnetizar o ponto sob ele. Um ponto magnetizado pode ser reconhecido como 0 (zero) ou 1 (um).

    Os discos rígidos são formatados em uma ordem bem definida para armazenar dados com eficiência. Uma placa de disco rígido tem muitos círculos concêntricos, chamadostracks. Cada trilha é dividida emsectors. Um setor em um disco rígido normalmente armazena 512 bytes de dados.

    INCURSÃO

    RAID significa Redundante Asérie de Iindependente Disks, que é uma tecnologia para conectar vários dispositivos de armazenamento secundário e usá-los como uma única mídia de armazenamento.

    O RAID consiste em uma matriz de discos em que vários discos são conectados para atingir objetivos diferentes. Os níveis de RAID definem o uso de matrizes de disco.

    • RAID 0- Neste nível, uma matriz distribuída de discos é implementada. Os dados são divididos em blocos e os blocos são distribuídos entre os discos. Cada disco recebe um bloco de dados para escrever / ler em paralelo. Ele aumenta a velocidade e o desempenho do dispositivo de armazenamento. Não há paridade e backup no Nível 0.

    • RAID 1- RAID 1 usa técnicas de espelhamento. Quando os dados são enviados para um controlador RAID, ele envia uma cópia dos dados para todos os discos da matriz. RAID nível 1 também é chamadomirroring e fornece 100% de redundância em caso de falha.

    • RAID 2- O RAID 2 grava o código de correção de erro usando a distância de Hamming para seus dados, distribuídos em discos diferentes. Como no nível 0, cada bit de dados em uma palavra é gravado em um disco separado e os códigos ECC das palavras de dados são armazenados em um conjunto de discos diferente. Devido à sua estrutura complexa e alto custo, o RAID 2 não está disponível comercialmente.

    • RAID 3- O RAID 3 distribui os dados em vários discos. O bit de paridade gerado para a palavra de dados é armazenado em um disco diferente. Essa técnica ajuda a superar as falhas de um único disco.

    • RAID 4- Neste nível, um bloco inteiro de dados é gravado em discos de dados e, em seguida, a paridade é gerada e armazenada em um disco diferente. Observe que o nível 3 usa distribuição em nível de byte, enquanto o nível 4 usa distribuição em nível de bloco. Os níveis 3 e 4 requerem pelo menos três discos para implementar o RAID.

    • RAID 5 - O RAID 5 grava blocos de dados inteiros em discos diferentes, mas os bits de paridade gerados para a fração do bloco de dados são distribuídos entre todos os discos de dados, em vez de armazená-los em um disco dedicado diferente.

    • RAID 6- RAID 6 é uma extensão do nível 5. Nesse nível, duas paridades independentes são geradas e armazenadas de maneira distribuída entre vários discos. Duas paridades fornecem tolerância a falhas adicional. Este nível requer pelo menos quatro unidades de disco para implementar o RAID.

    Dados e informações relativos são armazenados coletivamente em formatos de arquivo. Um arquivo é uma sequência de registros armazenados em formato binário. Uma unidade de disco é formatada em vários blocos que podem armazenar registros. Os registros de arquivo são mapeados nesses blocos de disco.

    Organização de Arquivos

    Organização de arquivo define como os registros de arquivo são mapeados em blocos de disco. Temos quatro tipos de organização de arquivos para organizar registros de arquivos -

    Organização de arquivo heap

    Quando um arquivo é criado usando Heap File Organization, o sistema operacional aloca área de memória para esse arquivo sem quaisquer detalhes de contabilidade adicionais. Os registros de arquivo podem ser colocados em qualquer lugar dessa área de memória. É responsabilidade do software gerenciar os registros. O arquivo heap não oferece suporte a qualquer ordenação, sequenciamento ou indexação por conta própria.

    Organização de arquivo sequencial

    Cada registro de arquivo contém um campo de dados (atributo) para identificar exclusivamente esse registro. Na organização de arquivos sequenciais, os registros são colocados no arquivo em alguma ordem sequencial com base no campo de chave exclusivo ou chave de pesquisa. Praticamente, não é possível armazenar todos os registros sequencialmente na forma física.

    Organização do arquivo hash

    A Organização do Arquivo Hash usa o cálculo da função Hash em alguns campos dos registros. A saída da função hash determina a localização do bloco do disco onde os registros devem ser colocados.

    Organização de arquivos em cluster

    A organização de arquivos em cluster não é considerada boa para bancos de dados grandes. Nesse mecanismo, os registros relacionados de uma ou mais relações são mantidos no mesmo bloco de disco, ou seja, a ordenação dos registros não é baseada em chave primária ou chave de busca.

    Operações de arquivo

    As operações em arquivos de banco de dados podem ser amplamente classificadas em duas categorias -

    • Update Operations

    • Retrieval Operations

    As operações de atualização alteram os valores dos dados por inserção, exclusão ou atualização. As operações de recuperação, por outro lado, não alteram os dados, mas os recuperam após a filtragem condicional opcional. Em ambos os tipos de operações, a seleção desempenha um papel significativo. Além da criação e exclusão de um arquivo, pode haver várias operações, que podem ser feitas nos arquivos.

    • Open - Um arquivo pode ser aberto em um dos dois modos, read mode ou write mode. No modo de leitura, o sistema operacional não permite que ninguém altere os dados. Em outras palavras, os dados são somente leitura. Os arquivos abertos no modo de leitura podem ser compartilhados entre várias entidades. O modo de gravação permite a modificação de dados. Os arquivos abertos no modo de gravação podem ser lidos, mas não podem ser compartilhados.

    • Locate- Cada arquivo possui um ponteiro de arquivo, que informa a posição atual onde os dados devem ser lidos ou gravados. Este ponteiro pode ser ajustado de acordo. Usando a operação de localização (busca), ele pode ser movido para frente ou para trás.

    • Read- Por padrão, quando os arquivos são abertos no modo de leitura, o ponteiro do arquivo aponta para o início do arquivo. Existem opções em que o usuário pode informar ao sistema operacional onde localizar o ponteiro do arquivo no momento de abri-lo. Os próximos dados para o ponteiro do arquivo são lidos.

    • Write- O usuário pode selecionar para abrir um arquivo no modo de gravação, o que permite editar seu conteúdo. Pode ser exclusão, inserção ou modificação. O ponteiro do arquivo pode ser localizado no momento da abertura ou pode ser alterado dinamicamente se o sistema operacional permitir.

    • Close- Esta é a operação mais importante do ponto de vista do sistema operacional. Quando uma solicitação para fechar um arquivo é gerada, o sistema operacional

      • remove todos os bloqueios (se estiver no modo compartilhado),
      • salva os dados (se alterados) na mídia de armazenamento secundária, e
      • libera todos os buffers e manipuladores de arquivos associados ao arquivo.

    A organização dos dados dentro de um arquivo desempenha um papel importante aqui. O processo para localizar o ponteiro do arquivo para um registro desejado dentro de um arquivo varia com base no fato de os registros serem organizados sequencialmente ou agrupados.

    Sabemos que os dados são armazenados na forma de registros. Cada registro possui um campo-chave, que o ajuda a ser reconhecido de forma única.

    A indexação é uma técnica de estrutura de dados para recuperar registros dos arquivos de banco de dados com eficiência, com base em alguns atributos nos quais a indexação foi feita. A indexação em sistemas de banco de dados é semelhante ao que vemos nos livros.

    A indexação é definida com base em seus atributos de indexação. A indexação pode ser dos seguintes tipos -

    • Primary Index- O índice primário é definido em um arquivo de dados ordenado. O arquivo de dados é ordenado em umkey field. O campo chave é geralmente a chave primária da relação.

    • Secondary Index - O índice secundário pode ser gerado a partir de um campo que é uma chave candidata e tem um valor único em cada registro, ou uma não chave com valores duplicados.

    • Clustering Index- O índice de clustering é definido em um arquivo de dados ordenado. O arquivo de dados é ordenado em um campo não chave.

    A indexação ordenada é de dois tipos -

    • Índice Denso
    • Índice Esparso

    Índice Denso

    No índice denso, há um registro de índice para cada valor de chave de pesquisa no banco de dados. Isso torna a pesquisa mais rápida, mas requer mais espaço para armazenar os próprios registros de índice. Os registros de índice contêm o valor da chave de pesquisa e um ponteiro para o registro real no disco.

    Índice Esparso

    No índice esparso, os registros do índice não são criados para todas as chaves de pesquisa. Um registro de índice aqui contém uma chave de pesquisa e um ponteiro real para os dados no disco. Para pesquisar um registro, primeiro procedemos por registro de índice e chegamos à localização real dos dados. Se os dados que procuramos não estiverem onde alcançamos diretamente seguindo o índice, o sistema inicia a busca sequencial até que os dados desejados sejam encontrados.

    Índice Multinível

    Os registros de índice incluem valores de chave de pesquisa e indicadores de dados. O índice multinível é armazenado no disco junto com os arquivos de banco de dados reais. Conforme o tamanho do banco de dados cresce, também aumenta o tamanho dos índices. É imensa a necessidade de manter os registros do índice na memória principal para agilizar as operações de busca. Se o índice de nível único for usado, um índice de tamanho grande não pode ser mantido na memória, o que leva a vários acessos ao disco.

    O índice multinível ajuda a quebrar o índice em vários índices menores, a fim de tornar o nível mais externo tão pequeno que possa ser salvo em um único bloco de disco, que pode ser facilmente acomodado em qualquer lugar da memória principal.

    Árvore B +

    A árvore AB + é uma árvore de pesquisa binária balanceada que segue um formato de índice multinível. Os nós folha de uma árvore B + denotam indicadores de dados reais. A árvore B + garante que todos os nós das folhas permaneçam na mesma altura, portanto equilibrados. Além disso, os nós folha são vinculados por meio de uma lista de links; portanto, uma árvore B + pode suportar acesso aleatório, bem como acesso sequencial.

    Estrutura da Árvore B +

    Cada nó folha está a uma distância igual do nó raiz. A árvore AB + é da ordemn Onde né fixo para cada árvore B + .

    Internal nodes -

    • Nós internos (não-folha) contêm pelo menos ponteiros ⌈n / 2⌉, exceto o nó raiz.
    • No máximo, um nó interno pode conter n ponteiros.

    Leaf nodes -

    • Os nós de folha contêm pelo menos ⌈n / 2⌉ ponteiros de registro e valores-chave ⌈n / 2⌉.
    • No máximo, um nó folha pode conter n pontos de registro e n valores-chave.
    • Cada nó folha contém um ponteiro de bloco P para apontar para o próximo nó folha e formar uma lista vinculada.

    Inserção de árvore B +

    • As árvores B + são preenchidas a partir da parte inferior e cada entrada é feita no nó folha.

    • Se um nó folha estourar -
      • Divida o nó em duas partes.

      • Partição em i = ⌊(m+1)/2⌋.

      • Primeiro i as entradas são armazenadas em um nó.

      • O resto das entradas (i + 1 em diante) são movidas para um novo nó.

      • ith a chave é duplicada no pai da folha.

    • Se um nó não folha estourar -

      • Divida o nó em duas partes.

      • Particionar o nó em i = ⌈(m+1)/2.

      • Inscrições até i são mantidos em um nó.

      • O resto das entradas são movidas para um novo nó.

    Exclusão da árvore B +

    • As entradas da árvore B + são excluídas nos nós folha.

    • A entrada de destino é pesquisada e excluída.

      • Se for um nó interno, exclua e substitua pela entrada da posição esquerda.

    • Após a exclusão, o underflow é testado,

      • Se ocorrer estouro negativo, distribua as entradas dos nós restantes.

    • Se a distribuição não for possível a partir da esquerda, então

      • Distribua dos nós diretamente para ele.

    • Se a distribuição não for possível da esquerda ou da direita, então

      • Mescle o nó com a esquerda e a direita.

    Para uma estrutura de banco de dados enorme, pode ser quase impossível pesquisar todos os valores de índice em todos os seus níveis e, em seguida, chegar ao bloco de dados de destino para recuperar os dados desejados. Hashing é uma técnica eficaz para calcular a localização direta de um registro de dados no disco sem usar a estrutura de índice.

    O hash usa funções hash com chaves de pesquisa como parâmetros para gerar o endereço de um registro de dados.

    Organização Hash

    • Bucket- Um arquivo hash armazena dados em formato de intervalo. Balde é considerado uma unidade de armazenamento. Um balde normalmente armazena um bloco de disco completo, que por sua vez pode armazenar um ou mais registros.

    • Hash Function - Uma função hash, h, é uma função de mapeamento que mapeia todo o conjunto de chaves de busca Kpara o endereço onde os registros reais são colocados. É uma função de chaves de pesquisa para endereços de bucket.

    Hashing estático

    No hashing estático, quando um valor de chave de pesquisa é fornecido, a função hash sempre calcula o mesmo endereço. Por exemplo, se a função hash mod-4 for usada, ela deve gerar apenas 5 valores. O endereço de saída deve ser sempre o mesmo para essa função. O número de baldes fornecidos permanece inalterado em todos os momentos.

    Operação

    • Insertion - Quando é necessário inserir um registro usando hash estático, a função hash h calcula o endereço do intervalo para a chave de pesquisa K, onde o registro será armazenado.

      Endereço do intervalo = h (K)

    • Search - Quando um registro precisa ser recuperado, a mesma função hash pode ser usada para recuperar o endereço do depósito onde os dados estão armazenados.

    • Delete - Esta é simplesmente uma pesquisa seguida por uma operação de exclusão.

    Estouro de balde

    A condição de estouro do balde é conhecida como collision. Este é um estado fatal para qualquer função hash estática. Nesse caso, o encadeamento de estouro pode ser usado.

    • Overflow Chaining- Quando os depósitos estão cheios, um novo depósito é alocado para o mesmo resultado hash e é vinculado após o anterior. Este mecanismo é chamadoClosed Hashing.

    • Linear Probing- Quando uma função hash gera um endereço no qual os dados já estão armazenados, o próximo depósito livre é alocado para ela. Este mecanismo é chamadoOpen Hashing.

    Hashing dinâmico

    O problema com o hashing estático é que ele não se expande ou encolhe dinamicamente conforme o tamanho do banco de dados aumenta ou diminui. O hash dinâmico fornece um mecanismo no qual depósitos de dados são adicionados e removidos dinamicamente e sob demanda. Hashing dinâmico também é conhecido comoextended hashing.

    A função de hash, em hash dinâmico, é feita para produzir um grande número de valores e apenas alguns são usados ​​inicialmente.

    Organização

    O prefixo de um valor hash inteiro é considerado um índice hash. Apenas uma parte do valor hash é usada para calcular endereços de bucket. Cada índice hash tem um valor de profundidade para indicar quantos bits são usados ​​para calcular uma função hash. Esses bits podem endereçar 2n buckets. Quando todos esses bits são consumidos - ou seja, quando todos os depósitos estão cheios - o valor da profundidade é aumentado linearmente e duas vezes os depósitos são alocados.

    Operação

    • Querying - Observe o valor de profundidade do índice hash e use esses bits para calcular o endereço do balde.

    • Update - Execute uma consulta como acima e atualize os dados.

    • Deletion - Realize uma consulta para localizar os dados desejados e exclua os mesmos.

    • Insertion - Calcular o endereço do depósito

      • Se o balde já estiver cheio.
        • Adicione mais baldes.
        • Adicione bits adicionais ao valor de hash.
        • Recalcule a função hash.
      • Outro
        • Adicione dados ao intervalo,
      • Se todos os baldes estiverem cheios, execute os remédios de hash estático.

    O hash não é favorável quando os dados são organizados em alguma ordem e as consultas exigem uma variedade de dados. Quando os dados são discretos e aleatórios, o hash tem o melhor desempenho.

    Os algoritmos de hash têm alta complexidade do que a indexação. Todas as operações de hash são feitas em tempo constante.

    Uma transação pode ser definida como um grupo de tarefas. Uma única tarefa é a unidade mínima de processamento que não pode ser mais dividida.

    Vamos dar um exemplo de uma transação simples. Suponha que um funcionário do banco transfira Rs 500 da conta de A para a conta de B. Essa transação muito simples e pequena envolve várias tarefas de baixo nível.

    A’s Account

    Open_Account(A)
    Old_Balance = A.balance
    New_Balance = Old_Balance - 500
    A.balance = New_Balance
    Close_Account(A)

    B’s Account

    Open_Account(B)
    Old_Balance = B.balance
    New_Balance = Old_Balance + 500
    B.balance = New_Balance
    Close_Account(B)

    Propriedades ACID

    Uma transação é uma unidade muito pequena de um programa e pode conter várias tarefas de nível inferior. Uma transação em um sistema de banco de dados deve manterAtomicidade, Consistência, Isolação, e Durabilidade - comumente conhecida como propriedades ACID - para garantir a precisão, integridade e integridade dos dados.

    • Atomicity- Esta propriedade indica que uma transação deve ser tratada como uma unidade atômica, ou seja, todas as suas operações são executadas ou nenhuma. Não deve haver nenhum estado em um banco de dados em que uma transação seja deixada parcialmente concluída. Os estados devem ser definidos antes da execução da transação ou após a execução / aborto / falha da transação.

    • Consistency- O banco de dados deve permanecer em um estado consistente após qualquer transação. Nenhuma transação deve ter qualquer efeito adverso sobre os dados que residem no banco de dados. Se o banco de dados estava em um estado consistente antes da execução de uma transação, ele também deve permanecer consistente após a execução da transação.

    • Durability- O banco de dados deve ser durável o suficiente para conter todas as suas atualizações mais recentes, mesmo se o sistema falhar ou reiniciar. Se uma transação atualiza um pedaço de dados em um banco de dados e confirma, o banco de dados manterá os dados modificados. Se uma transação for confirmada, mas o sistema falhar antes que os dados pudessem ser gravados no disco, esses dados serão atualizados assim que o sistema voltar a funcionar.

    • Isolation- Em um sistema de banco de dados onde mais de uma transação estão sendo executadas simultaneamente e em paralelo, a propriedade de isolamento afirma que todas as transações serão realizadas e executadas como se fosse a única transação no sistema. Nenhuma transação afetará a existência de qualquer outra transação.

    Serializabilidade

    Quando várias transações estão sendo executadas pelo sistema operacional em um ambiente de multiprogramação, há possibilidades de que as instruções de uma transação sejam intercaladas com alguma outra transação.

    • Schedule- Uma sequência de execução cronológica de uma transação é chamada de programação. Uma programação pode ter muitas transações, cada uma composta por uma série de instruções / tarefas.

    • Serial Schedule- É uma programação em que as transações são alinhadas de forma que uma transação seja executada primeiro. Quando a primeira transação completa seu ciclo, a próxima transação é executada. As transações são ordenadas uma após a outra. Esse tipo de programação é chamado de programação serial, pois as transações são executadas de maneira serial.

    Em um ambiente com várias transações, as programações em série são consideradas uma referência. A seqüência de execução de uma instrução em uma transação não pode ser alterada, mas duas transações podem ter suas instruções executadas de forma aleatória. Essa execução não causa danos se duas transações forem mutuamente independentes e trabalharem em diferentes segmentos de dados; mas no caso dessas duas transações estarem trabalhando nos mesmos dados, os resultados podem variar. Esse resultado sempre variável pode levar o banco de dados a um estado inconsistente.

    Para resolver este problema, permitimos a execução paralela de uma programação de transações, se suas transações forem serializáveis ​​ou tiverem alguma relação de equivalência entre elas.

    Cronogramas de equivalência

    Um cronograma de equivalência pode ser dos seguintes tipos -

    Equivalência de resultados

    Se dois cronogramas produzem o mesmo resultado após a execução, eles são considerados equivalentes de resultado. Eles podem produzir o mesmo resultado para algum valor e resultados diferentes para outro conjunto de valores. É por isso que essa equivalência geralmente não é considerada significativa.

    Ver Equivalência

    Duas programações seriam vistas como equivalência se as transações em ambas as programações executassem ações semelhantes de maneira semelhante.

    Por exemplo -

    • Se T lê os dados iniciais em S1, então também lê os dados iniciais em S2.

    • Se T lê o valor escrito por J em S1, então também lê o valor escrito por J em S2.

    • Se T realizar a gravação final no valor dos dados em S1, então também realizará a gravação final no valor dos dados em S2.

    Equivalência de conflito

    Duas programações seriam conflitantes se tivessem as seguintes propriedades -

    • Ambos pertencem a transações separadas.
    • Ambos acessam o mesmo item de dados.
    • Pelo menos um deles é a operação de "gravação".

    Duas programações com múltiplas transações com operações conflitantes são consideradas conflitantes equivalentes se e somente se -

    • Ambas as programações contêm o mesmo conjunto de transações.
    • A ordem dos pares conflitantes de operação é mantida em ambas as programações.

    Note- Exibir programações equivalentes são serializáveis ​​por exibição e programações equivalentes em conflito são serializáveis ​​por conflito. Todas as programações serializáveis ​​por conflito também podem ser visualizadas em série.

    Estados de transações

    Uma transação em um banco de dados pode estar em um dos seguintes estados -

    • Active- Neste estado, a transação está sendo executada. Este é o estado inicial de cada transação.

    • Partially Committed - Quando uma transação executa sua operação final, é considerada em um estado parcialmente confirmado.

    • Failed- Diz-se que uma transação está em um estado de falha se qualquer uma das verificações feitas pelo sistema de recuperação de banco de dados falhar. Uma transação com falha não pode mais prosseguir.

    • Aborted- Se alguma das verificações falhar e a transação atingir um estado de falha, o gerenciador de recuperação reverterá todas as suas operações de gravação no banco de dados para trazer o banco de dados de volta ao seu estado original onde estava antes da execução da transação. As transações neste estado são chamadas de abortadas. O módulo de recuperação de banco de dados pode selecionar uma das duas operações após o aborto de uma transação -

      • Reinicie a transação
      • Mate a transação
    • Committed- Se uma transação executa todas as suas operações com sucesso, diz-se que foi confirmada. Todos os seus efeitos agora estão permanentemente estabelecidos no sistema de banco de dados.

    Em um ambiente de multiprogramação onde várias transações podem ser executadas simultaneamente, é altamente importante controlar a simultaneidade das transações. Temos protocolos de controle de simultaneidade para garantir atomicidade, isolamento e serializabilidade de transações simultâneas. Os protocolos de controle de simultaneidade podem ser amplamente divididos em duas categorias -

    • Protocolos baseados em bloqueio
    • Protocolos baseados em carimbo de data / hora

    Protocolos baseados em bloqueio

    Os sistemas de banco de dados equipados com protocolos baseados em bloqueio usam um mecanismo pelo qual nenhuma transação pode ler ou gravar dados até adquirir um bloqueio apropriado. As fechaduras são de dois tipos -

    • Binary Locks- Um bloqueio em um item de dados pode estar em dois estados; ele está bloqueado ou desbloqueado.

    • Shared/exclusive- Este tipo de mecanismo de bloqueio diferencia os bloqueios com base em seus usos. Se um bloqueio é adquirido em um item de dados para realizar uma operação de gravação, é um bloqueio exclusivo. Permitir que mais de uma transação gravasse no mesmo item de dados levaria o banco de dados a um estado inconsistente. Os bloqueios de leitura são compartilhados porque nenhum valor de dados está sendo alterado.

    Existem quatro tipos de protocolos de bloqueio disponíveis -

    Protocolo de bloqueio simplista

    Os protocolos simplistas baseados em bloqueio permitem que as transações obtenham um bloqueio em cada objeto antes que uma operação de 'gravação' seja realizada. As transações podem desbloquear o item de dados após a conclusão da operação de 'gravação'.

    Protocolo de bloqueio de pré-reivindicação

    Os protocolos de pré-reivindicação avaliam suas operações e criam uma lista de itens de dados nos quais precisam de bloqueios. Antes de iniciar uma execução, a transação solicita ao sistema todos os bloqueios de que necessita previamente. Se todos os bloqueios forem concedidos, a transação executa e libera todos os bloqueios quando todas as suas operações terminam. Se todos os bloqueios não forem concedidos, a transação reverte e espera até que todos os bloqueios sejam concedidos.

    Bloqueio de duas fases 2PL

    Este protocolo de bloqueio divide a fase de execução de uma transação em três partes. Na primeira parte, quando a transação começa a ser executada, ela busca permissão para os bloqueios de que necessita. A segunda parte é onde a transação adquire todos os bloqueios. Assim que a transação libera seu primeiro bloqueio, a terceira fase é iniciada. Nesta fase, a transação não pode exigir nenhum novo bloqueio; ele apenas libera os bloqueios adquiridos.

    O bloqueio de duas fases tem duas fases, uma é growing, onde todos os bloqueios estão sendo adquiridos pela transação; e a segunda fase está encolhendo, onde os bloqueios mantidos pela transação estão sendo liberados.

    Para reivindicar um bloqueio exclusivo (gravação), uma transação deve primeiro adquirir um bloqueio compartilhado (leitura) e depois atualizá-lo para um bloqueio exclusivo.

    Bloqueio estrito de duas fases

    A primeira fase do Strict-2PL é igual a 2PL. Após adquirir todos os bloqueios na primeira fase, a transação continua a ser executada normalmente. Mas, em contraste com 2PL, Strict-2PL não libera um bloqueio após o uso. Strict-2PL mantém todos os bloqueios até o ponto de confirmação e libera todos os bloqueios de uma vez.

    Strict-2PL não tem interrupção em cascata como 2PL.

    Protocolos baseados em carimbo de data / hora

    O protocolo de simultaneidade mais comumente usado é o protocolo baseado em carimbo de data / hora. Este protocolo usa a hora do sistema ou contador lógico como um carimbo de data / hora.

    Os protocolos baseados em bloqueio gerenciam a ordem entre os pares conflitantes entre as transações no momento da execução, enquanto os protocolos baseados em carimbo de data / hora começam a funcionar assim que uma transação é criada.

    Cada transação possui um carimbo de data / hora associado a ela e a ordem é determinada pela idade da transação. Uma transação criada no horário 0002 seria mais antiga do que todas as outras transações posteriores. Por exemplo, qualquer transação 'y' entrando no sistema em 0004 é dois segundos mais nova e a prioridade seria dada à mais antiga.

    Além disso, cada item de dados recebe o último registro de data e hora de leitura e gravação. Isso permite que o sistema saiba quando a última operação de 'leitura e gravação' foi realizada no item de dados.

    Protocolo de pedido de carimbo de data / hora

    O protocolo de ordem de carimbo de data / hora garante a serialização entre as transações em suas operações conflitantes de leitura e gravação. É responsabilidade do sistema de protocolo que o par de tarefas conflitantes seja executado de acordo com os valores de carimbo de data / hora das transações.

    • O carimbo de data / hora da transação T i é denotado como TS (T i ).
    • O registro de data e hora de leitura do item de dados X é indicado por registro de data e hora R (X).
    • O registro de data e hora do item de dados X é denotado por registro de data e hora W (X).

    O protocolo de ordenação do carimbo de data / hora funciona da seguinte maneira -

    • If a transaction Ti issues a read(X) operation −

      • Se TS (Ti) <W-timestamp (X)
        • Operação rejeitada.
      • Se TS (Ti)> = W-timestamp (X)
        • Operação executada.
      • Todos os carimbos de data / hora de itens de dados atualizados.
    • If a transaction Ti issues a write(X) operation −

      • Se TS (Ti) <carimbo de data / hora R (X)
        • Operação rejeitada.
      • Se TS (Ti) <W-timestamp (X)
        • Operação rejeitada e Ti revertido.
      • Caso contrário, operação executada.

    Regra de escrita de Thomas

    Esta regra determina se TS (Ti) <carimbo de data / hora W (X), então a operação é rejeitada e T i é revertido.

    As regras de ordem de registro de data e hora podem ser modificadas para tornar a exibição da programação serializável.

    Em vez de fazer o rollback de T i , a própria operação de 'gravação' é ignorada.

    Em um sistema multiprocessos, deadlock é uma situação indesejada que surge em um ambiente de recursos compartilhados, onde um processo aguarda indefinidamente por um recurso mantido por outro processo.

    Por exemplo, suponha um conjunto de transações {T 0 , T 1 , T 2 , ..., T n }. T 0 precisa de um recurso X para completar sua tarefa. O recurso X é mantido por T 1 , e T 1 está aguardando um recurso Y, que é mantido por T 2 . T 2 está esperando por Z de recursos, que é realizada por T 0 . Assim, todos os processos esperam uns pelos outros para liberar recursos. Nesta situação, nenhum dos processos pode terminar sua tarefa. Essa situação é conhecida como deadlock.

    Deadlocks não são saudáveis ​​para um sistema. No caso de um sistema ficar preso em um conflito, as transações envolvidas no conflito são revertidas ou reiniciadas.

    Prevenção de deadlock

    Para evitar qualquer situação de deadlock no sistema, o SGBD inspeciona agressivamente todas as operações, onde as transações estão prestes a ser executadas. O SGBD inspeciona as operações e analisa se elas podem criar uma situação de conflito. Se descobrir que pode ocorrer uma situação de conflito, essa transação nunca poderá ser executada.

Existem esquemas de prevenção de conflito que usam o mecanismo de ordenação de registro de data e hora de transações para predeterminar uma situação de conflito.

Esquema Wait-Die

Nesse esquema, se uma transação solicitar o bloqueio de um recurso (item de dados), que já está em conflito com o bloqueio por outra transação, então uma das duas possibilidades pode ocorrer -

  • Se TS (T i ) <TS (T j ) - isto é, T i , que está solicitando um bloqueio conflitante, é mais antigo que T j - então T i pode esperar até que o item de dados esteja disponível.

  • Se TS (T i )> TS (t j ) - isto é, T i é mais jovem que T j - então T i morre. T i é reiniciado mais tarde com um atraso aleatório, mas com o mesmo carimbo de data / hora.

Este esquema permite que a transação mais antiga espere, mas mata a mais jovem.

Esquema de Espera de Ferida

Neste esquema, se uma transação solicitar o bloqueio de um recurso (item de dados), que já foi mantido com bloqueio conflitante por alguma outra transação, uma das duas possibilidades pode ocorrer -

  • Se TS (T i ) <TS (T j ), então T i força T j a ser revertido - isto é, T i feridas T j . T j é reiniciado posteriormente com um atraso aleatório, mas com o mesmo registro de data e hora.

  • Se TS (T i )> TS (T j ), então T i é forçado a esperar até que o recurso esteja disponível.

Este esquema permite que a transação mais jovem espere; mas quando uma transação mais antiga solicita um item mantido por uma mais jovem, a transação mais antiga força a mais jovem a abortar e liberar o item.

Em ambos os casos, a transação que entra no sistema posteriormente é abortada.

Prevenção de deadlock

Abortar uma transação nem sempre é uma abordagem prática. Em vez disso, os mecanismos de prevenção de deadlock podem ser usados ​​para detectar qualquer situação de deadlock com antecedência. Métodos como "gráfico de espera" estão disponíveis, mas são adequados apenas para os sistemas onde as transações são leves e têm menos instâncias de recursos. Em um sistema volumoso, as técnicas de prevenção de deadlock podem funcionar bem.

Gráfico de Espera

Este é um método simples disponível para rastrear se qualquer situação de deadlock pode surgir. Para cada transação que entra no sistema, um nó é criado. Quando uma transação T i solicita um bloqueio em um item, digamos X, que é mantido por alguma outra transação T j , uma aresta direcionada é criada de T i para T j . Se T j liberar o item X, a borda entre eles será eliminada e T i bloqueará o item de dados.

O sistema mantém este gráfico de espera para cada transação que aguarda alguns itens de dados mantidos por outros. O sistema continua verificando se há algum ciclo no gráfico.

Aqui, podemos usar qualquer uma das duas abordagens a seguir -

  • Em primeiro lugar, não permita qualquer solicitação de um item que já esteja bloqueado por outra transação. Isso nem sempre é viável e pode causar fome, onde uma transação espera indefinidamente por um item de dados e nunca pode adquiri-lo.

  • A segunda opção é reverter uma das transações. Nem sempre é viável reverter a transação mais recente, pois pode ser importante do que a mais antiga. Com a ajuda de algum algoritmo relativo, é escolhida uma transação que deve ser abortada. Esta transação é conhecida comovictim e o processo é conhecido como victim selection.

Perda de armazenamento volátil

Um armazenamento volátil como a RAM armazena todos os logs ativos, buffers de disco e dados relacionados. Além disso, ele armazena todas as transações que estão sendo executadas atualmente. O que acontecerá se esse armazenamento volátil falhar abruptamente? Obviamente, isso removeria todos os logs e cópias ativas do banco de dados. Isso torna a recuperação quase impossível, pois tudo o que é necessário para recuperar os dados é perdido.

As seguintes técnicas podem ser adotadas em caso de perda de armazenamento de voláteis -

  • Nós podemos ter checkpoints em vários estágios para salvar o conteúdo do banco de dados periodicamente.

  • Um estado de banco de dados ativo na memória volátil pode ser periodicamente dumped em um armazenamento estável, que também pode conter logs e transações ativas e blocos de buffer.

  • <dump> pode ser marcado em um arquivo de log, sempre que o conteúdo do banco de dados é despejado de uma memória não volátil para uma estável.

Recuperação

  • Quando o sistema se recupera de uma falha, ele pode restaurar o despejo mais recente.

  • Ele pode manter uma lista de redo e uma lista de undo como pontos de verificação.

  • Ele pode recuperar o sistema consultando listas de desfazer-refazer para restaurar o estado de todas as transações até o último ponto de verificação.

Backup e recuperação de banco de dados de falha catastrófica

Uma falha catastrófica é aquela em que um dispositivo de armazenamento secundário estável é corrompido. Com o dispositivo de armazenamento, todos os dados valiosos armazenados nele são perdidos. Temos duas estratégias diferentes para recuperar dados de uma falha catastrófica -

  • Backup remoto & minu; Aqui, uma cópia de backup do banco de dados é armazenada em um local remoto de onde pode ser restaurada em caso de uma catástrofe.

  • Como alternativa, os backups do banco de dados podem ser feitos em fitas magnéticas e armazenados em um local mais seguro. Esse backup pode ser posteriormente transferido para um banco de dados recém-instalado para trazê-lo para o ponto de backup.

Bancos de dados de adultos são muito grandes para fazer backup com frequência. Nesses casos, temos técnicas em que podemos restaurar um banco de dados apenas olhando seus logs. Portanto, tudo o que precisamos fazer aqui é fazer um backup de todos os logs em intervalos frequentes de tempo. O backup do banco de dados pode ser feito uma vez por semana e os logs, sendo muito pequenos, podem ser copiados todos os dias ou com a maior freqüência possível.

Backup Remoto

O backup remoto fornece uma sensação de segurança caso o local principal onde o banco de dados está localizado seja destruído. O backup remoto pode ser offline, em tempo real ou online. Caso esteja offline, a manutenção é feita manualmente.

Os sistemas de backup online são mais em tempo real e salva-vidas para administradores de banco de dados e investidores. Um sistema de backup online é um mecanismo onde cada bit dos dados em tempo real é copiado simultaneamente em dois locais distantes. Um deles é conectado diretamente ao sistema e o outro é mantido em local remoto como backup.

Assim que o armazenamento do banco de dados primário falha, o sistema de backup detecta a falha e alterna o sistema do usuário para o armazenamento remoto. Às vezes, isso é tão instantâneo que os usuários nem percebem uma falha.

Crash Recovery

O DBMS é um sistema altamente complexo com centenas de transações sendo executadas a cada segundo. A durabilidade e robustez de um DBMS dependem de sua arquitetura complexa e de seu hardware e software de sistema subjacentes. Se ele falhar ou travar em meio às transações, espera-se que o sistema siga algum tipo de algoritmo ou técnicas para recuperar os dados perdidos.

Classificação de Falha

Para ver onde o problema ocorreu, generalizamos uma falha em várias categorias, da seguinte forma -

Falha de transação

Uma transação deve ser abortada quando falha em sua execução ou quando atinge um ponto de onde não pode prosseguir. Isso é chamado de falha de transação, onde apenas algumas transações ou processos são prejudicados.

Os motivos para uma falha na transação podem ser -

  • Logical errors - Onde uma transação não pode ser concluída porque contém algum erro de código ou qualquer condição de erro interno.

  • System errors- Onde o próprio sistema de banco de dados encerra uma transação ativa porque o SGBD não é capaz de executá-la, ou tem que parar devido a alguma condição do sistema. Por exemplo, em caso de conflito ou indisponibilidade de recursos, o sistema aborta uma transação ativa.

Falha do sistema

Existem problemas - externos ao sistema - que podem fazer com que o sistema pare abruptamente e deixe o sistema travar. Por exemplo, interrupções no fornecimento de energia podem causar falha de hardware subjacente ou falha de software.

Os exemplos podem incluir erros do sistema operacional.

Falha de disco

Nos primeiros dias da evolução da tecnologia, era um problema comum quando as unidades de disco rígido ou de armazenamento costumavam falhar com frequência.

As falhas de disco incluem a formação de setores defeituosos, inacessibilidade do disco, falha da cabeça do disco ou qualquer outra falha, que destrói todo ou parte do armazenamento do disco.

Estrutura de Armazenamento

Já descrevemos o sistema de armazenamento. Em resumo, a estrutura de armazenamento pode ser dividida em duas categorias -

  • Volatile storage- Como o nome sugere, um armazenamento volátil não pode sobreviver a travamentos do sistema. Dispositivos de armazenamento voláteis são colocados muito próximos à CPU; normalmente eles estão embutidos no próprio chipset. Por exemplo, a memória principal e a memória cache são exemplos de armazenamento volátil. Eles são rápidos, mas podem armazenar apenas uma pequena quantidade de informações.

  • Non-volatile storage- Essas memórias são feitas para sobreviver a falhas no sistema. Eles são enormes em capacidade de armazenamento de dados, mas mais lentos em acessibilidade. Os exemplos podem incluir discos rígidos, fitas magnéticas, memória flash e RAM não volátil (com bateria de backup).

Recuperação e Atomicidade

Quando um sistema falha, ele pode ter várias transações sendo executadas e vários arquivos abertos para que eles modifiquem os itens de dados. As transações são feitas de várias operações, que são de natureza atômica. Mas de acordo com as propriedades ACID do SGBD, a atomicidade das transações como um todo deve ser mantida, ou seja, todas as operações são executadas ou nenhuma.

Quando um DBMS se recupera de uma falha, ele deve manter o seguinte -

  • Deve verificar os estados de todas as transações que estavam sendo executadas.

  • Uma transação pode estar no meio de alguma operação; o SGBD deve garantir a atomicidade da transação neste caso.

  • Ele deve verificar se a transação pode ser concluída agora ou se precisa ser revertida.

  • Nenhuma transação poderia deixar o DBMS em um estado inconsistente.

Existem dois tipos de técnicas, que podem ajudar um SGBD na recuperação, bem como na manutenção da atomicidade de uma transação -

  • Manter os logs de cada transação e gravá-los em algum armazenamento estável antes de realmente modificar o banco de dados.

  • Mantendo a paginação sombra, onde as alterações são feitas em uma memória volátil, e posteriormente, o banco de dados real é atualizado.

Recuperação baseada em log

Log é uma sequência de registros, que mantém os registros das ações realizadas por uma transação. É importante que os logs sejam gravados antes da modificação real e armazenados em uma mídia de armazenamento estável, à prova de falhas.

A recuperação baseada em log funciona da seguinte maneira -

  • O arquivo de log é mantido em uma mídia de armazenamento estável.

  • Quando uma transação entra no sistema e inicia a execução, ele grava um log sobre ela.

<Tn, Start>
  • Quando a transação modifica um item X, ela grava os logs da seguinte forma -

<Tn, X, V1, V2>

Ele diz que T n mudou o valor de X, de V 1 para V 2 .

  • Quando a transação termina, ele registra -
<Tn, commit>

O banco de dados pode ser modificado usando duas abordagens -

  • Deferred database modification - Todos os logs são gravados no armazenamento estável e o banco de dados é atualizado quando uma transação é confirmada.

  • Immediate database modification- Cada log segue uma modificação real do banco de dados. Ou seja, o banco de dados é modificado imediatamente após cada operação.

Recuperação com transações simultâneas

Quando mais de uma transação está sendo executada em paralelo, os logs são intercalados. No momento da recuperação, seria difícil para o sistema de recuperação rastrear todos os logs e, em seguida, iniciar a recuperação. Para amenizar essa situação, a maioria dos DBMS modernos usa o conceito de 'pontos de verificação'.

Checkpoint

Manter e manter registros em tempo real e em ambiente real pode ocupar todo o espaço de memória disponível no sistema. Com o passar do tempo, o arquivo de log pode ficar grande demais para ser manipulado. Checkpoint é um mecanismo onde todos os logs anteriores são removidos do sistema e armazenados permanentemente em um disco de armazenamento. Checkpoint declara um ponto antes do qual o DBMS estava em estado consistente e todas as transações foram confirmadas.

Recuperação

Quando um sistema com transações simultâneas falha e se recupera, ele se comporta da seguinte maneira -

  • O sistema de recuperação lê os logs de trás para frente, do fim ao último ponto de verificação.

  • Ele mantém duas listas, uma lista de desfazer e uma lista de refazer.

  • Se o sistema de recuperação vê um log com <T n , Start> e <T n , Commit> ou apenas <T n , Commit>, ele coloca a transação na lista de refazer.

  • Se o sistema de recuperação vê um log com <T n , Start>, mas nenhum log de confirmação ou aborto encontrado, ele coloca a transação na lista de desfazer.

Todas as transações na lista de desfazer são então desfeitas e seus logs são removidos. Todas as transações na lista de redo e seus logs anteriores são removidos e refeitos antes de salvar seus logs.