Banco de dados relacional - Relational database

Um banco de dados relacional é um banco de dados digital baseado no modelo relacional de dados, conforme proposto por EF Codd em 1970. Um sistema usado para manter bancos de dados relacionais é um sistema de gerenciamento de banco de dados relacional (RDBMS). Muitos sistemas de banco de dados relacionais têm a opção de usar o SQL (Structured Query Language) para consultar e manter o banco de dados.

História

O termo "banco de dados relacional" foi inventado por EF Codd na IBM em 1970. Codd introduziu o termo em seu artigo de pesquisa "Um modelo relacional de dados para grandes bancos de dados compartilhados". Neste artigo e em artigos posteriores, ele definiu o que ele quis dizer com "relacional". Uma definição bem conhecida do que constitui um sistema de banco de dados relacional é composta pelas 12 regras de Codd . No entanto, nenhuma implementação comercial do modelo relacional está em conformidade com todas as regras de Codd, então o termo gradualmente passou a descrever uma classe mais ampla de sistemas de banco de dados, que, no mínimo:

  1. Apresente os dados ao usuário como relações (uma apresentação em forma tabular, ou seja, como uma coleção de tabelas com cada tabela consistindo em um conjunto de linhas e colunas );
  2. Fornece operadores relacionais para manipular os dados em forma tabular.

Em 1974, a IBM começou a desenvolver o System R , um projeto de pesquisa para desenvolver um protótipo de RDBMS. O primeiro sistema vendido como RDBMS foi o Multics Relational Data Store (junho de 1976). Oracle foi lançado em 1979 pela Relational Software, agora Oracle Corporation . Seguiram-se Ingres e IBM BS12 . Outros exemplos de um RDBMS incluem DB2 , SAP Sybase ASE e Informix . Em 1984, o primeiro RDBMS para Macintosh começou a ser desenvolvido, com o codinome Silver Surfer, e foi lançado em 1987 como 4ª Dimensão e hoje conhecido como 4D.

Os primeiros sistemas que foram implementações relativamente fiéis do modelo relacional foram de:

  • Universidade de Michigan - Micro DBMS (1969)
  • Instituto de Tecnologia de Massachusetts (1971)
  • IBM UK Scientific Center em Peterlee - IS1 (1970–72) e seu sucessor, PRTV (1973–79)

A definição mais comum de um RDBMS é um produto que apresenta uma visão dos dados como uma coleção de linhas e colunas, mesmo que não seja estritamente baseada na teoria relacional . Por essa definição, os produtos RDBMS geralmente implementam algumas, mas não todas as 12 regras de Codd.

Uma segunda escola de pensamento argumenta que se um banco de dados não implementa todas as regras de Codd (ou o entendimento atual sobre o modelo relacional, conforme expresso por Christopher J. Date , Hugh Darwen e outros), ele não é relacional. Essa visão, compartilhada por muitos teóricos e outros adeptos estritos dos princípios de Codd, desqualificaria a maioria dos SGBDs como não relacionais. Para esclarecimento, eles geralmente se referem a alguns RDBMSs como sistemas de gerenciamento de banco de dados verdadeiramente relacionais (TRDBMS), nomeando outros sistemas de gerenciamento de banco de dados pseudo-relacionais (PRDBMS).

Em 2009, a maioria dos DBMSs relacionais comerciais empregava SQL como linguagem de consulta .

Linguagens de consulta alternativas foram propostas e implementadas, notavelmente a implementação pré-1996 do Ingres QUEL .

Modelo relacional

Este modelo organiza os dados em uma ou mais tabelas (ou "relações") de colunas e linhas , com uma chave única que identifica cada linha. As linhas também são chamadas de registros ou tuplas . As colunas também são chamadas de atributos. Geralmente, cada tabela / relação representa um "tipo de entidade" (como cliente ou produto). As linhas representam instâncias desse tipo de entidade (como "Lee" ou "presidente") e as colunas que representam os valores atribuídos a essa instância (como endereço ou preço).

Por exemplo, cada linha de uma mesa de classe corresponde a uma classe, e uma classe corresponde a vários alunos, então a relação entre a mesa da classe e a mesa do aluno é "um para muitos"

Chaves

