Banco de dados relacional
Origem: Wikipédia, a enciclopédia livre.
Um Banco de Dados Relacional é um banco de dados que segue o Modelo Relacional.
De forma mais detalhada, um Banco de Dados Relacional é um conceito abstrato que define maneiras de armazenar, manipular e recuperar dados estruturados unicamente na forma de tabelas, construindo um banco de dados.
O termo também é aplicável aos próprios dados, quando organizados dessa forma, ou a um "Sistemas Gerenciador de Banco de Dados Relacional" (SGBDR), um programa de computador que implementa a abstração.
Índice |
[editar] Histórico
Os Bancos de dados relacionais (BDR) surgiram em meados da década de 1980. Porém, apenas alguns anos mais tarde as empresas passaram a utilizá-los no lugar de arquivos planos (do inglês flat file), bancos de dados hierárquicos e em rede.
[editar] As 12 regras
Em 1985 Codd, criador do modelo relacional, publicou um artigo onde definia 12 regras para que um Sistema Gerenciador de Banco de Dados (SGDB) fosse considerado relacional:
- Regra Fundamental:
- Um SGDB relacional deve gerenciar seus dados usando apenas suas capacidades relacionais
- Regra da informação:
- Toda informação deve ser representada de uma única forma, como dados em uma tabela
- Regra da garantia de acesso:
- Todo dado (valor atômico) pode ser acessado logicamente (e unicamente) usando o nome da tabela, o valor da chave primária da linha e o nome da coluna.
- Tratamento sistemático de valores nulos:
- Os valores nulos (diferente do zero, da string vazia, da string de caracteres em brancos e outros valores não nulos) existem para representar dados não existentes de forma sistemática e independente do tipo de dado.
- Catálogo dinâmico on-line baseado no modelo relacional:
- A descrição do banco de dados é representada no nível lógico como dados ordinários (isso é, em tabelas), permitindo que usuários autorizados apliquem as mesmas forma de manipular dados aplicada aos dados comuns ao consultá-las.
- Regra da sub-linguagem compreensiva:
- Um sistema relacional pode suportar várias linguagens e formas de uso, porém deve possuir ao menos uma linguagem com sintaxe bem definida e expressa por cadeia de caracteres e com habilidade de apoiar a definição de dados, a definição de visões, a manipulação de dados, as restrições de integrada, a autorização e a fronteira de transações.
- Regra da atualização de visões:
- Toda visão que for teoricamente atualizável será também atualizável pelo sistema.
- Inserção, atualização e eliminação de alto nível:
- A capacidade de manipular a relação base ou relações derivadas como um operador único não se aplica apenas a recuperação de dados, mas também a inserção, alteração e eliminação de dados.
- Independência dos dados físicos:
- Programas de aplicação ou atividades de terminal permanecem logicamente inalteradas quaisquer que sejam as modificações na representação de armazenagem ou métodos de acesso internos.
- Independência lógica de dados
- Programas de aplicação ou atividades de terminal permanecem logicamente inalteradas quaisquer que sejam as mudanças de informação que permitam teoricamente a não alteração das tabelas base.
- Independência de integridade:
- As relações de integridade específicas de um banco de dados relacional específica devem ser definidas em uma sub-linguagem de dados e armazenadas no catálogo (e não em programas).
- Independência de distribuição:
- A linguagem de manipulação de dados deve possibilitar que as aplicações permaneçam inalteradas estejam os dados centralizados ou distribuídos fisicamente.
- Regra da Não-subversão:
- Se o sistema relacional possui uma linguagem de baixo nível (um registro por vez), não deve ser possível subverter ou ignorar as regras de integridade e restrições definidas no alto nível (muitos registros por vez).
[editar] Porque usar um Banco de Dados Relacional?
Os Bancos de Dados Relacionais foram desenvolvidos para prover acesso facilitado aos dados, possibilitando que os usuários utilizassem uma grande variedade de abordagens no tratamento das informações. Pois, enquanto em um banco de dados hierárquico os usuários precisam definir as questões de negócios de maneira específica, iniciando pela raiz do mesmo, nos Bancos de Dados Relacionais os usuários podem fazer perguntas relacionadas aos negócios através de vários pontos.
A linguagem padrão dos Bancos de Dados Relacionais é a Structured Query Language, ou simplesmente SQL, como é mais conhecida.
[editar] O Modelo Relacional
Um Banco de Dados Relacional segue o Modelo Relacional.
A arquitetura de um banco de dados relacional pode ser descrita de maneira informal ou formal. Na descrição informal estamos preocupados com aspectos práticos da utilização e usamos os termos tabela, linha e coluna. Na descrição formal estamos preocupados com a semântica formal do modelo e usamos termos como relação(tabela), tupla(linha) e atributo(coluna).
[editar] Tabelas (ou relações, ou entidades)
Todos os dados de um banco de dados relacional (BDR) são armazenados em tabelas. Uma tabela é uma simples estrutura de linhas e colunas. Em uma tabela, cada linha contém um mesmo conjunto de colunas, e estas linhas devem seguir a ordem que foi especificada pelo projetista do BDR. Em um banco de dados podem existir uma ou centenas de tabelas, sendo que o limite pode ser imposto tanto pela ferramenta de software utilizada, quanto pelos recursos de hardware disponíveis no equipamento.
As tabelas associam-se entre si através de regras de relacionamentos, estas regras consistem em associar um atributo de uma tabela com um conjunto de registros de outra tabela.
- Exemplo: A tabela funcionário relaciona-se com a tabela cargo. Através deste relacionamento esta última tabela fornece a lista de cargos para a tabela funcionário.
[editar] Registros (ou tuplas)
Cada linha formada por uma lista ordenada de colunas representa um registro, ou tupla. Os registros não precisam conter informações em todas as colunas, podendo assumir valores nulos quando assim se fizer necessário.
Resumidamente, um registro é uma instância de uma tabela, ou entidade.
- Exemplo: O empregado Pedro é uma instância (registro) da tabela funcionário, e a função Analista Comercial é a instância (registro) da tabela cargo. Uma associação entre estas duas tabelas criaria a seguinte instância de relacionamento: Pedro é Analista Comercial, onde o verbo é representa uma ligação entre os registros distintos.
[editar] Colunas (ou atributos)
As colunas de uma tabela são também chamadas de Atributos. Ao conjunto de valores que um atributo pode assumir chamamos de domínio, por exemplo: em um campo do tipo numérico, serão somente armazenados números.
O conceito mais similar a domínio é o de Tipo Abstrato de Dados em linguagens de programação.
[editar] Chave
As tabelas relacionam-se umas as outras através de chaves. Uma chave é um conjunto de um ou mais atributos que determinam a unicidade de cada registro.
Por exemplo, se um banco de dados tem como chaves Código do Produto e ID Sistema, sempre que acontecer uma inserção de dados o sistema de gerenciamento de banco de dados irá fazer uma consulta para identificar se o registro já não se encontraria gravado na tabela. Neste caso, um novo registro não será criado, resultando esta operação apenas da alteração do registro existente.
A unicidade dos registros, determinada por sua chave, também é fundamental para a criação dos índices.
Temos dois tipos de chaves:
- Chave primária: (PK - Primary Key) é a chave que identifica cada registro dando-lhe unicidade. A chave primária nunca se repetirá.
- Chave Estrangeira: (FK - Foreign Key) é a chave formada através de um relacionamento com a chave primária de outra tabela. Define um relacionamento entre as tabelas e pode ocorrer repetidas vezes. Caso a chave primária seja composta na origem, a chave estrangeira também o será.
[editar] Características Adicionais ao Modelo Relacional
[editar] Índices
Um índice não é uma característica do Modelo Relacional, mas sim uma estratégia de otimização de consulta para implementações desse modelo. Isso acontece porque o Modelo Relacional é um modelo teórico, porém quando transformado em uma implementação as suas operações (tanto da álgebra quanto do cálculo) exigem um tempo de busca. Se os dados estiverem ordenados de uma forma ideal, esse tempo de busca pode ser bastante reduzido.
Os índices funcionam então como catálogos organizados de forma a beneficiar certo tipo de consulta. É possível imaginar que uma tabela seria associada a quantidade máxima de índices, porém isso traria muitos gasto de inserção e alteração. Por isso, em uma implantação de um banco de dados, são escolhidos os indíces mais adequados. Normalmente a chave primária é um índice.
O limitador é imposto exclusivamente pela ferramenta de software utilizada. Sendo assim, para a recuperação dos dados é necessário a existência de mecanismos que facilitem a consulta, proporcionando uma perfomance aceitável para a mesma. Para isso, os sistemas de bancos de dados relacionais criam índices das tabelas, sendo que esses índices são atualizados constantemente.
Caso o índice se corrompa por algum motivo, é possível que pesquisas possam retornar resultados não desejados ou que inserções de chaves duplicadas aconteçam. Nesse caso o banco de dados será corrompido também. Os sistemas de bancos (bases) de dados possuem mecanismos de evitar que esses eventos ocorram como também possibilitam a recuperação dos índices e consistência da tabela caso eles ocorram.
[editar] Tipos de Índices
De acordo com as necessidades de busca, os tipos de índices ideais variam. Alguns bancos implementam um tipo, outros vários.
Um indice em árvore (e existem vários tipos de árvore) ordena os dados e permite buscas razoavelmente rápidas para elementos específicos e busca bastante rápidas para intervalos. O índice em árvore é geralmente baseado na idéia da Árvore Binária, porém adaptada para atender as características de usar Memória de . O tipo mais comum é a Árvore B.
Um índice em hash organiza os dados codificando-os e mapeando-os em posições de array. São uma forma extremamente rápida de encontrar elementos específicos, mas praticamente inúteis para responder um intervalo de valores.
Um índice binário é indicado quando o campo indexado tem um pequeno número de valores que indicam a categoria da tupla, por exemplo o campo sexo (M,F), que é constantemente usada em consultas. Nesse caso, é criada uma lista dos elementos de cada tipo.
Outros tipos de índices são: R-Tree, GiST, etc.
[editar] Relacionamentos
Com o advento do Modelo de Entidades e Relacionamentos foi causada uma confusão entre os termos relação e relacionamento
O Modelo Relacional, quando descrito de forma matemática, é definido como um modelo formado por relações (no sentido matemático) entre os domínios. Cada tupla é um elemento do conjunto relação.
Ou seja, a relação é a tabela.
Um relacionamento do Modelo de Entidades e Relacionamentos é uma associação entre entidades distintas. Não há relação direta entre o nome relacionamento e o nome relação.
Porém, um relacionamento, do Modelo de Entidades e Relacionamentos é traduzido para a criação de atributos com chaves externas do Modelo Relacional. Esta tradução é feita ligando-se um campo de uma tabela X com um campo de uma tabela Y, por meio da inclusão do campo chave da tabela Y como um campo (conhecido como chave estrangeira) da tabela X.
Por meio das chaves estrangeiras, é possível implementar restrições nos SGDBR.
Existem alguns tipos de relacionamentos possíveis no MER:
Os relacionamento 1 para 1 e 1 para N podem ser mapeados diretamente em chaves estrangeiras nas tabelas originais. Já o relacionamento N para N exige o uso de uma tabela auxiliar.
Veja também Modelo de Entidades e Relacionamentos.
[editar] Modelagem
[editar] Normalização
Os bancos de dados relacionais utilizam a normalização de dados para evitar redundâncias e possibilitar um maior desempenho nas pesquisas.
- Normalização
É o processo de organização eficiente dos dados dentro de um banco de dados cujos objetivos principais são:
- Eliminar dados redundantes (por exemplo, armazenando os mesmos dados em mais de uma tabela).
- Garantir que as dependências entre os dados façam sentido (armazenando apenas dados logicamente relacionados em uma tabela).
Existem cinco estágios de normalização, 1º, o 2º, o 3º, o 4º e o 5º. Para um banco de dados se encontrar em cada um desses estágios ou formas (denominadas formas normais), cada uma de suas tabelas deve atender a alguns pré-requisitos. Os pré-requisitos são cumulativos, isto é, para alcançar a 3ª forma normal (3NF), um banco de dados precisa atender aos pré-requisitos das 1ª e 2ª formas normais.
[editar] Dependência Funcional
[editar] Primeira Forma Normal (FN1)
Uma relação esta na primeira forma normal se os valores de seus atributos são atômicos (simples, indivisíveis). Em outras palavras, 1FN não permite “relações dentro de relações” ou “relações como atributos de tuplas”.
[editar] Segunda Forma Normal (FN2)
A FN2 exige que todo atributo da tabela seja dependente funcional da chave completa e não de parte da chave.
Uma tabela com uma chave formada por apenas um atributo está automaticamente na FN2.
[editar] Terceira Forma Normal (FN3)
A FN3 exige que não existam atributos transitivamente dependentes da chave. Ou seja, todo atributo que reside na tabela, deve ser determinado pela PK e não somente por parte dela quando esta for composta. Ex: R(ABCD)
AB -> C AB -> D é o mesmo que: AC -> B BD -> A
[editar] Exemplos de Sistemas Gerenciadores de Bancos de Dados Relacionais
- DB2
- Ingres
- InterBase
- MySQL
- Oracle
- PostgreSQL
- Progress
- Microsoft SQL Server
- Microsoft SQL Server Express Edition
- SQLite
- Sybase
- Informix
- Firebird