Você está na página 1de 9

415

Aula 01

TÓPICOS DE BANCO
DE DADOS

1. ESTABELECENDO DOMÍNIUS (DOMAINS)

Um banco de dados relacional armazena dados em forma de tabelas, que são


estruturas que possuem linha e colunas. As colunas são os atributos que definem os objetos
que são chamados de entidades (tabelas). Quando você define uma tabela (entidade), você
pode especificar o valor de cada coluna (campo) individualmente, ou seja, o tipo de dados,
tamanho, character set, nulo ou não. Mas você pode informar que esta coluna (campo) pode
ser definida por um domínio previamente criado com todas as informações necessárias.
Os domínius são usualmente definidos antes da criação das tabelas, para que você
possa utilizá-los na definição das tabelas.
Os dominius são tipos de dados personalizados definidos a partir de um tipo de dados
11
416

já existente. Uma vez que a coluna (campo) já esteja definida com um domínio qualquer
alteração no domínio se reflete na coluna especificada com este tipo.

1.1. Trabalhando com os DOMÍNIOS


Para se criar um novo domínio:
Sintaxe: CREATE DOMAIN ‘nome do domínio’ AS datatype

Para excluir um domínio:


Sintaxe: DROP DOMAIN ‘nome do domínio’

Para alterar um domínio:


Sintaxe: ALTER DOMAIN ‘nome do domínio’

Quando utilizamos diretamente o IBExpert basta somente utilizar as teclas de atalho


ou seus comando embutidos para alterar e excluir um domínio.
Vamos ver um exemplo prático em nosso Banco de Dados Vendas_BD:

Foram criados cinco domínius.


CREATE DOMAIN VARCHPOS60 AS VARCHAR(60);
CREATE DOMAIN VARCHPO50 AS VARCHAR(50);
CREATE DOMAIN CHARPOS20 AS CHAR(20);
CREATE DOMAIN NUMVALOR AS NUMERIC(10,2);
CREATE DOMAIN DOMENDERECO AS VARCHAR(60);

Quando definimos o Diagrama de Relacionamento físico do nosso Banco de Dados,


verificamos que algumas colunas (campos) possuem o mesmo tipo de dados e tamanhos.
Logo quando damos início à definição de nossa entidade (tabela), temos que ficar definindo o
tipo de dado e tamanho de todas as colunas (campos). Se estabelecermos um domínio padrão
onde ele já possua o tipo de dados e tamanhos, isto facilita nossa inclusão da coluna (campo),
bem como depois ajuda na sua manutenção.
Veja no exemplo abaixo, se em um determinado momento formos alterar o valor
12
417

do campo endereço de 60 para 80 caracteres, e este campo estiver em várias tabelas, basta
somente alterar o tamanho do DOMÍNIO DOMENDERECO de VARCHAR(60) para
VARCHAR(80), e todos os domínios serão alterados automaticamente para 80 caracteres em
seu tamanho.

Com isto facilitamos a manutenção em nosso banco de dados e iremos também


padronizar as colunas (campos), o que também melhora o desempenho do banco de dados.

1.1.1 O parâmetro DEFAULT


O parâmetro DEFAULT especifica um valor “padrão” para ser usado se nenhum
valor for aplicado. O valor “padrão” somente é aplicado quando o registro é inserido pela
primeira vez no banco de dados, se você depois remover o valor original, o DEFAULT não
será utilizado.
Sintaxe:
CREATE DOMAIN ‘nome do domínio’ AS datatype DEFAULT [default value ,
Null]

DEFAULT geralmente é utilizado nas seguintes situações:


• Para colunas (campos) caracteres, você pode precisar indicar um valor Default
explicitamente, ou use NULL, para especificar um valor nulo.
• Para colunas (campos) numéricas, você pode precisar indicar um valor default
explicitamente, ou use NULL, para especificar um valor nulo.
• Para colunas (campos) data, você pode precisar indicar um valor default
explicitamente, ou utilizar uma das seguintes palavras reservadas: YESTERDAY,
TODAY , NOW, TOMORROW (neste caso quando for definido não esquecer de
colocar entre aspas - ‘now‘), ou NULL.