Cada linha em uma tabela possui sua própria chave exclusiva. As linhas em uma tabela podem ser vinculadas a linhas em outras tabelas adicionando uma coluna para a chave exclusiva da linha vinculada (tais colunas são conhecidas como chaves estrangeiras ). Codd mostrou que os relacionamentos de dados de complexidade arbitrária podem ser representados por um simples conjunto de conceitos.

Parte desse processamento envolve ser capaz de selecionar ou modificar consistentemente uma e apenas uma linha em uma tabela. Portanto, a maioria das implementações físicas tem uma chave primária exclusiva (PK) para cada linha em uma tabela. Quando uma nova linha é gravada na tabela, um novo valor exclusivo para a chave primária é gerado; esta é a chave que o sistema usa principalmente para acessar a mesa. O desempenho do sistema é otimizado para PKs. Outras teclas mais naturais também podem ser identificadas e definidas como teclas alternativas (AK). Freqüentemente, várias colunas são necessárias para formar um AK (esse é um dos motivos pelos quais uma única coluna de inteiro é normalmente transformada em PK). Tanto os PKs quanto os AKs têm a capacidade de identificar exclusivamente uma linha em uma tabela. Tecnologia adicional pode ser aplicada para garantir um ID exclusivo em todo o mundo, um identificador exclusivo globalmente , quando houver requisitos de sistema mais amplos.

As chaves primárias em um banco de dados são usadas para definir os relacionamentos entre as tabelas. Quando um PK migra para outra tabela, ele se torna uma chave estrangeira na outra tabela. Quando cada célula pode conter apenas um valor e o PK migra para uma tabela de entidade regular, esse padrão de design pode representar um relacionamento um para um ou um para muitos . A maioria dos designs de banco de dados relacional resolve relacionamentos muitos para muitos criando uma tabela adicional que contém os PKs de ambas as outras tabelas de entidade - o relacionamento se torna uma entidade; a tabela de resolução é então nomeada apropriadamente e os dois FKs são combinados para formar um PK. A migração de PKs para outras tabelas é a segunda razão principal pela qual números inteiros atribuídos pelo sistema são usados ​​normalmente como PKs; geralmente não há eficiência nem clareza na migração de um monte de outros tipos de colunas.

Relacionamentos

Os relacionamentos são uma conexão lógica entre diferentes tabelas, estabelecida com base na interação entre essas tabelas.

Transações

Para que um sistema de gerenciamento de banco de dados (DBMS) opere com eficiência e precisão, ele deve usar transações ACID .

Procedimentos armazenados

A maior parte da programação em um RDBMS é realizada usando procedimentos armazenados (SPs). Freqüentemente, os procedimentos podem ser usados ​​para reduzir significativamente a quantidade de informações transferidas dentro e fora de um sistema. Para aumentar a segurança, o design do sistema pode conceder acesso apenas aos procedimentos armazenados e não diretamente às tabelas. Os procedimentos armazenados fundamentais contêm a lógica necessária para inserir novos dados e atualizar os existentes. Procedimentos mais complexos podem ser escritos para implementar regras e lógicas adicionais relacionadas ao processamento ou seleção de dados.

Terminologia

Terminologia de banco de dados relacional

O banco de dados relacional foi definido pela primeira vez em junho de 1970 por Edgar Codd , do San Jose Research Laboratory da IBM . A visão de Codd sobre o que se qualifica como um RDBMS está resumida nas 12 regras de Codd . Um banco de dados relacional se tornou o tipo predominante de banco de dados. Outros modelos além do modelo relacional incluem o modelo de banco de dados hierárquico e o modelo de rede .

A tabela abaixo resume alguns dos termos mais importantes do banco de dados relacional e o termo SQL correspondente :

Termo SQL Termo de banco de dados relacional Descrição
Linha Tupla ou registro Um conjunto de dados que representa um único item
Coluna Atributo ou campo Um elemento rotulado de uma tupla, por exemplo, "Endereço" ou "Data de nascimento"
Mesa Relação ou base relvar Um conjunto de tuplas compartilhando os mesmos atributos; um conjunto de colunas e linhas
Ver ou conjunto de resultados Relvar derivado Qualquer conjunto de tuplas; um relatório de dados do RDBMS em resposta a uma consulta

Relações ou tabelas

Uma relação é definida como um conjunto de tuplas que possuem os mesmos atributos . Uma tupla geralmente representa um objeto e informações sobre esse objeto. Os objetos são normalmente objetos físicos ou conceitos. Uma relação é geralmente descrita como uma tabela , que é organizada em linhas e colunas . Todos os dados referenciados por um atributo estão no mesmo domínio e obedecem às mesmas restrições.

