118 pág.

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