Vamos a um exemplo: CREATE DOMAIN CHARUF AS CHAR(2) DEFAULT


‘MS’;

13
418
Banco de Dados II - Adriano Câmara - UNIGRAN

Definimos uma tabela CIDADE em nosso banco de dados, onde a UF utiliza o


domínio criado:

Neste caso quando formos inserir um dado nesta tabela, entramos com o CODCID
o NOMECID, não precisamos colocar a UF, pois ele está definido como DEFAULT “MS”,
neste caso o próprio BD irá preencher o valor.

1.1.2 A restrição CHECK


É importante, em determinados casos, assegurar uma integridade de domínio,
garantindo assim que apenas entradas de tipos, valores ou intervalos de valores possam existir
para uma determinada coluna (campo). O CHECK testa o valor inserido dentro da coluna
(campo) definido pelo domínio para verificar se este valor satisfaz as condições da expressão.
Somente uma restrição CHECK pode ser utilizada por um domínio. Quando você define uma
coluna (campo) diretamente na tabela, a restrição CHECK possui opções adicionais.
Sintaxe:

CREATE DOMAIN ‘nome do domínio’ AS datatype DEFAULT [default value ,


Null]
CHECK [ VALUE expressão]
Onde a expressão pode ser utilizada um dos seguintes comandos:

Expressão Descrição
= value Igual a
< value Menor que
> value Maior que
<= value Menor ou igual a
>= value Maior ou igual a
<> value Diferente de
!< value Não menor que
!> value Não maior que
14
419

!= value Não igual a


BETWEEN value AND value Entre a faixa de valores especificada
LIKE value Busca de caracteres ‘%’ para 0 ou mais ‘_’ para 1
IN (value, value,....value) Um dos elementos da lista
IS NULL Verifica se o valor em questão é nulo
IS NOT NULL Verifica se o valor em questão não é nulo
CONTAINIG value Procura uma cadeia de caracteres ‘insensitive’
STARTING WITH value Procura uma cadeia de caractere ‘case-sentitive’

Vamos criar um domínio:


CREATE DOMAIN UNIDADES AS CHAR(2) CHECK (VALUE IN
(‘UN’,’PC’,’CX’) AND (VALUE IS NOT NULL))
Neste caso quando utilizarmos este domínio, na hora de inserir um campo no banco
de dados ele irá checar se os valores inseridos são: UN, PC, CX, como temos a cláusula AND
ele também verificará se o valor não é nulo. Somente se as duas condições forem verdadeiras
ele deixará o usuário inserir um valor na coluna (campo) que faz parte o domínio.

Neste caso vamos inserir um CODPROD, sua DESCRIÇÃO e tentar ir para o


próximo registro, veja a mensagem que aparece.

Ele informou que não pode inserir pois temos uma validação na coluna (campo)
UNIDADE que ele não pode ser NULL.
15
420

O Mesmo acontece quando tendo colocar um valor diferente de: UN, PC, CX

1.1.3 A cláusula Collate


Esta cláusula é utilizada somente para as colunas (campos) que possuírem o tipo
CHAR e VARCHAR, você pode especificar uma seqüência de COLLATE válido para o
caracter set utilizado. O character set é definido como parte da definição do banco de dados ou
com o tipo de dados. Collate é a maneira que o FIREBIRD utiliza para ordenar e/ou comparar
strings no banco de dados. Isso afeta diretamente, por exemplo, a maneira que caracteres
acentuados são tratados durante uma ordenação ou uma comparação entre strings.
Sintaxe: COLLATE collation_sequence

Para utilizar caracteres acentuados e obter uma ordenação correta nos índices, defina
o CHARACTER SET WIN1252 e nos campos onde houver indexação, use COLLATE PXW_
INTL850. Fazendo isto o FIREBIRD utilizará a ordenação correta para o português.
Exemplo:

CREATE DOMAIN NOMECID VARCHAR ( 50) COLLATE PXW_INTL850

2. CHAVES ESTRANGEIRAS (FOREING KEY)

Em um relacionamento de chave estrangeira é importantíssimo por manter a


