BASES DE DADOS (VISÃO GERAL)
O primeiro passo na criação de uma base de dados consiste no seu desenho lógico utilizando ferramentas de análise.
Neste processo, a fase inicial consiste em elaborar um esquema visual (normalmente utiliza-se o modelo entidade-associação) que represente a estrutura a implementar mais tarde como base de dados.
Este é um processo que se desenrola de forma transparente e independente da estrutura de base de dados ou do sistema gestor de base de dados que vier a ser adoptado.
Ora, no problema que nos foi apresentado, existem duas
entidades descritas no enunciado
Carro e Pessoa.
Carro
Pessoa
O passo seguinte consiste em estabelecer uma relação entre as duas entidades para que possamos relacionar os dados de uma com os dados da outra.
Carro
Usado por
Pessoa
A linha que une as duas entidades estabelece a relação entre elas.
Na realidade existem duas relações:
Entre carro e pessoa (usado por); Entre pessoa e carro (usa).
( ( sentido:
sentido: ) )
mas é costume optar por uma delas (pela mais óbvia).
O “pé de galo
Pessoa significa que um carro pode ser usado por mais do que uma pessoa. Como não existe pé de galo no lado da entidade Carro, quer isto dizer que, a cada pessoa, só está associado um carro. ” colocado no lado da entidade
Depois de identificadas as entidades e estabelecidas as respectivas relações, é necessário indicar que atributos vão fazer parte de cada uma delas, isto é, que dados fazem parte da definição da entidade Carro e da entidade Pessoa. e a implementação física da base de dados desse mesmo modelo, é natural que se opte por este modelo para fazer a Existindo uma relação quase directa entre o modelo relacional
FCA - Editora de Informática
17
DESENHO DE BASES DE DADOS RELACIONAIS
Problema: Um código postal pode estar associado a quantas pessoas? Resposta: Várias, logo colocamos o pé-de-galo junto à entidade Pessoa. Tem
Pessoa
Postal
Problema: Um código postal tem que estar associado a alguém? Resposta: Não. Logo, não existe obrigatoriedade no lado da entidade Pessoa. Tem
Pessoa
Postal
Os atributos associados a cada uma das entidades irão ser: Postal(Código, Localidade) Pessoa(Id, Nome, Idade, Salário, Telefone, Cod_Postal)
Como existe uma relação do tipo 1:N entre as entidades Postal e Pessoa, a entidade do como atributo (chave estrangeira) a chave da entidade do lado 1 (Postal), para que a relação possa ser estabelecida. Assim, a relação entre as entidades é
lado N (Pessoa), recebe
estabelecida entre os atributos Código e Cod_Postal.
Vejamos agora as tabelas respectivas com alguns dados já carregados. ID
Nome
Idade
Salario
Telefone
Cod_Postal
42
António Dias
43
74000
789654
1500
5
Célia Morais
26
170000
123456
1100
32
Florinda Simões
35
147000
4000
37
Isabel Espada
28
86000
1100
49
José António
17
210000
14
Nascimento Augusto
35
220000
25
Paulo Viegas
32
95000
1500 456123
2300 1500
Exemplo de dados da tabela “Pessoa”
FCA - Editora de Informática
115
SQL – STRUCTURED QUERY LANGUAGE
6.2 Ordenação por uma Coluna
A ordenação por coluna faz-se especificando, na cláusula ORDER BY, qual a coluna pela
qual se pretende ordenar.
Problema: Seleccionar todas as pessoas, ordenando o resultado pela Idade.
SELECT * FROM Pessoa ORDER BY Idade +----+-------------------+-------+-----------+----------+------------+ | Id | Nome | Idade | Salario | Telefone | Cod_Postal | +----+-------------------+-------+-----------+----------+------------+ | 49 | José António | 17 | 210000.00 | NULL | 1500 | | 5 | Célia Morais | 26 | 170000.00 | 123456 | 1100 | | 37 | Isabel Espada | 28 | 86000.00 | NULL | 1100 | | 25 | Paulo Viegas | 32 | 95000.00 | NULL | 1500 | | 32 | Florinda Simões | 35 | 147000.00 | NULL | 4000 | | 14 | Nascimento Augusto| 35 | 220000.00 | 456123 | 2300 | | 42 | António Dias | 43 | 74000.00 | 789654 | 1500 | +----+-------------------+-------+-----------+----------+------------+
Nota
Por defeito a ordenação é Ascendente.
Assim, o comando anterior é equivalente a:
SELECT * FROM Pessoa ORDER BY Idade ASC
Problema: Seleccionar o Nome e o Salário de todas as Pessoas, ordenando o resultado pelo Salário, de tal forma que os maiores ordenados fiquem no topo da lista. Resolução: Teremos que fazer uma selecção ordenada de registos em que a ordenação tem que ser feita descendentemente (DESC) de maneira que os maiores salários apareçam no topo da lista.
176
FCA - Editora de Informática
CRIAÇÃO E MANUTENÇÃO DE TABELAS
12.5.3.3 Constraint UNIQUE A Constraint UNIQUE permite indicar que os valores dessa coluna não se podem repetir. Para garantir que não existem dados repetidos nessa coluna, os SGBDR criam, sobre cada uma das colunas UNIQUE, um índice único (a ver no próximo capítulo).
Numa tabela podem existir tantas colunas UNIQUE quantas forem necessárias.
CREATE TABLE Teste( Id Nome Telefone BI
INTEGER CHAR(60) CHAR(15), INTEGER
PRIMARY KEY, UNIQUE, UNIQUE)
O comando anterior poderia ser escrito da seguinte forma:
CREATE TABLE Teste( Id INTEGER PRIMARY KEY, Nome CHAR(60), Telefone CHAR(15), BI INTEGER, UNIQUE(Nome), UNIQUE(BI) )
Nota
Nem todos os sistemas implementam a característica UNIQUE da mesma
forma. Embora nenhum deles admita repetição de valores, a forma como os nulos são tratados pode ser diferente de sistema para sistema. Por exemplo, em Oracle é possível adicionar valores NULL repetidos numa coluna UNIQUE,
enquanto o MySQL e o SQL AnyWhere não aceita o valor NULL em campos UNIQUE.
Se necessário, é possível a especificação da Constraint UNIQUE relativa a duas ou mais colunas seguindo a forma apresentada. No exemplo seguinte, garante-se que não existem na tabela duas pessoas com o mesmo nome e apelido.
CREATE TABLE Teste( Id INTEGER PRIMARY KEY, Nome CHAR(50), Apelido CHAR(10), Telefone CHAR(15), BI INTEGER, UNIQUE(Nome,Apelido), UNIQUE(BI) )
FCA - Editora de Informática
275
SQL E VISUAL BASIC
Fig. 17.13 - Ecrã de Gestão de Códigos Postais
No início do Form procede-se à declaração de um DataAdapter que irá fazer a ligação
física aos dados e de um DataSet que os irá suportar em termos aplicacionais.
Dim DA As New OleDbDataAdapter("SELECT * FROM Postal ", Conn) Dim DsPostal As New DataSet
No evento Load do form começamos por declarar um objecto do tipo CommandBuilder de modo a preencher os comandos INSERT, UPDATE e DELETE do DataAdapter. Private Sub fPostal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim cmd As New OleDbCommandBuilder(DA)
Depois procedemos ao preenchimento do DataSet e à associação da grelha ao DataSet. Try DsPostal.Clear() DA.Fill(DsPostal) DataGrid.DataMember = "Postal" DataGrid.DataSource = DsPostal.Tables(0) DataGrid.Refresh() Catch ex As Exception MsgBox(ex.Message) End Try End Sub
FCA - Editora de Informática
389