O modelo relacional especifica que as tuplas de uma relação não têm ordem específica e que as tuplas, por sua vez, não impõem nenhuma ordem aos atributos. Os aplicativos acessam os dados especificando consultas, que usam operações como selecionar para identificar tuplas, projeto para identificar atributos e junção para combinar relações. As relações podem ser modificadas usando os operadores inserir , excluir e atualizar . Novas tuplas podem fornecer valores explícitos ou derivar de uma consulta. Da mesma forma, as consultas identificam as tuplas para atualização ou exclusão.

As tuplas, por definição, são únicas. Se a tupla contém um candidato ou chave primária, então obviamente ela é única; no entanto, uma chave primária não precisa ser definida para uma linha ou registro para ser uma tupla. A definição de uma tupla requer que ela seja única, mas não requer que uma chave primária seja definida. Como uma tupla é única, seus atributos, por definição, constituem uma superchave .

Relações de base e derivadas

Em um banco de dados relacional, todos os dados são armazenados e acessados ​​por meio de relações . As relações que armazenam dados são chamadas de "relações de base" e, nas implementações, são chamadas de "tabelas". Outras relações não armazenam dados, mas são calculadas aplicando operações relacionais a outras relações. Essas relações às vezes são chamadas de "relações derivadas". Em implementações, eles são chamados de " visualizações " ou "consultas". As relações derivadas são convenientes porque atuam como uma única relação, embora possam obter informações de várias relações. Além disso, as relações derivadas podem ser usadas como uma camada de abstração .

Domínio

Um domínio descreve o conjunto de valores possíveis para um determinado atributo e pode ser considerado uma restrição no valor do atributo. Matematicamente, anexar um domínio a um atributo significa que qualquer valor para o atributo deve ser um elemento do conjunto especificado. A cadeia de caracteres "ABC" , por exemplo, não está no domínio inteiro, mas o valor inteiro 123 está. Outro exemplo de domínio descreve os valores possíveis para o campo "CoinFace" como ("Cabeças", "Caudas"). Portanto, o campo "CoinFace" não aceitará valores de entrada como (0,1) ou (H, T).

Restrições

As restrições tornam possível restringir ainda mais o domínio de um atributo. Por exemplo, uma restrição pode restringir um determinado atributo inteiro a valores entre 1 e 10. As restrições fornecem um método de implementação de regras de negócios no banco de dados e oferecem suporte ao uso subsequente de dados na camada de aplicativo. O SQL implementa a funcionalidade de restrição na forma de restrições de verificação . As restrições restringem os dados que podem ser armazenados nas relações . Geralmente, eles são definidos por meio de expressões que resultam em um valor booleano , indicando se os dados satisfazem ou não a restrição. As restrições podem ser aplicadas a atributos únicos, a uma tupla (restringindo combinações de atributos) ou a uma relação inteira. Como cada atributo tem um domínio associado, existem restrições ( restrições de domínio ). As duas regras principais para o modelo relacional são conhecidas como integridade de entidade e integridade referencial .

Chave primária

Cada relação / tabela possui uma chave primária, sendo esta uma consequência de uma relação ser um conjunto . Uma chave primária especifica exclusivamente uma tupla dentro de uma tabela. Embora os atributos naturais (atributos usados ​​para descrever os dados inseridos) às vezes sejam boas chaves primárias, as chaves substitutas costumam ser usadas em seu lugar. Uma chave substituta é um atributo artificial atribuído a um objeto que o identifica exclusivamente (por exemplo, em uma tabela de informações sobre alunos em uma escola, eles podem receber uma identificação de aluno para diferenciá-los). A surrogate key não tem significado intrínseco (inerente), mas é útil por meio de sua capacidade de identificar exclusivamente uma tupla. Outra ocorrência comum, especialmente em relação à cardinalidade N: M, é a chave composta . Uma chave composta é uma chave formada por dois ou mais atributos em uma tabela que (juntos) identificam um registro de maneira exclusiva.

Chave estrangeira

