artigo SQL Magazine 04 - SQL Server – Primeiros Passos
Veremos neste artigo como construir um banco de dados no SQL Server 2000 através do Enterprise Manager.
Veremos neste artigo como construir um banco de dados no SQL Server 2000 através do Enterprise Manager. Mostraremos em algumas etapas a criação do banco e de seus componentes mais essenciais, como tabelas, índices e relacionamentos. Nosso banco de dados será chamado MiniNegocio, e será composto de duas tabelas: Clientes e Pedidos.
Introdução às ferramentas do SQL Server
O SQL Server é um sistema de gerenciamento de banco de dados cliente/servidor da Microsoft. Das principais ferramentas visuais de administração, destacaremos duas: o Enterprise Manager (Figura 1) e o Query Analyzer (Figura 2):
Enterprise Manager: Funciona como um painel de controle dos objetos, serviços e operações do SQL Server. É dividido em três seções:
- Um painel esquerdo contendo uma árvore que permite a navegação entre os servidores e seus respectivos objetos (bancos de dados, usuários, regras e outros).
- Um painel direito contendo a representação dos itens selecionados na árvore à esquerda.
- Um menu e uma barra de ferramentas contendo atalhos para as principais funcionalidades do gerenciador.
Figura 1. Enterprise Manager
Figura 2. Query Analyzer
Query Analyser: É uma ferramenta gráfica para execução de comandos SQL e Transact-SQL (uma extensão da SQL, contendo rotinas procedurais). O Query Analyzer também fornece alguns serviços, como plano de execução de queries (fornecendo o tempo de CPU, leitura de disco rígido, entre outras informações), XX e YYY.
Consideração sobre Bancos de Dados no SQL Server
Além dos bancos criados pelo administrador, o SQL Server contém quatro bancos de dados de sistema: (master, model, tempdb, msdb), que são criados durante a instalação. Vejamos o papel de cada um:
- master (tamanho inicial: 16 Mb): Contém informações sobre processos em execução, contas de login, bloqueios, entre outros.
- model (tamanho inicial: 2.5Mb): É usado como modelo para criação de novos bancos de dados, permitindo definir padrões como autorizações default de usuário e opções de configuração. Um novo banco de dados recebe o conteúdo de model durante sua criação.
- tempdb (tamanho inicial: 8 Mb): É usado para armazenar tabelas temporárias e resultados intermediários de consultas. Geralmente o seu conteúdo é excluído sempre que um usuário se desconecta.
- msdb (tamanho inicial: 12 Mb): É usado pelo serviço SQLServerAgent, para controlar tarefas como replicação, agendamento de tarefas, backups e alertas.
Existem também tabelas do sistema que são armazenadas no banco de dados master e em cada banco de dados de usuário. Elas contêm informações sobre o SQL Server e sobre cada banco de dados de usuário. Existem 17 tabelas em cada banco de dados que formam o catálogo do banco de dados.e que começam com o prefixo sys.
Um banco pode ser composto de diferentes tipos de arquivos físicos:
- Arquivo primário: Armazena todos os objetos do banco de dados, como tabelas e índices. Cada banco pode ter somente um arquivo primário. Com o intuito de obter performance, o SQL Server permite definir um tamanho limite para o arquivo primário. Pode-se configurar o servidor de forma que, caso esse tamanho seja ultrapassado, arquivos secundários sejam criados.
- Arquivo secundário: Criado caso o arquivo primário ultrapasse o limite definido pelo administrador. Um banco de dados pode conter um ou vários arquivos secundários. O uso de arquivos secundários é opcional.
- Arquivo de log: Registra todas as transações antes de serem escritas nos arquivos primários e secundários. Assim como o banco de dados, é possível distribuir o log em dois ou mais arquivos. O log de transações é muito utilizado na recuperação de dados, em caso de falhas ou interrupções abruptas do servidor.
Os objetos do banco de dados são armazenados em unidades básicas conhecidas como páginas e extents:
- Página (8 Kb): Representa a unidade mais básica de armazenamento. Quando um objeto do banco aumenta de tamanho, seu crescimento é medido em páginas. Há vários tipos de página, cada uma contendo um tipo diferente de dados (dados, texto/imagens, índices e outros).
- Extent (64 Kb): É um grupo de oito páginas.
Para maiores informações a respeito de páginas, confira o artigo “Otimização e Tuninng”, de Paulo Ribeiro, publicado na SQL Magazine 3.
Criando um banco de dados
Para iniciar a construção do banco, o primeiro passo é verificar se o SQL Server está rodando. Para isso, basta verificar o ícone do aplicativo Service Manager, na barra de XXXXX. Se estiver em play, o SQL Server está em execução. Se estiver parado
Nota: Nesse caso, usaremos a máquina local, ou seja, o mesmo computador onde o SQL Server foi instalado. Nada impede que o Enterprise Manager seja utilizado a partir de outra máquina, desde que a mesma esteja conectada com o servidor.
O próximo passo é abrir o Enterprise Manager. No menu de programas, selecione o item Enterprise Manager, dentro da pasta Microsoft SQL Server. A tela principal do aplicativo será exibida.
Expanda o item Microsoft SQL Servers, no painel esquerdo da tela principal. Clique duas vezes sobre o subitem SQL Server Group, para exibir todos os servidores registrados no Enterprise Manager. Como estamos utilizando o aplicativo em modo local, apenas o nome LOCAL será exibido, conforme mostra a Figura 4:
Figura 3. Exibindo servidores registrados
NOTA: O Enterprise Manager pode se conectar a diversos servidores SQL Server. Nesse caso, cada servidor será representado por um respectivo nó abaixo do item SQL Server Group.
Em seguida, expanda o servidor LOCAL. Uma lista contendo os diversos serviços e objetos disponíveis para este servidor será exibida. Para iniciar a construção de um novo banco de dados, clique com o botão inverso do mouse sobre o item Databases e selecione a opção New Database. A janela Database Properties será exibida. Nessa caixa de diálogo, temos três guias:
I) General – Informações primárias do banco de dados. Preenche o formulário de acordo com a lista abaixo:
Name: Define o nome do banco de dados. Digite MiniComercio.
Collation Name: A especificação de Collation Name muda a forma como o SQL Server armazena os caracteres nas tabelas. Deixaremos a opção Server default.
II) Data Files – Configurações principais do banco
Location: Localização do arquivo primário. Por default, é indicado o diretório DATA dentro da pasta do SQL Server, embora outro local pode ser selecionado.
Initial Size: Indica o tamanho inicial, em megabytes, do arquivo primário. O arquivo de dados, mesmo vazio, será criado com o valor indicado nessa caixa. Por exemplo, se for especificado 50, um arquivo .MDF de 50mbs será criado no disco. O motivo é a performance: alocando previamente um espaço determinado, o SQL Server garante que os dados sofrerão menos fragmentação física no disco. Se o banco crescesse conforme a inserção dos dados, a distribuição física das páginas de dados seria aleatória, a mercê do sistema operacional. O valor adequado para este campo dependerá da aplicação que está sendo desenvolvida. Uma boa medida é sempre deixar um bom espaço disponível, para que o sistema rode durante um bom tempo sem a necessidade de alocar novo espaço em disco. É importante notar que o SQL Server possui diversos mecanismos para distribuição de dados em mais de um disco ou em até mesmo mais de um computador, mas esse não é o foco deste artigo.
Ao ser criado, o banco possui um tamanho default de 1 Mb. Como esse valor é insuficiente para armazenar a quantidade de dados prevista, aumentaremos-o para 15 Mb.
Automatic Grow File: Essa opção, quando selecionada, permite o crescimento automático do tamanho do arquivo primário do banco quando este se encontrar cheio. Caso o tamanho seja mantido, nenhuma inclusão será mais possível e a seguinte mensagem de erro aparecerá: “Could not allocate space for object 'tabela' in database 'BANCO' because the 'PRIMARY' filegroup is full”.
A seleção dessa opção habilita duas subopções que determinam como será feito o crescimento:
- File Growth: O aumento pode ser definido em porcentagem do tamanho inicial do arquivo (By percent) ou em um determinado valor em Mb (In megabytes)
- Maximum File Size: O arquivo pode ter um tamanho limite (Restrict File Growth) ou crescer indeterminamente (Unrestricted File Growth).
O banco por default cresce automaticamente de 10% e sem limite. Se ele crescer indefinidamente, poderá ocupar o disco rígido inteiro e travar o sistema operacional. Determinaremos então um tamanho limite de 18 Mb e um crescimento de 1 Mb.
Transaction Logs – Informações sobre o arquivo de log
Essa guia possui as mesmas propriedades da guia Data Files, só que elas se aplicam ao arquivo de log (que aparece com o nome do banco seguido de _log). É indicado armazenar os arquivos de log (assim que os arquivos de backup) em um outro dispositivo de armazenamento para melhorar a perfomance.
O arquivo primário é gravado com a extensão .mdf. Se houver um arquivo secundário, este terá a extensão .ndf. O arquivo de log possui a extensão .ldf.
Terminada a configuração do banco, pressione Ok. Observe como o Enterprise Manager representa o novo banco na Figura 4.
Figura 4. Representação do novo banco
É possível aumentar ou diminuir o tamanho de um banco. Isso se justifica por exemplo devido ao um importante aumento ou declínio das atividades.
Para incrementar um banco, clique o banco com o botão direito do mouse e selecione Properties, o que fará aparecer a janela MiniComercio Properties (Figura 4).
Temos duas opções:
a) Expandir o arquivo primário: Selecione a guia Data Files e digite um novo valor na coluna Space Allocated.
b) Adicionar arquivos secundários. Na guia Data Files, digite os dados do novo arquivo na segunda linha da seção Database files.
Os mesmos procedimentos são feitos na guia Transaction Logs para arquivos de log.
Aperte OK em seguida para confirmar a opção escolhida.
Para diminuir um Banco, de um clique com o botão direito e escolhe Alltasks e em seguida Shrink Database. Aparecerá uma caixa de diálogo que permite reorganizar os arquivos e compacta-los.
Analisaremos os componentes da caixa de dialogo:
- Space allocated: Mostra o espaço alocado para o banco
- Space free: Mostra o espaço livre (em porcentagem e em Mb) no banco
- Maximum free space in files after shrinking: Especifica a porcentagem máxima de espaço livre depois da redução do banco
- Move pages to beginning of file before shrinking: Desloca as páginas para o inicio do arquivo antes da redução do banco. Essa seleção pode frear a perfomance
- Shrink the database based on this schedule: Efetua a redução do banco em um horário determinado
- Change: Modifica o horário da redução do banco
- Files: Permite especificar quais arquivos individuais do banco que serão reduzidos
Escolhe seu modo de redução e clique em Ok.
Para remover um Banco, seleciona o banco, pressiona a tecla Delete (ou clique com o lado direito do mouse e seleciona Delete). Em seguida, confirma as opções e clique no botão OK.
Figura 5. Confirmando configurações
Criação de Tabelas
Vamos iniciar criando a tabela Clientes. No painel esquerdo do Enterprise Manager, selecione o item Tables, dentro do banco MiniComercio, e clique com o botão inverso. No menu flutuante, selecione New Table, para abrir a caixa de diálogo correspondente. Nesta janela podemos criar, visualmente, todos os campos da nova tabela. Observe na lista abaixo o significado de cada item solicitado:
- Column Name – Nome do campo;
- Data Type – Tipo do campo. Um campo pode ser do tipo caracter, numérico, data, monetário ou binário. Veja no quadro “Tipos de Campos” uma descrição completa dos tipos disponíveis no SQL Server 2000.
- Length – Tamanho do campo.
- Allow Nulls – Se marcada, indica que o campo poderá assumir o estado nulo. A palavra nulo, neste contexto, significa ausência total de valor. Por exemplo, um valor 0 (zero) é diferente de um valor nulo, pois 0 representa um número e nulo não significa absolutamente nada.
Começaremos com a tabela de clientes. Preencha a grade conforme a tabela abaixo:
Nome Tipo Tamanho AllowNulls
CódigoCli int 4
Nome char 20
MarcaCarro char 20 X
Em seguida, clique no botão Save e, na janela seguinte, digite Clientes e Pressione Ok. Nossa primeira tabela acaba de ser criada. Antes de fechar o editor de tabelas, vamos definir uma chave primária.
A chave primária dessa tabela será formada pelo campo código. Selecione esse campo, clique com o botão inverso do mouse e clique na opção Set Primary Key. Observe que o ícone de uma chave aparece automaticamente ao lado do campo escolhido (Figura 6).
Figura 6. ícone da chave
NOTA: Para criar uma chave primária composta, basta selecionar os campos correspondentes e repetir a operação.
Feche a janela de criação de tabelas. Observe que o nome da nova tabela é exibida no painel direito do Enterprise Manager, juntamente com as tabelas de sistema. Para criar uma nova tabela, clique novamente com o botão inverso do mouse sobre o item Database, no painel esquerdo, e selecione a opção New Table. Os campos da nova tabela devem ser criados conforme a tabela a seguir:
Nome Tipo Tamanho AllowNulls
CódigoPed int 4
Mercadoria char 30
DataPedido date 8
CodigoCli int 4
Defina o campo CódigoPed como chave primária. A tabela pedidos possuirá também uma chave estrangeira (CodigoCli). Veremos a criação dessa chave mais adiante. Salve a tabela com o nome Pedidos e feche a janela.
Para alterar a estrutura de uma tabela, clique com o botão inverso do mouse sobre o nome da tabela e, no menu flutuante, selecione Design Table. A mesma tela utilizada para criação será exibida, com as definições de campos preenchidas. O SQL Server permite que muitas alterações na estrutura sejam feitas sem a necessidade de reconstruir a tabela, limitação imposta por diversos bancos de dados.
Para excluir uma tabela, clique com o botão inverso do mouse sobre o nome da tabela e, no menu flutuante, selecione a opção Delete.
Nota: Um Banco de Dados no SQL Server 2000 pode conter no máximo dois bilhões de tabelas e cada tabela pode ter no máximo 1024 colunas.
Índices
Existem dois tipos de índices no SQL Server:
- Clustered (agrupado): A ordem física das páginas dos dados segue a mesma ordem dos índices. Pode haver somente um único índice agrupado por tabela, sendo geralmente usado em uma chave primária. Quando modificações são feitas em uma tabela, o índice agrupado ajuda a reorganizar fisicamente as linhas e a reconstruir os outros índices.
- Non-clustered (não-agrupado): É o índice padrão, desvinculado da tabela física.
O SQL Server dispõe de um componente chamado otimizador que analisa as consultas e decide se vale utilizar ou não um índice.
Construção dos índices
No painel esquerdo do Enterprise Manager, selecione o item Tables. Em seguida, selecione a tabela Clientes no painel direito, clique com o botão inverso do mouse e selecione a opção Design Table.
Na lista de campos, clique com o botão inverso do mouse e selecione a opção Indexes/Keys. A caixa de diálogo Properties será exibida (Figura 7). Vejamos a descrição dos principais componentes desta janela:
- Index Name: É o nome do índice. Note que já se encontra o índice Pk_Clientes, nome padrão dado à chave primaria criada anteriormente. Para modificar esse nome, basta reescreve-lo
- Column name: Nome da(s) coluna(s) que faz(em) parte do índice. Observe que, para criar um índice composto, basta selecionar mais de um campo nesta lista.
- Order: Ordenação do campo no índice (ascendente ou descendente)
- Create Unique: Se selecionado, permitirá apenas a presença de apenas um índice ou uma restrição na tabela selecionada. Deve-se escolher entre as sub-opções Constraint (restrição) ou Index (índice). Se Index for escolhido, a opção Ignore duplicate key assegura que o valor em uma coluna indexada será único.
- Create as CLUSTERED: Se selecionado, o indice sera do tipo Cluster.
- FILL FACTOR: Especifica em porcentagem o nível de preenchimento de cada página de um índice. Quando uma pagina de índice se torna cheia, o SQL Server divide a página e libera espaço para novas colunas. Se muitas atualizações são feitas em uma tabela, um valor bem escolhido gerará um melhor desempenho. Um valor default é fornecido caso nenhum for especificado.
- Do not automatically recomputed statistics: - Se selecionado, as estatísticas do índice não serão recalculadas automaticamente em uma atualização desse índice.
- Para iniciar a construção de um índice, clique no botão New. Criaremos um índice com as especificações abaixo:
Index Name: IdNome
Column Name: Nome (o índice será formado apenas por este campo)
Order: Ascending
Create Unique: Não
Fill Factor: 70%
Create as Clustered: Não
Do not recomputed stats: Não.
Figura 7. Propriedades
Criar Relacionamentos
Os relacionamentos no SQL Server são representados através de diagramas. Criaremos um relacionamento entre as tabelas Cliente e Pedidos. Como um cliente pode ter um ou vários pedidos, esse relacionamento será de 1:N e a chave primaria de Clientes será definida com chave estrangeira em Pedidos.
Dentro do banco MiniNegocio, selecione Diagrams, clique com o botão direito e selecione New Database Diagram. Na primeira tela do assistente, clique em Next, pois não há nada a ser configurado. Em seguida, devemos indicar quais tabelas farão parte do relacionamento. Selecione Clientes e clique no botão Add. Repita a operação para a tabela Pedidos e clique em Next. Por último, clique em Finish para fechar o assistente (Figura 8).
No diagrama, selecione a chave estrangeira CodigoCli em Pedidos e arraste ate a tabela Clientes onde se encontra a chave primaria. Aparecerá uma tela contendo as propriedades dos relacionamentos (Figura 9):
Figura 8. Assistente de criação
As opções dessa caixa de diálogo possuem o significado abaixo:
Relationship Name: Nome do relacionamento. O nome default aparece como PK_Clientes_Pedidos.
Primary Key Table: Nome da tabela (Clientes) que possui a chave primaria usada.
Foreign Key Table: Nome da tabela (Pedidos) que possui a chave estrangeira.
As opções seguintes verificam se o relacionamento entre as tabelas Clientes e Pedidos tem toda sua integridade.
Check existing data on creation: Verifica a relação existente em uma chave estrangeira durante a criação de um relacionamento.
Enforce relationship for replication: A integridade é imposta na replicação de uma tabela na qual se encontra uma chave estrangeira em um banco diferente.
Enforce relationship for INSERTs and UPDATEs: A integridade é imposta quando dados são adicionados ou atualizados. Essa opção, quando selecionada, habilita as duas subopções seguintes:
- Cascada Update Related Fields: Permite atualizar em cascata. A atualização de uma chave primária será propagada para as chaves estrangeiras correspondentes.
- Cascade Delete Related Records: Permite excluir em cascata. A exclusão de uma chave primaria excluirá as chaves estrangeiras correspondentes.
Selecionaremos aqui todas as opções.
Figura 9. Relacionamentos
Usando o Query Analyzer
Mostraremos como utilizar o Query Analyzer para criar um banco novo e suas tabelas. Criaremos um banco chamado MiniNegocio com um tamanho de 10 Mb junto com um arquivo de log de 2 Mb. Se o nome do banco criado anteriormente MiniComercio fosse usado novamente, o SQL Server acusaria o erro seguinte “Error 1801: Database ’MiniComercio’ already exists”.
Para entrar no Query Analyzer, selecione no menu a opção Tools e clique em SQL Server Query Analyzer.
Aparecera a janela do Query Analyzer contendo uma tela vazia onde serão inseridos os comandos T-SQL.
Digite o seguinte comando para criar o banco:
CREATE DATABASE MiniNegocio
ON PRIMARY
(name = MiniNegocio1,
filename=‘c:\Arquivos de Programas\Microsoft SQL Server\data\MiniNegocio1.mdf’,
size = 10 MB,
maxsize = 15 MB,
filegrowth = 1 MB)
LOG ON
(name = MiniNegocioLog,
filename =’c:\ arquivos de programas\Microsoft SQL Server\data\MiniNegocioLog.ldf’,
size = 2 MB,
maxsize = 3 MB,
filegrowth = 10%)
Explicaremos os itens usados:
- ON: Especifica o grupo de arquivos no qual criamos o arquivo de dados. O grupo aqui é Primary, alias o grupo default.
- NAME: Nome lógico do Banco
- FILENAME: Nome e caminho do arquivo de banco de dados.
- MAXSIZE: Tamanho maximo que o banco pode alcançar. Pode ser especificado em MB, KB ou como UNLIMITED.
- LOG ON: Especifica o local onde se encontra o arquivo de log e seu tamanho. Se LOG ON não for especificado, o arquivo de log será criado com 25% do tamanho do arquivo de dados e armazenado na mesma pasta.
As mesmas tabelas Clientes e Pedidos serão criadas. Devemos primeiro selecionar o banco com o qual trabalharemos. Uma caixa de listagem localizada na parte de cima do Query Analyzer contém os nomes de todos os bancos presentes no SQL Server. Selecione o banco MiniNegocio.
Os comandos abaixo criarão as tabelas Clientes e Pedidos junto com suas chaves e relacionamento.
CREATE TABLE Clientes
(
CodigoCli int PRIMARY KEY CLUSTERED,
Nome char(20) NOT NULL
Carro char (20) NULL
)
CREATE TABLE Pedidos
(
CodigoPed int PRIMARY KEY CLUSTERED,
mercadoria char(30) NOT NULL,
DataPedido date NOT NULL,
CodigoCli int NOT NULL
REFERENCES Clientes(CodigoCli)
)
Esses comandos dispensam maiores explicações. REFERENCES faz a ligação entre a chave estrangeira de Pedidos e a chave primaria de Clientes.
Conclusão
Vimos como o Enterprise Manager fornece uma interface bastante interativa para criação e manipulação de bancos de dados e de seus objetos. O Query Analyzer constitui uma ferramenta menos amigável, entretanto, ele permite um maior controle e será certamente de maior utilidade em situações delicadas que exigem ajustes finos.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo