A maior rede de estudos do Brasil

Grátis
118 pág.
poojava

Pré-visualização | Página 28 de 37

as tuplas são denominadas registros e os atributos, campos.
Um conceito importante em um banco de dados relacional é o conceito de atributo chave, que
permite identificar e diferenciar uma tupla de outra. Através do uso de chaves é possível acelerar o
acesso a elementos (usando índices) e estabelecer relacionamentos entre as múltiplas tabelas de um
sistema de banco de dados relacional.
Essa visão de dados organizados em tabelas oferece um conceito simples e familiar para a estru-
turação dos dados, sendo um dos motivos do sucesso de sistemas relacionais de dados. Certamente,
outros motivos para esse sucesso incluem o forte embasamento matemático por trás dos conceitos uti-
lizados em bancos de dados relacionais e a uniformização na linguagem de manipulação de sistemas
de bancos de dados relacionais através da linguagem SQL.
Sob o ponto de vista matemático, uma relação é o subconjunto do produto cartesiano dos domí-
nios da relação. Sendo um conjunto, é possível realizar operações de conjuntos — tais como união,
interseção e diferença — envolvendo duas relações de mesma estrutura.
No entanto, um dos pontos mais fortes do modelo relacional está nos mecanismos de manipula-
ção estabelecidos pela Álgebra Relacional. Os três principais operadores da álgebra relacional são
seleção, projeção e junção.
A operação de seleção tem como argumento uma relação e uma condição (um predicado) envol-
vendo atributos da relação e/ou valores. O resultado é uma outra relação contemplando apenas as
tuplas para as quais a condição foi verdadeira.
A operação de projeção tem como argumento uma relação e uma lista com um subconjunto dos
atributos da relação. O resultado é outra relação contendo todas as tuplas da relação mas apenas com
os atributos especificados.
Observe que se a lista de atributos não englobar a chave da relação, o resultado dessa operação
poderia gerar tuplas iguais. Sob o ponto de vista estritamente matemático, os elementos duplicados
devem ser eliminados, pois não fazem sentido para um conjunto.
c
�
2001 FEEC/UNICAMP 84
Programação orientada a objetos com Java 5.2. Acesso a bancos de dados
A operação de junção recebe como argumentos duas relações e uma condição (um predicado)
envolvendo atributos das duas relações. O resultado é uma relação com os atributos das duas relações
contendo as tuplas que satisfizeram o predicado especificado. A operação de junção não é uma
operação primitiva, pois pode ser expressa em termos da operação de produto cartesiano e da seleção,
mas é uma das operações mais poderosas da álgebra relacional.
A forma mais usual de junção é aquela na qual a condição de junção é a igualdade entre valores
de dois atributos das relações argumentos. Essa forma é tão usual que recebe o nome de junção
natural. Nesse caso, o atributo comum aparece apenas uma vez na relação resultado, já que ele teria
para todas as tuplas o mesmo valor nas duas colunas.
5.2.2 SQL
SQL é uma linguagem padronizada para a definição e manipulação de bancos de dados relaci-
onais. Tipicamente, um SGBD oferece um interpretador SQL que permite isolar a aplicação dos
detalhes de armazenamento dos dados. Se o projetista da aplicação tiver o cuidado de usar apenas
as construções padronizadas de SQL, ele poderá desenvolver a aplicação sem se preocupar com o
produto SGBD que estará sendo utilizado depois.
As três componentes de SQL são:
1. uma linguagem de definição de dados (DDL) para definir e revisar a estrutura de bancos de
dados relacionais;
2. uma linguagem de controle de dados (DCL) para especificar mecanismos de segurança e inte-
gridade dos dados; e
3. uma linguagem de manipulação de dados (DML) para ler e escrever os dados.
A DDL supre as facilidades para a criação e manipulação de esquemas relacionais. Uma das
necessidades de uma aplicação que irá armazenar seus dados em um sistema de banco de dados
relacional é como criar uma identidade para o conjunto de tabelas de sua aplicação. Esse mecanismo
não é padronizado em SQL, podendo variar de fornecedor a fornecedor de banco de dados. Algumas
possibilidades incluem
CREATE SCHEMA name [AUTHORIZATION {user | group}]
ou
CREATE DATABASE name [On {default | device}]
[Log On device [= size]]
Para criar uma tabela, o comando CREATE TABLE é utilizado:
CREATE TABLE name ( ATTRIBUTE DOMAIN [UNIQUE] [{NULL | NOT NULL}])
Alguns fabricantes adotam, ao invés da forma UNIQUE para indicação de chave da relação, um
comando Primary Key após a criação da tabela para indicar qual atributo formará ou quais atri-
butos comporão a chave primária da relação.
O campo ATTRIBUTE especifica o nome para a aplicação da coluna da tabela, enquanto DOMAIN
especifica o tipo de dado para a coluna. Alguns tipos de dados usuais em SQL são INTEGER,
c
�
2001 FEEC/UNICAMP 85
Programação orientada a objetos com Java 5.2. Acesso a bancos de dados
DECIMAL(p,q) — 7 dos 8 dígitos são casas decimais, FLOAT(p) — 8 é a precisão, CHARACTER(n)
— string de 9 caracteres, BIT(n) — arranjo de 9 valores booleanos, DATE, TIME e TIMESTAMP.
Além desses comandos, ALTER TABLE permite modificar a estrutura de uma tabela existente e
DROP TABLE permite remover uma tabela.
O principal comando da DML de SQL é SELECT. Por exemplo, para obter todos os dados de
uma relação utiliza-se a forma básica:
SELECT * FROM table
Através do mesmo comando, é possível especificar projeções e seleções de uma tabela:
SELECT columns FROM table WHERE condition
A condição pode envolver comparações entre atributos e/ou valores constantes, podendo para
tanto utilizar comparadores tais como igual (=), maior que (>), menor que (<), maior ou igual que
(>=), menor ou igual que (<=), diferente (!= ou <>) e comparadores de strings (LIKE ‘string’, onde
‘string’ pode usar os caracteres ‘_’ e ’%’ para indicar um caráter qualquer os uma seqüência qual-
quer de caracteres, respectivamente). As comparações podem ser combinadas através dos conectivos
lógicos And, Or e Not.
É possível expressar as quatro operações aritméticas (+, -, *, /), tanto para a condição como para
a especificação de recuperação dos dados.
É possível também especificar a ordem desejada de apresentação dos dados, usando para tal a for-
ma SELECT...ORDER BY.... Uma alternativa a esse comando é SELECT...GROUP BY...,
que ordena os dados e não apresenta elementos que tenham o mesmo valor para a cláusula de agru-
pamento.
Uma importante categoria de funções de SQL incluem as funções de agregação, que permitem
computar a média (Avg), a quantidade (Count), o maior ou menor valor (Max ou Min) e o total
(Sum) das expressões especificadas.
Através do mesmo comando Select, é possível especificar consultas envolvendo múltiplas
tabelas, como em
SELECT nome, data FROM Pedidos, Clientes
WHERE Pedidos.NumCliente = Clientes.NumCliente
Nesse caso, a junção das duas tabelas Pedidos e Clientes é realizada tendo como Num-
Cliente como atributo de junção.
É possível especificar consultas internas a uma consulta, como em
SELECT NumProduto From Produtos
WHERE PrecoUnit > (SELECT Avg(PrecoUnit) FROM Produtos)
Para qualificar os resultados de uma subconsulta, podem ser utilizadas as funções All (a con-
dição foi verdadeira para todos os elementos resultantes da subconsulta), Any (verdade para pelo
menos um elemento), Exists (verdade se resultado da consulta tem pelo menos um elemento), In
(verdade se o valor especificado faz parte do resultado), Not Exists (verdade se subconsulta teve
resultado vazio) e Not In (verdade se valor especificado não faz parte do resultado da subconsulta).
SQL oferece ainda mecanismos para inserir elementos em uma tabela,
c
�
2001 FEEC/UNICAMP 86
Programação orientada a objetos com Java 5.2. Acesso a bancos de dados
INSERT INTO table (columns) VALUES (values)
para modificar valores de colunas de um elemento,
UPDATE table SET column = value [, column = value]*
WHERE