Uma chave estrangeira é um campo em uma tabela relacional que corresponde à coluna de chave primária de outra tabela. Relaciona as duas chaves. As chaves estrangeiras não precisam ter valores exclusivos na relação de referência. Uma chave estrangeira pode ser usada para tabelas de referência cruzada e usa efetivamente os valores dos atributos na relação referenciada para restringir o domínio de um ou mais atributos na relação de referência. O conceito é descrito formalmente como: "Para todas as tuplas na relação de referência projetada sobre os atributos de referência, deve haver uma tupla na relação referenciada projetada sobre esses mesmos atributos de modo que os valores em cada um dos atributos de referência correspondam aos valores correspondentes em os atributos referenciados. "

Procedimentos armazenados

Um procedimento armazenado é um código executável associado e geralmente armazenado no banco de dados. Os procedimentos armazenados geralmente coletam e personalizam operações comuns, como inserir uma tupla em uma relação , reunir informações estatísticas sobre padrões de uso ou encapsular lógicas e cálculos de negócios complexos . Freqüentemente, eles são usados ​​como uma interface de programação de aplicativo (API) para segurança ou simplicidade. As implementações de procedimentos armazenados em SQL RDBMSs geralmente permitem que os desenvolvedores aproveitem as extensões de procedimentos (geralmente específicas do fornecedor) para a sintaxe SQL declarativa padrão . Os procedimentos armazenados não fazem parte do modelo de banco de dados relacional, mas todas as implementações comerciais os incluem.

Índice

Um índice é uma forma de fornecer acesso mais rápido aos dados. Os índices podem ser criados em qualquer combinação de atributos em uma relação . As consultas que filtram usando esses atributos podem encontrar tuplas correspondentes diretamente usando o índice (semelhante à consulta da tabela Hash ), sem ter que verificar cada tupla por vez. Isso é análogo a usar o índice de um livro para ir diretamente para a página na qual as informações que você está procurando foram encontradas, de forma que você não precise ler o livro inteiro para encontrar o que está procurando. Os bancos de dados relacionais normalmente fornecem várias técnicas de indexação, cada uma das quais é ideal para alguma combinação de distribuição de dados, tamanho da relação e padrão de acesso típico. Os índices são geralmente implementados por meio de árvores B + , árvores R e bitmaps . Os índices geralmente não são considerados parte do banco de dados, pois são considerados um detalhe de implementação, embora os índices sejam normalmente mantidos pelo mesmo grupo que mantém as outras partes do banco de dados. O uso de índices eficientes em chaves primárias e estrangeiras pode melhorar drasticamente o desempenho da consulta. Isso ocorre porque os índices B-tree resultam em tempos de consulta proporcionais a log (n) onde n é o número de linhas em uma tabela e os índices hash resultam em consultas de tempo constante (sem dependência de tamanho, desde que a parte relevante do índice se ajuste memória).

Operações relacionais

As consultas feitas no banco de dados relacional e as variáveis ​​de relacionamento derivadas no banco de dados são expressas em um cálculo relacional ou álgebra relacional . Em sua álgebra relacional original, Codd introduziu oito operadores relacionais em dois grupos de quatro operadores cada. Os primeiros quatro operadores foram baseados nas operações matemáticas tradicionais de conjunto :

  • O operador de união combina as tuplas de duas relações e remove todas as tuplas duplicadas do resultado. O operador de união relacional é equivalente ao operador SQL UNION .
  • O operador de interseção produz o conjunto de tuplas que duas relações compartilham. A interseção é implementada em SQL na forma do operador INTERSECT .
  • O operador diferença atua sobre duas relações e produz o conjunto de tuplas da primeira relação que não existem na segunda relação. A diferença é implementada em SQL na forma do operador EXCEPT ou MINUS.
  • O produto cartesiano de duas relações é uma junção que não é restrita por nenhum critério, resultando em cada tupla da primeira relação sendo casada com cada tupla da segunda relação. O produto cartesiano é implementado em SQL como o operador Cross join .

