Modelagem de Dados 1 - MD1 Aula 2 Apresentar o SGBD Interbase, criação de banco de dados (CREATE DATABASE), criação e remoção de tabelas (CREATE TABLE / DROP TABLE), tipos de dados, alteração da estrutura das tabelas (ALTER TABLE) e criação de índices (CREATE INDEX). O Interbase O Interbase é um gerenciador de banco de dados relacional similar aos melhores do mercado, podendo ser utilizado em aplicações mono ou multiusuários, desktop ou em rede, sem limite de números de usuários. O acesso aos dados pelos programas aplicativos ocorre através do servidor Interbase que gerencia o acesso, tornando este produto capaz de: O Interbase Garantir um alto nível de segurança e integridade de dados. Possibilitar o armazenamento e recuperação de grande volume de dados. Possuir recursos nativos de criação e recuperação de cópias de segurança (backup/restore). Possibilitar um melhor balanceamento e distribuição de cargas de trabalho entre o servidor e as estações de trabalho, otimizando o aproveitamento do processador. Possibilitar a redução do volume de trafego pela rede, aumentando a performance dos sistemas em geral. E que caracteriza os sistemas comumente conhecidos como do tipo cliente/servidor, que serão o objeto desta nossa obra. O Interbase Console O Interbase Console (Ibconsole) é uma ferramenta com interface gráfica integrada para administração de banco de dados (a qual acompanha o Interbase), englobando funções de criação/manutenção de bancos de dados, geração e execução de instruções SQL e testes de comunicação entre cliente e servidor. É a partir do uso do Ibconsole que o analista/programador pode criar seus bancos de dados, suas tabelas, etc. Como ele é possível: Administrar a segurança dos bancos de dados. Criar e modificar bancos de dados e tabelas. Efetuar operações de Back-up e Restore de bancos de dados. Efetuar manutenção de banco de dados. Ativar e desativar (dar shutdown) do servidor Interbase. Criar e executar instruções SQL. O Interbase Console O Interbase pode ser instalado em um servidor de rede, formando uma arquitetura de duas camadas, assim como em múltiplos servidores formando uma arquitetura multicamadas, ou então diretamente em um desktop em uma arquitetura de camada única. Este guia utiliza o Ibconsole como uma ferramenta desktop. Criação de Banco de Dados Para criar um banco de dados, deve-se conectar (login) ao servidor Interbase, o que é realizado fornecendo o nome do usuário (username) e sua senha (password). A partir da tela do menu principal do Ibconsole, dê um duploclique sobre o ícone local server (remote server) e aparecerá uma caixa de diálogo solicitando o nome do usuário principal (o administrador do sistema). Esse usuário tem o nome de SYSDBA (grave este nome) e a sua senha é masterkey (em minúsculo). Criação de Banco de Dados O usuário recém-chegado ao ambiente Cliente/Servidor está agora sendo colocado na posição de uma figura até então desconhecida, ou melhor, inexistente no ambiente de programação de processamento de arquivos. Essa figura é a do administrador do SGBD-R, que é o responsável por todos os aspectos fundamentais no tocante a: Segurança de acesso às bases de dados (via concessão de acesso a usuários). Implementação das estruturas das bases de dados (via criação/ manutenção, etc.) . Segurança física das bases de dados (via implementação de backups/restore) . Como administrador do SGBD-R, o leitor deve se lembrar de que o ibconsole é a chave de seu reino, por isso é importante que se guardem em segredo o código de acesso e a sua senha, pois é por intermédio deles que suas bases de dados serão administradas. Criação de Banco de Dados A segurança de tudo que for criado depende do acesso seletivo, delegado futuramente pelo administrador aos usuários de seus sistemas. Tendo em vista que no futuro a criação de muitos objetos no Interbase deve ser feita por você (entenda por objetos, entidades como tabelas, campos, procedimentos, etc.), vamos relacionar as principais regras para a criação deles, evitando assim erros e conflitos de sintaxe: Os nomes dos objetos criados devem sempre começar por um caractere alfabético, tipo A..Z ou a..z ). Os nomes em geral estão limitados a 31 caracteres; nomes de eventos podem ter no máximo 15 caracteres e nomes de restrições devem se limitar a 27 caracteres . Podem ser usados os caracteres alfabéticos, os símbolos cifrão ($) e sublinhado(_). Criação de Banco de Dados Finalmente para criar o seu banco de dados, clique no menu Database do ibconsole, e clique na opção Create Database, abrirá uma janela onde você deverá indicar o alias <nome do banco de dados>.gbd e o nome do filename (arquivo). Não se esqueça que este arquivo não é uma tabela, mas um banco de dados com objetos pré-definidos, domains, tables, views, store procedures, external functions, generators, exceptions, blob filters, roles. A criação de banco de dados em SQL normalmente utiliza o comando CREATE DATABASE, seguido do nome do banco de dados. Sintaxe: CREATE DATABASE <nome do banco de dados> A remoção de banco de dados em SQL faz-se normalmente com a utilização do comando DROP DATABASE, seguido do nome do banco de dados. Sintaxe: DROP DATABASE <nome do banco de dados> Criação de Tabelas Para criar uma tabela devemos clicar no ícone Interactive SQL e escrever o código SQL correspondente para criação de tabela. A criação de tabelas em SQL se faz com a utilização do comando CREATE TABLE, seguido do nome da tabela, bem como de outros parâmetros para a determinação de sua estrutura. Sintaxe: CREATE TABLE <nome da tabela> (< nome do campo> <tipo> [null/not null] [default<valor>] [auto_increment] [unique] [primary key]); nome da tabela - nome da tabela a ser criada nome do campo - nome do campo a ser criado tipo - tipos de dados unique – não permite valores repetidos. Criação de Tabelas null/not null - define se um campo aceita ou não valores nulos default - permite determinar um valor padrão para o campo auto_increment – determina se o campo será prenchido automaticamente, sendo válido apenas para campos que aceitem valores inteiros primary key – determina que o campo é a chave primária da tabela Exemplo: CREATE TABLE Clientes ( nome char(50), endereço char(40), bairro char(20), cidade char(20), uf char(2), código_cliente integer not null primary key ); Tipos de Dados As tabelas Interbase podem armazenar os seguintes tipos de dados (ou seja, a característica de cada coluna pode ser do tipo): O tipo numérico pode ser utilizado no tratamento de valores numéricos inteiros ou reais. Estão disponíveis os seguintes tipos: smallint[(tamanho)] – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de valores inteiros curtos entre a faixa de valores de –32.768 ate 32.767, valores com 16 bits. O parâmetro tamanho é opcional e permite estabelecer o tamanho máximo a ser exibido; integer[(tamanho)] – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de valores inteiros longos entre a faixa de valores de – 2.147.483.648 até 2.147.483.647, valores com 32 bits. O parâmetro tamanho é opcional e permite estabelecer o tamanho máximo a ser exibido; float – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de valores com ponto flutante com sete dígitos de precisão decimais. Este tipo permite trabalhar com valores na faixa de 3,4*10 –38 até 3,4*10 38; Tipos de Dados decimal[(tamanho [, decimal])] – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de valores com ponto flutuante. O parâmetro tamanho é opcional e permite estabelecer o tamanho máximo do valor a ser exibido. Se omitido, o tamanho assumido é 10. O parâmetro opcional decimal permite estabelecer o tamanho máximo de casas decimais a ser exibido, podendo ser um valor máximo 30. numeric[(tamanho, decimal)] – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de valores com ponto flutuante, sendo semelhante ao tipo decimal. double precision[(tamanho, decimal)] – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de valores com ponto de dupla precisão. O parâmetro tamanho deve estar entre 25 e 53 para estabelecer o tamanho máximo. O parâmetro opcional decimal permite estabelecer o tamanho máximo de casas decimais a ser exibido, podendo ser um valor máximo de 30. Tipos de Dados O tipo temporal pode ser utilizado no tratamento de valores relacionados à data e horário. Estão disponíveis os seguintes tipos: date – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de uma data de calendário. Armazena datas utilizando 32 bits. O intervalo de armazenamento é de 1º de janeiro de 100 até 29 de fevereiro de 32768, ou seja, de 01/01/100 a 29/02/32768 time – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de uma informação relacionada a um determinado horário na faixa de 00:00 AM até 23:59:9999 PM. Utiliza 32 bits para armazenar valores de tempo. timestamp – utiliza-se este tipo de dado quando houver a necessidade de armazenar em uma única coluna informações referentes à data e hora. Armazena data e hora utilizando 64 bits. O intervalo de armazenamento é de 1º de janeiro de 100 até 29 de fevereiro de 32768, ou seja, de 01/01/100 a 29/02/32768 . Tipos de Dados O tipo literal pode ser para a recepção de valores baseados em cadeias de caracteres (strings – dados alfanuméricos delimitados por aspas ou apóstrofos). Estão disponíveis os seguintes tipos: char(tamanho) ou character(tamanho) – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de sequências de caracteres no valor máximo de “tamanho” (tamanho varia de 1 ao máximo de 32767). O parametro tamanho determina o valor máximo em caracteres que pode conter a sequência. As colunas tem tamanho fixo em função do valor de “tamanho”. varchar(tamanho) ou char varying (tamanho) ou character varying (tamanho) - utiliza-se este tipo de dado quando houver a necessidade de fazer uso de sequências de caracteres no valor máximo de “tamanho” (tamanho varia de 1 ao máximo de 32767). A diferença entre varchar e o char é que neste caso, os espaços em branco excedentes do lado direito da sequência de caracteres não utilizados são automaticamente desprezados. O parâmetro tamanho determina o valor máximo em caracteres que pode conter a sequência. Tipos de Dados O tipo BLOB (Binary Large Object) possui tamanho variável e permite armazenar grandes quantidades de dados, como, por exemplo, gráficos, textos e sons digitalizados. Os dados são armazenados em segmentos de no máximo 64K. Ao definir um campo BLOB pode-se especificar o seu subtipo, que irá determinar o tipo de conteúdo a ser armazenado. Os subtipos mais usados são o 0 (conteúdo binário) e 1 (texto). Remoção de Tabelas A remoção de tabelas em SQL faz-se normalmente com a utilização do comando DROP TABLE, seguido do nome da tabela. Sintaxe: DROP TABLE <nome da tabela > Alteração da Estrutura das Tabelas A estrutura de uma tabela é algo que pode ser modificado com o tempo, devido a alguma necessidade específica. Existe uma grande possibilidade de precisar incluir um determinado campo, retirá-lo ou até mesmo modificar a sua estrutura. Para realizar esta ação, é disponibilizado o comando ALTER TABLE. Sintaxe: ALTER TABLE <nome da tabela> <operação>; <operação> - parâmetro que pode receber um dos seguintes valores: add <nome do campo> <tipo> - utiliza-se este valor quando da necessidade de inserção de um novo campo em uma determinada tabela. drop <nome do campo> - utiliza-se este valor quando da necessidade de remover um campo de uma determinada tabela. add constraint <nome da_restrição> <restrição da tabela> drop constraint <nome da_restrição> Criação de Índices A linguagem SQL fornece a seu usuário a possibilidade de criar índices para suas tabelas. O índice é o recurso que facilita a localização de informações dentro de uma tabela, além de possibilitar a peculiaridade de exibir informações ordenadas: no caso de valores númericos a indexação pode ser crescente ou decrescente, no caso de valores literais a indexação pode ser ascendente ou descendente. Apesar de útil, este recurso precisa ser usado com cuidado,pois o excesso de índices em tabelas de um banco de dados pode ocasionar lentidão, principalmente nas operações de atualização de dados executadas pelo comando UPDATE. Com relação aos campos que estejam definidos como chave primária, não devem ser indexados. O fato de haver a chave primária definida já cria indiretamente uma indexação. Assim sendo, a indexação é útil em situações como: Criação de Índices Um determinado campo não deve conter valores duplicados, além do campo definido como chave primária. Imagine que além do campo de código de um cliente (que está definido como chave primária), o campo que armazena o número do CNPJ não pode conter valores duplicados. Neste caso, para o campo CNPJ pode ser criado um índice. Quando consultas são realizadas com grande frequência sobre um campo que não é o definido como chave primária. Por exemplo, podese consultar o cadastro de clientes pelo seu nome de cliente. Neste caso, justifica a existência de um índice para o campo nome de cliente. Sintaxe: CREATE [unique] INDEX <indice> ON <nome da tabela (nomes dos campos)>; DROP INDEX <índice> { [ON <nome da tabela>]}; índice – nome definido para identificar a indexação da tabela. nomes dos campos – caso haja mais de um campo, eles devem ser separados por vírgula. Inserção de Registros A partir do momento em que uma tabela está criada, ele já pode receber a entrada de dados. Normalmente os programas de gerenciamento de banco de dados possuem recursos apropriados para executar esta ação, no entanto a linguagem de consulta estruturada SQL possui o comando INSERT INTO . Sintaxe: INSERT INTO <nome da tabela (nomes dos campos) > VALUES <(valores)>; Alteração de Registros No processo de manutenção de registros em banco de dados é necessário periodicamente atualizar dados e informações existentes. Para tanto, é necessário utilizar o comando UPDATE. Sintaxe: UPDATE <nome da tabela > SET <nome do campo> = <expressão> [condição]; Remoção de Registros Dentre as várias atividades de manutenção de registro, existe a possibilidade de efetuar a remoção de registros que não sejam mais desejados. Para isoo deve-se utilizar o comando DELETE. Sintaxe: DELETE FROM <nome da tabela > [condição];