integridade do banco de dados. Quando criamos os relacionamentos entre PK X FK entre
as duas colunas (campos) das duas tabelas teremos então assegurado a integridade do nosso
banco de dados.
Temos um relacionamento entre as tabelas CLIENTE X CIDADE, onde na tabela
CLIENTE a chave estrangeira (FK) é CODCID e ela está relacionada na tabela CIDADE com
a chave primária (PK) CODCID.
16
421

A integridade deste banco de dados é provada quando um usuário tentar inserir na


tabela CLIENTE uma cidade que não exista na tabela CIDADE, o Firebird automaticamente
retorna um erro de integridade.
Quando definimos a nossa chave estrangeira (FK), existem duas cláusulas opcionais
ON UPDATE e ON DELETE, da restrição FK que especificam o que acontece quando um
valor referencial em uma chave primária (PK) for alterado ou apagado.

Ambas as instruções obedecem as seguintes regras:

CLAUSULAS Quando o valor PK é alterado ou removido


NO ACTION O valor da FK não sofre mudanças
CASCADE O valor da FK muda de acordo com as mudanças feita na PK, ou é removido.
SET DEFAULT O valor da FK recebe o valor definido como DEFAULT daquela coluna
SET NULL O valor da FK recebe NULL

3. ENTENDENDO OS ÍNDICES

Um índice é um mecanismo utilizado para acelerar a recuperação de dados em


resposta a certas condições de pesquisa, e para reforçar as restrições de unicidade em colunas
(campos). Exatamente como você pesquisa o índice de um livro para rapidamente encontrar
as páginas que quer ler, um índice de banco de dados fornece um apontamento lógico para
uma localização física (endereço) de uma linha (registro) em uma tabela. Um índice guarda
cada valor da coluna indexada e ponteiros. Quando uma consulta SQL é submetida, o Firebird
primeiramente checa se existe algum índice para a tabela referenciada, em seguida determina
se é melhor pesquisar a tabela inteira ou utilizar o índice para processar a consulta. No caso
17
422

de decidir pela utilização do índice ele pesquisa no índice para achar a chave solicitada, e
segue os ponteiros para localizar as linhas (registros) que contém os valores solicitados.
Em geral, as pesquisa realizadas sobre índices são extremamente rápidas porque os
valores constantes no índice estão ordenados, além do que, os índices são muito pequenos o
que requer do servidor muito poucas fetches (requisições de dados, retorno da consulta) para
o posicionamento e localização dos dados requeridos na consulta.
Existe uma série de situações que justificam a criação de índices, principalmente
quando se desejam pesquisas (requisições de dados) de forma mais rápida:

• Quando condições de pesquisa frequentemente referenciam colunas (campos) que


podem ser indexados;
• Quando há JOINS sobre colunas (campos) que pode ser indexados;

Temos que tomar cuidado somente para não criar índices quando temos as
seguintes situações:

• Já fazem parte de índices de integridade referencial – Chave Primária (PK) e chaves


Secundárias (FK);
• Raramente farão parte de condições de pesquisa;
• Mantém um domínio de dados muito pequeno, por exemplo, uma coluna (campo)
que mantém o domínio restrito a masculino e feminino.

Temos abaixo a tabela cliente, no qual possui dois índices criados através das chaves
PK e FK, no qual possuem seu nome, coluna (campo) que está sendo indexado, bem como se
possuem valores únicos (Unique), se estão ativos e qual o tipo de ordenação, no caso os dois
estão ASCENDING( ascendente).

Dentro do IBExpert a forma mais rápida de criar um índice e posicionar em INDICES,


e clicar com o botão direto, logo irá aparecer uma nova janela, selecione “ New Index”.
Em seguida coloque o nome do índice, campo, Unique, Active e Sorting.

Sintaxe: CREATE INDEX ‘nome do índice” ON Table_name(column1.....


columnN);
18
423

Exemplo: CREATE INDEX EMAILIDX ON CLIENTE(NOME,EMAIL)

ATIVIDADES
As atividades referentes a esta aula estão disponibilizadas na ferramenta
“Atividades”. Após respondê-las, envie-nas por meio do Portfólio- ferramenta do
ambiente de aprendizagem UNIGRAN Virtual. Em caso de dúvidas, utilize as ferramentas
apropriadas para se comunicar com o professor.

19

Você também pode gostar