Os demais operadores propostos por Codd envolvem operações especiais específicas para bancos de dados relacionais:

  • A operação de seleção, ou restrição, recupera tuplas de uma relação, limitando os resultados apenas àqueles que atendem a um critério específico, ou seja, um subconjunto em termos de teoria dos conjuntos. O equivalente SQL da seleção é a instrução de consulta SELECT com uma cláusula WHERE .
  • A operação de projeção extrai apenas os atributos especificados de uma tupla ou conjunto de tuplas.
  • A operação de junção definida para bancos de dados relacionais costuma ser chamada de junção natural. Nesse tipo de junção, duas relações são conectadas por seus atributos comuns. A aproximação do MySQL de uma junção natural é o operador Inner join . No SQL, um INNER JOIN evita que um produto cartesiano ocorra quando há duas tabelas em uma consulta. Para cada tabela adicionada a uma Consulta SQL, um INNER JOIN adicional é adicionado para evitar um produto cartesiano. Portanto, para N tabelas em uma consulta SQL, deve haver N − 1 INNER JOINS para evitar um produto cartesiano.
  • A operação de divisão relacional é um pouco mais complexa e envolve essencialmente o uso das tuplas de uma relação (o dividendo) para particionar uma segunda relação (o divisor). O operador de divisão relacional é efetivamente o oposto do operador de produto cartesiano (daí o nome).

Outros operadores foram introduzidos ou propostos desde a introdução de Codd dos oito originais, incluindo operadores de comparação relacional e extensões que oferecem suporte para aninhamento e dados hierárquicos, entre outros.

Normalização

A normalização foi proposta pela primeira vez por Codd como parte integrante do modelo relacional. Ele engloba um conjunto de procedimentos projetados para eliminar domínios não simples (valores não atômicos) e a redundância (duplicação) de dados, o que por sua vez evita anomalias de manipulação de dados e perda de integridade dos dados. As formas mais comuns de normalização aplicadas a bancos de dados são chamadas de formas normais .

RDBMS

A estrutura geral de um banco de dados relacional

Connolly e Begg definem Database Management System (DBMS) como um "sistema de software que permite aos usuários definir, criar, manter e controlar o acesso ao banco de dados". RDBMS é uma extensão desse acrônimo que às vezes é usado quando o banco de dados subjacente é relacional.

Uma definição alternativa para um sistema de gerenciamento de banco de dados relacional é um sistema de gerenciamento de banco de dados (DBMS) baseado no modelo relacional . A maioria dos bancos de dados amplamente usados ​​hoje é baseada neste modelo.

Os RDBMSs têm sido uma opção comum para o armazenamento de informações em bancos de dados usados ​​para registros financeiros, informações de fabricação e logística, dados de pessoal e outras aplicações desde os anos 1980. Os bancos de dados relacionais freqüentemente substituíram os bancos de dados hierárquicos legados e bancos de dados de rede , porque RDBMS eram mais fáceis de implementar e administrar. No entanto, os dados armazenados relacionais recebidos desafios continuados e malsucedidos por sistemas de gerenciamento de banco de dados de objetos nas décadas de 1980 e 1990, (que foram introduzidos em uma tentativa de resolver a chamada incompatibilidade de impedância relacional de objeto entre bancos de dados relacionais e programas de aplicativos orientados a objetos), bem como por sistemas de gerenciamento de banco de dados XML na década de 1990. No entanto, devido à expansão de tecnologias, como escalonamento horizontal de clusters de computador , os bancos de dados NoSQL se tornaram populares recentemente como uma alternativa aos bancos de dados RDBMS.

Bancos de dados relacionais distribuídos

A arquitetura de banco de dados relacional distribuída (DRDA) foi projetada por um grupo de trabalho da IBM no período de 1988 a 1994. A DRDA permite que bancos de dados relacionais conectados em rede cooperem para atender a solicitações SQL. As mensagens, protocolos e componentes estruturais do DRDA são definidos pela Arquitetura de Gerenciamento de Dados Distribuídos .

Quota de mercado

De acordo com a DB-Engines , em março de 2021, os sistemas mais utilizados foram:

  1. Banco de dados Oracle
  2. MySQL
  3. Microsoft SQL Server
  4. PostgreSQL (software livre)
  5. IBM Db2
  6. SQLite (software livre)
  7. Microsoft Access
  8. MariaDB (software livre)
  9. Hive (software livre; especializado para data warehouses ).
  10. Teradata
  11. Banco de dados SQL do Microsoft Azure

De acordo com a empresa de pesquisa Gartner , em 2011, os cinco principais fornecedores de banco de dados relacional de software proprietário por receita foram Oracle (48,8%), IBM (20,2%), Microsoft (17,0%), SAP incluindo Sybase (4,6%) e Teradata (3,7 %).

Veja também

Referências

Fontes


links externos