Falando sobre o SQL Server 2008

Esse artigo apresentará o poderoso banco de dados SQL Server 2008 através de exemplos práticos que cobrem desde a instalação ao desenvolvimento.

Consulte nosso artigo sobre o SQL Server 2016 para ter a versão mais atual.

Para que serve o SQL Server

Um banco de dados é um conjunto de registros dispostos em uma estrutura organizada de forma a prover facilidade de armazenamento e rápida consulta. Praticamente todas as soluções tecnológicas trabalham em algum momento com armazenamento de informações pertinentes ao negócio. Podemos endereçar ao SQL Server 2008 a resolução de problemas relacionados ao armazenamento de dados de forma simples e eficiente.

Em que situação o tema é útil

Para desenvolvimento de soluções na plataforma .NET que necessitem de armazenamento e consulta de dados. O SQL Server 2008 Express é indicado para fins de aprendizado ou de cenários simples para criação de soluções. A suíte do produto conta com ferramentas especializadas para auxiliar no desenvolvimento e administração do banco de dados.

Esse artigo trata das etapas básicas necessárias para criação de uma base de dados no SQL Server 2008. Entenderemos as motivações para modelarmos corretamente a estrutura de dados que comportará as informações e veremos como podemos garantir a consistência dos dados através dos conceitos envolvidos na modelagem relacional de dados. Por fim, utilizaremos o SQL Server Management Studio para criarmos as tabelas e testarmos nosso banco.

No mundo atual, para as organizações obterem sucesso elas precisam de uma visão que enderece as tendências principais no gerenciamento de dados. A Microsoft se preocupa em satisfazer esta necessidade e nesse sentido possui uma excelente plataforma de dados chamada SQL Server. A versão mais atual deste produto é o SQL Server 2008 R2. Veremos nesse artigo como podemos criar uma base de dados utilizando uma versão especialmente criada para fins de aprendizado: o SQL Server 2008 Express. O próximo tópico mostrará como podemos obter uma versão gratuita do produto e quais os passos necessários para realizar a instalação do SQL Server 2008 Express.

Instalando o SQL Server 2008 Express

Para instalarmos o SQL Server 2008 Express devemos primeiramente acessar o site do Web Platform Installer (veja sessão Links), que funcionará como um gerenciador de instalações da família de produtos Express, além de prover diversos outros recursos e componentes de desenvolvimento. Conforme podemos conferir na Figura 1, o site possui uma área (destacada na Figura 1) que direciona para a instalação do SQL Server 2008 Express. O link direto para este site você também obtém no final deste artigo na sessão Links. A finalidade do Microsoft Web Platform Installer é concentrar a instalação de produtos e componentes de forma simples, como veremos nos passos a seguir.

Instalação do SQL Server 2008 Express
Figura 1. Site Microsoft /Express com o ponto de partida para instalação do SQL Server 2008 Express

Como segundo passo aguarde que o site solicite a instalação do Microsoft Web Platform Installer. A Figura 2 mostra o progresso da instalação. Um detalhe importante é que este passo será necessário apenas uma única vez, pois em futuros acessos o site “Microsoft/Express” é capaz de apresentar o Microsoft Web Platform Installer diretamente.

Microsoft Web Platform Installer
Figura 2. Instalação do Microsoft Web Platform Installer, que será utilizado para gerenciar as instalações da família de produtos Express

Caso você já tenha instalado previamente o Microsoft Web Platform Installer ou tenha executado os procedimentos de instalação mencionados anteriormente, a tela inicial de instalação do SQL Server 2008 Express será apresentada conforme mostra a Figura 3.

Instalação do SQL Server 2008
Express através do Microsoft Web Platform Installer
Figura 3. Tela inicial de instalação do SQL Server 2008 Express através do Microsoft Web Platform Installer

A partir daqui iremos de fato iniciar a instalação do SQL Server 2008 Express e das ferramentas de desenvolvimento. Além do próprio banco de dados a principal ferramenta de desenvolvimento que será instalada é o SQL Server Management Studio. Esse artigo explicará a finalidade e o uso deste componente nos próximos tópicos.

Ainda tomando como referência a Figura 3, clique no botão Install. É altamente recomendado que durante o processo de instalação você não realize nenhuma outra instalação e evite executar tarefas que requeiram a reinicialização da máquina. O processo de instalação em geral não é demorado, obviamente isso dependerá da sua velocidade de conexão com a Internet. A tela exibida na Figura 4 mostrará com detalhes o que será instalado bem como o tamanho total requerido. A Microsoft recomenda como configuração de hardware adequada o seguinte:

• 1 GB de espaço livre no disco rígido;

• Mínimo de 256 MB de RAM, sendo o recomendado 1 GB;

• Processador Intel ou compatível de 1 GHz, sendo o recomendado 2 GHz;

Para aceitar as condições de instalação basta clicar no botão I Accept, localizado no canto inferior direito, conforme vemos na Figura 4.

Tela de confirmação dos itens que serão
instalados
Figura 4. Tela de confirmação dos itens que serão instalados

O instalador apresentará a tela exibida na Figura 5, nela devemos escolher a opção Mixed Mode Authentication (recommended for application development), informar a senha do administrador do SQL Server no campo Password (a senha deve ser confirmada no campo Confirm Password). Na prática estaremos definindo uma conta de usuário interno do SQL Server, isso é importante para garantir um contexto de segurança na administração dos bancos de dados que serão criados. Como parte de uma política de segurança mínima necessária para garantir a segurança das informações contidas nos bancos de dados, o SQL Server obrigará que você determine no momento de sua instalação quem é o usuário que possuirá acesso administrativo na instância do SQL Server 2008 Express.

Instância do SQL Server 2008 Express
Figura 5. Definindo a senha do usuário administrador da instância do SQL Server 2008 Express

Como foi dito anteriormente, o Microsoft Web Platform Installer visa facilitar o processo de instalação. Comparado com a instalação de outras versões do SQL Server 2008, como a Enterprise, Professional e outras, a Express assumirá a responsabilidade de configurar todo o ambiente inicial da instância que será instalada. Conforme podemos conferir na Figura 6, deste ponto da instalação em diante precisaremos apenas acompanhar o download e a instalação completa do SQL Server 2008 Express, bem como das suas ferramentas e componentes de desenvolvimento.

Download e instalação do SQL
Server 2008 Espress no Microsoft Web Platform Installer
Figura 6. Processo de download e instalação do SQL Server 2008 Espress no Microsoft Web Platform Installer

Ao final deste processo teremos a exibição da tela mostrada na Figura 7. Ela indicará se o processo de instalação ocorreu com sucesso. Caso haja algum problema durante a instalação, você pode consultar o link disponibilizado na sessão de Links (SQL Server 2008 Express Install) no final deste artigo. Nele você encontrará orientações e outros links que podem auxiliar na solução de possíveis problemas durante a instalação.

Tela de confirmação de instalação com sucesso
Figura 7. Tela de confirmação de instalação com sucesso

Caso você deseje alterar posteriormente a instalação do SQL Server 2008 Express, basta entrar novamente no site “Microsoft /Express” e quando o Microsoft Web Platform Installer for exibido, clicar na guia Web Platform conforme mostra a Figura 8. Lá você encontrará a opção Database e o link Customize. Clicando neste link será apresentada a tela exibida na Figura 9.

Microsoft Web Platform Installer
Figura 8. Tela do Microsoft Web Platform Installer com as opções de customização dos componentes instalados

Na tela exibida na Figura 9 podemos remover ou adicionar os componentes previamente instalados. Como podemos ver, além do SQL Server 2008 Express, temos a opção de instalar diversos outros produtos e componentes de desenvolvimento da plataforma .NET. Esse artigo trata apenas do SQL Server 2008, mas os passos aqui apresentados podem ser utilizados para instalação de outras ferramentas, devendo-se apenas fazer algumas adaptações devido às particularidades de cada produto.

Componentes e ferramentas do
SQL Server 2008 Express
Figura 9. Selecionando os componentes e ferramentas do SQL Server 2008 Express

Com o SQL Server 2008 Express instalado, temos tudo o que precisamos daqui por diante. Veremos a seguir como devemos pensar no desenvolvimento para banco de dados além de executarmos diversas ações e exemplos práticos no decorrer do artigo.

A importância da modelagem de dados

Chamamos de Modelagem de Dados a atividade de especificação das estruturas de dados e regras de negócio necessárias para suportar uma área de negócios. Isso significa representar um conjunto de requerimentos de informações de negócio em termos de dados que poderão ser armazenados e recuperados posteriormente por uma ferramenta de gerenciamento de banco de dados (SGBD). É uma parte importante do desenho de um sistema de informação. Em suma, a modelagem de dados compreende algumas etapas:

1) Projeto conceitual: nesta etapa modelamos os requisitos de dados através de Diagramas de Entidade e Relacionamento (DER) ou Classes de Objetos (DCO);

2) Projeto Lógico: aqui fazemos o mapeamento do esquema conceitual para o modelo de dados do SGBD escolhido, através do Diagrama de Estrutura de Dados (DED);

3) Projeto Físico: por fim fazemos o mapeamento do esquema lógico para os tipos de dados e restrições de integridade do SGBD escolhido, além da criação das visões e índices.

Neste artigo vamos focar apenas alguns aspectos da modelagem de dados, dando ênfase aos conceitos importantes para criação de tabelas no SQL Server 2008 Express. Dito isso, veremos como podemos fazer a transição de uma estrutura de dados, desde a necessidade de negócio até a criação do banco de dados. Vamos imaginar que desejamos realizar a modelagem de dados de um Blog. Certamente, você leitor, está familiarizado com as necessidades de um blog, basicamente temos os posts escritos por um ou mais autores e comentários realizados pelos leitores. Como exemplo de cenário iremos a partir de agora realizar a modelagem das informações pertinentes para posteriormente desenvolvermos o nosso banco de dados utilizando o SQL Server 2008 Express. Faremos uso de um modelo simplificado, pois o mais importante é entendermos todos os meandros dessa etapa.

Podemos a partir desse cenário elaborar um primeiro esboço das informações que precisamos para publicar uma postagem completa, conforme ilustra a Tabela 1.

Informações contidas num post

Título do Post

Conteúdo do Post

Tags

Categoria

Informações sobre o Autor

Comentários

Tabela 1. Primeiro esboço da modelagem de informações de um blog

De acordo com o nosso esboço inicial podemos considerar algumas situações de uso. O importante agora é identificarmos o que chamamos de “anomalias de atualização”. As seguintes considerações irão nos auxiliar nesse exercício:

- Incluir um novo post implica em incluir dados da categoria na qual ele pertence, caso a categoria não exista devemos criá-la;

- Ainda na inclusão, devemos informar os dados do autor do post, como nome e e-mail de contato;

- Um post pode ter nenhum, um ou mais comentários;

- Excluindo um post que possui uma categoria associada estaremos excluindo a informação da categoria e das tags associadas. Caso a categoria tenha apenas um post, a informação da mesma será perdida;

- Modificando o e-mail de um autor teremos que modificar de todos os posts escritos por ele;

Observe que com algumas observações percebemos que o esboço é válido para reunirmos as informações de que precisamos. Contudo, se pensarmos em armazenamento dessas informações, teremos diversos pontos a serem tratados, pois dependendo de como modelarmos o nosso banco de dados teremos muitos problemas durante as operações de inclusão, alteração ou exclusão de registros. Outro fator bastante relevante é a repetição da mesma informação, como é o caso do autor do post, pois geramos dados repetidos (ou redundantes). Podemos afirmar que as primeiras preocupações serão, portanto, as anomalias de atualização e a redundância.

É aqui que entra o que chamamos de Normalização (através da observação e aplicação das chamadas “Formas Normais”). Mas o que é a Normalização? Podemos defini-la como sendo o processo formal passo a passo que examina os atributos de uma entidade, com o objetivo de evitar anomalias observadas na inclusão, exclusão e alteração de registros (tuplas) exclusivos. Podemos então afirmar que a Normalização:

1) Visa minimizar redundâncias e inconsistências;

2) Facilitar a manipulação dos dados;

3) Facilitar a manutenção das informações;

Para realizarmos a Normalização devemos seguir os seguintes passos.

1º Passo – Substituir um conjunto de entidades e relacionamentos por um outro mais “limpo”

Neste passo podemos pensar na divisão do esboço inicial em algumas estruturas, como por exemplo, a separação em posts, categorias, tags e autor;

2º Passo – Limpar anomalias de atualização em relação a atributos multivalorados

Aqui podemos tratar como sendo atributos multivalorados os comentários e as tags. Ou seja, não queremos que a estrutura contenha grupos repetitivos, como é o caso dos comentários. Além disso, queremos que uma determinada tag possa ser atualizada independentemente do post;

3º Passo – Limpar anomalias de atualização em relação a dependências parciais em chaves concatenadas

Devemos aqui nos preocupar em garantir que uma atualização não afete itens relacionados, como é o caso de posts e categorias;

4º Passo – Limpar anomalias de atualização em relação a redundância de dados desnecessários

Nesse passo devemos pensar numa estrutura de dados que favoreça o reaproveitamento de informações, de forma a minimizar a repetição de uma mesma informação em mais de um ponto. Podemos exemplificar com os dados do autor, que serão repetidos em vários posts;

5º Passo – Limpar anomalias de atualização em relação à perda de informações

Para que não haja perda de dados entre dados relacionados, quando apenas uma parte precisa ser excluída, devemos garantir que a estrutura de tabelas tenha independência suficiente. Podemos exemplificar esse passo através do relacionamento de posts com autores, categorias, tags e comentários.

6º Passo – Limpar anomalias de atualização em relação a dependência transitiva entre atributos

Eliminar a dependência transitiva significa garantir que não existe um elemento intermediário de ligação entre dois objetos.

7º Passo – Limpar anomalias de atualização em relação a dificuldades de representar a realidade observada

As informações do autor englobam atributos como: nome do autor e e-mail. Assim como um post possui uma data de publicação além de seu título e conteúdo. Nesse passo devemos refinar a representação de negócio dentro do nosso modelo de dados.

Diz-se que uma tabela num banco de dados relacional está numa certa forma normal se satisfaz certas condições. Cada forma normal representa uma condição mais forte que a que a precede na lista. Para a maioria dos efeitos práticos, considera-se que as bases de dados estão normalizadas se aderirem à terceira forma normal. Aplicando as três formas normais ao nosso esboço inicial teremos como resultado o diagrama apresentado na Figura 10.

Modelo de dados
Figura 10. Modelo de dados após a normalização, ainda numa visão com poucos detalhes

A primeira impressão que temos com o modelo apresentado na Figura 10 é de que a estrutura ficou mais complexa. Mas o que aconteceu na verdade é que traduzimos um esboço inicial, que não tinha a preocupação de representar os relacionamentos existentes entre os atributos, em uma visão mais detalhada, prevenindo as anomalias de atualização e as redundâncias. Outro benefício da revisão do modelo é que poderemos realizar um armazenamento dos dados de forma otimizada e consistente.

Podemos, pela primeira vez, ter uma ideia do que seriam as tabelas do banco de dados. Podemos entender como tabela um conjunto de dados dispostos em número finito de colunas e número ilimitado de linhas (tuplas, ou comumente chamados de registros). As principais mudanças do esboço inicial para o modelo da Figura 10 encontram-se destacadas a seguir:

• Foi criada uma estrutura separada para Post, Comentário, Autor, Categoria e Tags. Isso porque cada uma dessas informações pode ser representada de forma bem definida fora de um contexto de relacionamento. Ou seja, elas fazem sentido por si só, sem a necessidade de se ligarem (necessariamente) a outra entidade;

• Todas as tabelas receberam um ID (identificados) para que cada registro possa ser identificado de forma exclusiva, ou seja, evitamos assim a redundância de informações;

• As informações do autor foram melhor definidas, sendo que os atributos Nome e E-mail foram criados para este fim. O mesmo aconteceu com a tabela Post, que ganhou o atributo Data de Publicação;

• O relacionamento entre as tabelas se faz através do que chamamos de chaves (keys), que possibilita a navegação entre as entidades. No nosso exemplo as chaves são todos os atributos “ID” presentes nas tabelas. Podemos observar na tabela Post que além dos atributos diretamente necessários para a criação de um post temos também as chaves “ID do Autor” e “ID da Categoria”. Isso possibilita relacionarmos um autor e uma categoria para um determinado post;

• Quando temos um relacionamento semelhante ao caso das tabelas Post e Comentários, onde um post pode possuir nenhum, um ou mais comentários, dizemos que este relacionamento é de 1 (um) para “N” (muitos). Isso possibilita localizarmos todos os comentários de um dado post;

• Existem situações onde precisamos de um relacionamento conhecido como “N” para “N” (muitos para muitos), como é o caso do relacionamento entre Post e Tags. Ou seja, uma tag pode ser associada a vários posts assim como um post pode possuir diversas tags associadas. Nesses casos devemos modelar uma tabela de navegação, no nosso exemplo é a tabela Tags do Post. Isso possibilita o aproveitamento das informações de forma bidirecional.

Como pudemos acompanhar ao longo deste tópico, a modelagem de dados tem um papel crucial quando desejamos criar um banco de dados. É importante ressaltar que o exercício desenvolvido até aqui requer conhecimento do negócio, aplicação de práticas e um considerável conhecimento de análise de dados. Sendo a proposta desse artigo uma introdução ao SQL Server 2008, concentraremos no nosso exemplo do Blog para criar a nossa base de dados através da ferramenta SQL Server Management Studio.

O SQL Server Management Studio

O SQL Server Management Studio inclui ferramentas gráficas para administração de banco de dados em um rico ambiente de desenvolvimento. O Management Studio permite acessar e gerenciar o mecanismo de Banco de Dados, através dele teremos a capacidade de escrever instruções Transact-SQL ou T-SQL (a implementação Microsoft do SQL standard).

Para abrir o SQL Server Management Studio, vá ao menu iniciar escolha Todos os Programas / Microsoft SQL Server 2008 e escolha SQL Server Management Studio. Após executado o Management Studio irá apresentar a tela exibida na Figura 11. Nessa tela temos duas opções, escolher o tipo de autenticação Windows Authentication (o SQL usa o usuário logado no Windows) ou SQL Server Authentication (nativa). No caso da última opção teremos que informar a senha definida na instalação do SQL Server 2008 Express. Clique em Connect em seguida.

Login do SQL Server Management Studio
Figura 11. Tela de login do SQL Server Management Studio

O Microsoft SQL Server Management Studio é uma ferramenta poderosa e flexível. A Figura 12 mostra sua interface. Podemos observar que existe uma janela, localizada na lateral esquerda, chamada Object Explorer. Essa janela permite a navegação em todos os itens presentes na instância do SQL Server 2008. Essa janela trará inicialmente uma estrutura do tipo tree view contendo como nó raiz a instância no qual fizemos a conexão. Abaixo dessa instância podemos ver diretórios que agrupam e organizam os demais objetos, tais como: bases de dados, usuários, objetos do servidor, objetos de gerenciamento, entre outros.

SQL Server Management
Studio
Figura 12. Apresentação inicial do SQL Server Management Studio

O nosso primeiro passo será criar a nossa base de dados, ou database, que será o nosso repositório para as tabelas do nosso modelo de Blog. Para isso, clique com o botão direito sobre o item Databases, escolhendo a opção New Database. Será exibida uma janela conforme podemos ver na Figura 13. Basicamente, precisamos informar o nome da nossa base de dados. Escreva NetEasyBlog e em seguida clique no botão Ok. Através dessa tela também seria possível definir outras configurações do nosso database, como o tamanho dos arquivos de dados e log, algumas opções de segurança, entre outros. Contudo, para o nosso exemplo as configurações padrão são suficientes.

Tela criação do novo database
Figura 13. Tela criação do novo database

O novo database NetEasyBlog será exibido dentro da estrutura Databases, conforme podemos notar na Figura 14. Se expandirmos essa estrutura veremos todos os objetos que podemos criar dentro de nossa base de dados. Como dissemos anteriormente, o

    SQL Server 2008
é uma poderosa plataforma para armazenamento de dados. O SQL Server Management Studio é um ambiente integrado para acessar, configurar, gerenciar e administrar todos os componentes do SQL Server. Ele combina um amplo grupo de ferramentas gráficas com cinco editores de script avançados para dar acesso ao SQL Server para os desenvolvedores e administradores a todos os recursos da plataforma. Sendo assim, podemos criar, além de tabelas, outros objetos: views, stored procedures, triggers, índices, entre outros.

Objetos possíveis de serem criados dentro de
uma database
Figura 14. Objetos possíveis de serem criados dentro de uma database

Faremos agora a criação da nossa primeira tabela. É possível fazermos a criação de forma gráfica, bastando para isso clicar com o botão direito no diretório Tables e em seguida escolher a opção New Table. Preencheremos o painel de criação de tabela conforme descrito na Tabela 2. Note que precisamos informar qual o tipo de dado queremos para cada coluna. É importante uma definição correta dos tipos de dados, pois isso influencia diretamente na forma como o SQL Server fará o armazenamento dos registros e também influenciará na performance das consultas.

Column name

Data Type

Allow Nulls

IdCategoria

int

(desmarcado)

Descricao

Varchar(50)

(desmarcado)

DataCriacao

datetime

(desmarcado)

Tabela 2. Definição da nova tabela

O passo seguinte é definir qual é a nossa chave primária (ou primary key), podemos fazê-lo selecionando a linha que contém o campo IdCategoria e clicando com o botão direito sobre a seta indicadora, conforme podemos ver na Figura 15. Devemos então escolher a opção Set Primary Key. Isso fará com que o SQL Server atribua o campo IdCategoria como chave da tabela Categoria. Uma vez que definimos um campo como chave o SQL Server cria uma restrição para esse campo, garantindo que um registro seja único. Esse campo não poderá ter o mesmo valor em mais de uma linha.

Definindo uma coluna como chave primária
Figura 15. Definindo uma coluna como chave primária

O resultado final da criação da tabela Categoria através da interface gráfica do Management Studio pode ser conferido na Figura 16. Para salvar a tabela, basta clicar no ícone com um disquete e dar o nome de “Categoria”.

Utilizando a interface gráfica do Management Studio
Figura 16. Criação da primeira tabela (Categoria) utilizando a interface gráfica do Management Studio

Nota: Observe na janela Properties à direita do Management que definimos a coluna IdCategoria como sendo a coluna “Identity”. Isso fará com que os valores para o campo sejam definidos automaticamente pelo BD (autoincremento).

A forma como criamos a tabela Categoria não é a única forma disponibilizada pelo SQL Server Management Studio. Desenvolvedores são mais familiarizados com a escrita de comandos do tipo DML (Data Manipulation Language) e DDL (Data Definition Language). Isso porque a escrita através de comandos dá uma chance de utilizarmos um editor de textos, o que significa que o código pode ser armazenado ou salvo em arquivos conhecidos como scripts. Um arquivo de texto utilizado para escrevermos comandos Transact-SQL salvo através do Management Studio possui a extensão .SQL.

Para iniciarmos o editor de texto do Management Studio podemos utilizar o botão destacado pela primeira seta da Figura 17. Uma vez aberto, podemos executar os comandos Transact-SQL através do botão destacado pela segunda seta da Figura 17, ou ainda pressionando a tecla F5.

Transact-SQL
Figura 17. O botão New Query cria um novo arquivo para escrevermos nossos códigos Transact-SQL - Executamos nossas queries utilizando o botão destacado, ou pressionando F5

Nota

A DML (Data Manipulation Language, ou Linguagem de Manipulação de Dados) é um subconjunto da linguagem usada para inserir, atualizar e apagar dados. A seguir temos os comandos utilizados na manipulação de dados:

INSERTà é usado para inserir um registro (formalmente uma tupla) a uma tabela existente.

UPDATE à para mudar os valores de dados em uma ou mais linhas da tabela existente.

DELETE à permite remover linhas existentes de uma tabela.

A DDL (Data Definition Language, ou Linguagem de Definição de Dados) permite definir tabelas novas e elementos associados. A maioria dos bancos de dados de SQL comerciais tem extensões proprietárias no DDL. Os comandos básicos da DDL são poucos:

CREATE à cria um objeto (uma tabela, por exemplo) dentro da base de dados.

DROP à apaga um objeto do banco de dados.

Alguns sistemas de banco de dados usam o comando ALTER, que permite ao usuário alterar um objeto, por exemplo, adicionando uma coluna a uma tabela existente. Outros comandos DDL:

ALTER TABLE

CREATE INDEX

ALTER INDEX

DROP INDEX

CREATE VIEW

DROP VIEW

O DCL (Data Control Language, ou Linguagem de Controle de Dados) controla os aspectos de autorização de dados e licenças de usuários para controlar quem tem acesso para ver ou manipular dados dentro do banco de dados. Duas palavras-chaves da DCL:

GRANT à autoriza ao usuário executar ou setar operações.

REVOKE à remove ou restringe a capacidade de um usuário de executar operações.

Existem ainda outras linguagens de banco de dados, como por exemplo, a DTL (Linguagem de Transição de Dados) e a DQL (Linguagem de Consulta de Dados).

A mesma tabela Categoria poderia ser criada através de comandos T-SQL conforme mostra a Figura 18. O comando CREATE TABLE indica que um bloco de comando para criação de uma tabela foi iniciado. Devemos então informar o nome da tabela e em seguida os campos que fazem parte da mesma. Note que primeiramente informamos o nome da coluna seguido do tipo de dado, e depois informamos a obrigatoriedade do campo (NOT NULL ou NULL). Na linha 6 podemos ver o comando CONSTRAINT que acrescenta uma regra para a tabela, informando ao SQL Server que o campo IdCategoria será a chave primária.

Query’s do SQL Server Management
Studio
Figura 18. Editor de query’s do SQL Server Management Studio em ação

Outro comando importante é o IDENTITY que define o campo IdCategoria como sendo do tipo autoincremento. Um campo definido como IDENTITY fará o controle do seu valor, incrementando automaticamente o seu valor a cada inserção de novo registro na tabela. Esse é o tipo de campo mais utilizado para chaves-primárias por ser pouco oneroso para o banco em termos de espaço e facilmente indexável.

É importante sempre ficarmos atentos à caixa de seleção destacada na Figura 19. Ele indicará sobre qual database os comandos serão executados. Devemos escolher o database NetEasyBlog para executarmos os comandos que veremos a seguir. A Listagem 1 exibe todos os comandos necessários para criação das tabelas do database, incluindo a tabela Categoria.

Dropdownlist destacado
Figura 19. Através do dropdownlist destacado na figura podemos escolher em qual database iremos aplicar os comandos

Listagem 1. Script para criação das tabelas da base de dados do Blog

  CREATE TABLE [dbo].[Categoria]
  (
        [IdCategoria] [int] IDENTITY(1,1) NOT NULL,
        [Descricao] [varchar](50) NOT NULL,
        [DataCriacao] [datetime] NOT NULL,
        CONSTRAINT [PK_Categoria] PRIMARY KEY CLUSTERED 
        (
              [IdCategoria] ASC
        )
  ) ON [PRIMARY]
  GO
   
  CREATE TABLE [dbo].[Tag]
  (
        [IdTag] [int] IDENTITY(1,1) NOT NULL,
        [Descricao] [varchar](30) NOT NULL,
        CONSTRAINT [PK_Tag] PRIMARY KEY CLUSTERED 
        (
              [IdTag] ASC
        )
  ) ON [PRIMARY]
  GO
   
  CREATE TABLE [dbo].[Autor]
  (
        [IdAutor] [int] IDENTITY(1,1) NOT NULL,
        [Nome] [varchar](50) NOT NULL,
        [Email] [varchar](80) NULL,
        CONSTRAINT [PK_Autor] PRIMARY KEY CLUSTERED 
        (
              [IdAutor] ASC
        )
  ) ON [PRIMARY]
  GO
   
  CREATE TABLE [dbo].[Post]
  (
        [IdPost] [int] IDENTITY(1,1) NOT NULL,
        [Titulo] [varchar](50) NOT NULL,
        [Conteudo] [text] NOT NULL,
        [DataPublicacao] [datetime] NOT NULL,
        [IdAutor] [int] NOT NULL,
        [IdCategoria] [int] NULL,
        CONSTRAINT [PK_Post] PRIMARY KEY CLUSTERED 
        (
              [IdPost] ASC
        )
  ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
  GO
   
  CREATE TABLE [dbo].[PostTags]
  (
        [IdPost] [int] NOT NULL,
        [IdTag] [int] NOT NULL,
        CONSTRAINT [PK_PostTags] PRIMARY KEY CLUSTERED 
        (
              [IdPost] ASC,
              [IdTag] ASC
        )
  ) ON [PRIMARY]
  GO
   
  CREATE TABLE [dbo].[Comentario]
  (
        [IdComentário] [int] IDENTITY(1,1) NOT NULL,
        [IdPost] [int] NOT NULL,
        [NomeLeitor] [varchar](50) NOT NULL,
        [EmailLeitor] [varchar](50) NOT NULL,
        [DataCriacao] [datetime] NOT NULL,
        [Comentario] [varchar](500) NOT NULL,
        CONSTRAINT [PK_Comentario_1] PRIMARY KEY CLUSTERED 
        (
              [IdComentário] ASC
        )
  ) ON [PRIMARY]
  GO

Após executar o script devemos observar a janela Messages do Management Studio, localizada na parte inferior do editor de textos. Caso o script não contenha erros e não haja algum impedimento (por exemplo, tabelas já criada), será exibida a mensagem “Command(s) completed successfully.”.

Uma vez criadas as tabelas, os dados já podem ser inseridos. Contudo devemos antes definir algumas regras para os relacionamentos entre as tabelas. A Listagem 2 mostra todos os comandos que precisam ser executados para a criação dessas regras. Por exemplo, veja que temos uma constraint entre a tabela Post e a tabela Autor, indicando o relacionamento.

Listagem 2. Script para criação das contraints do banco

  ALTER TABLE [dbo].[Comentario] ADD  
        CONSTRAINT [DF_Comentario_DataCriacao]  
        DEFAULT (getdate()) FOR [DataCriacao]
  GO
   
  ALTER TABLE [dbo].[Post] ADD  
        CONSTRAINT [DF_Post_DataPublicacao]  
        DEFAULT (getdate()) FOR [DataPublicacao]
  GO
   
  ALTER TABLE [dbo].[Comentario]  
        WITH CHECK ADD  CONSTRAINT [FK_Comentario_Post] 
        FOREIGN KEY([IdPost])
        REFERENCES [dbo].[Post] ([IdPost])
  GO
   
  ALTER TABLE [dbo].[Comentario] 
        CHECK CONSTRAINT [FK_Comentario_Post]
  GO
   
  ALTER TABLE [dbo].[Post]  
        WITH CHECK ADD  CONSTRAINT [FK_Post_Autor] 
        FOREIGN KEY([IdAutor])
        REFERENCES [dbo].[Autor] ([IdAutor])
  GO
   
  ALTER TABLE [dbo].[Post] 
        CHECK CONSTRAINT [FK_Post_Autor]
  GO
   
  ALTER TABLE [dbo].[Post]  
        WITH CHECK ADD  CONSTRAINT [FK_Post_Categoria] 
        FOREIGN KEY([IdCategoria])
        REFERENCES [dbo].[Categoria] ([IdCategoria])
  GO
   
  ALTER TABLE [dbo].[Post] 
        CHECK CONSTRAINT [FK_Post_Categoria]
  GO
   
  ALTER TABLE [dbo].[PostTags]  
        WITH CHECK ADD  CONSTRAINT [FK_PostTags_Post] 
        FOREIGN KEY([IdPost])
        REFERENCES [dbo].[Post] ([IdPost])
  GO
   
  ALTER TABLE [dbo].[PostTags] 
        CHECK CONSTRAINT [FK_PostTags_Post]
  GO
   
  ALTER TABLE [dbo].[PostTags]  
        WITH CHECK ADD  CONSTRAINT [FK_PostTags_Tag] 
        FOREIGN KEY([IdTag])
        REFERENCES [dbo].[Tag] ([IdTag])
  GO
   
  ALTER TABLE [dbo].[PostTags] 
        CHECK CONSTRAINT [FK_PostTags_Tag]
  GO

Dica: O comando GetDate, usado no código, retorna a data atual do servidor.

Como resultado teremos o nosso database completo com todas as tabelas necessárias para o Blog. Podemos conferir o resultado no diagrama exibido na Figura 20. Este diagrama pode ser criado no Management Studio clicando com o botão direito na janela Object Explorer no item Database Diagrams e escolhendo a opção New Database Diagram. A Figura 21 mostra a janela Add Table, onde podemos adicionar as tabelas que deverão fazer parte do diagrama.

Diagrama de dados
Figura 20. Diagrama de dados com todas as tabelas do Blog
Diagrama do SQL Server
Figura 21. Adicionando tabelas ao diagrama do SQL Server

Fazendo uso do banco de dados

Agora estamos habilitados a utilizar o nosso banco de dados. Faremos algumas inclusões e alguns testes, utilizando comandos do tipo DML (Data Manipulation Language). Abra um novo arquivo de script e insira alguns dados, utilizando como referência a Listagem 3.

Listagem 3. Inserindo alguns registros nas tabelas

  INSERT INTO Tag (Descricao) VALUES ('Programação')
  INSERT INTO Tag (Descricao) VALUES ('Linguagens')
  INSERT INTO Tag (Descricao) VALUES ('Tutorial')
  GO
   
  INSERT INTO Categoria (Descricao, DataCriacao) VALUES ('SQL Server', GETDATE())
  INSERT INTO Categoria (Descricao, DataCriacao) VALUES ('.NET Easy', GETDATE())
  GO
   
  INSERT INTO Autor (Nome, Email) 
  VALUES ('Lendro Daniel', 'contato@leandrodaniel.com')
  GO
   
  INSERT INTO Post (Titulo, Conteudo, DataPublicacao, IdAutor, IdCategoria)
  VALUES ('Tutorial SQL Server 2008 Express', 'Conteúdo do post', GETDATE(), 1, 1)
  GO
   
  INSERT INTO PostTags (IdPost, IdTag) VALUES (1, 1)
  INSERT INTO PostTags (IdPost, IdTag) VALUES (1, 3)
  GO
   
  INSERT INTO Comentario (IdPost, NomeLeitor, EmailLeitor, DataCriacao, Comentario) 
  VALUES (1, 'Bruno Daniel', 'bruno@mail.com', GETDATE(), 'Post interessante!')
  INSERT INTO Comentario (IdPost, NomeLeitor, EmailLeitor, DataCriacao, Comentario) 
  VALUES (1, 'Peg Sue', 'peg@mail.com', GETDATE(), 'Good!')
  GO

A Figura 22 mostra os registros que serão inseridos na database.

Comandos de insert
Figura 22. Os comandos de insert utilizados na Listagem 3 farão a inclusão dos primeiros registros do Blog

Veremos agora algumas situações onde as constraints garantirão a consistência das informações. Execute a query a seguir e observe que um erro será exibido no painel Messages (essa query não será executada com sucesso como consequência da criação da constraint que garantem a consistência das informações armazenadas):

  DELETE Categoria
   
  Msg 547, Level 16, State 0, Line 1
  A instrução DELETE conflitou com a restrição do REFERENCE "FK_Post_Categoria". O conflito ocorreu no bando de dados "NetEasyBlog", tabela "dbo.Post", column 'IdCategoria'.
  A instrução foi finalizada. 

Isso ocorre porque definimos um relacionamento entre a tabela Categoria e Post que impede que registros da tabela Categoria sejam apagados caso haja algum relacionamento de uso pela tabela Post.

A seguir vemos outro exemplo de query que não seria executada com sucesso, pois não existe uma Tag com o ID = 6:

  INSERT INTO Post (Titulo, Conteudo, DataPublicacao, IdAutor, IdCategoria)
  VALUES ('Tutorial Management Studio', 'Conteúdo do post', GETDATE(), 1, 6) 

Conclusão

Como pudemos conferir ao longo deste artigo o SQL Server 2008 Express pode ser utilizado para criação de databases utilizando todos os recursos desejados de um sistema de gerenciamento de dados (SGBD) eficiente. Obviamente o SQL Server 2008 possui inúmeros outros recursos que não foram demonstrados nesse artigo. Se você se interessou pelo SQL Server 2008 recomendo a consulta ao vasto material disponível no MSDN (vide a sessão de links, SQL Server 2008 Books Online). Espero que o artigo tenha sido útil e que essa introdução possa ajudar-lhe a endereçar os problemas de armazenamento de dados para o SQL Server 2008. Até o próximo artigo.

Links

Blogs do autor
http://reverb.leandrodaniel.com
http://twitter.com/leandronet

Site com links para os produtos Express
http://www.microsoft.com/express

SQL Server 2008 Express Downloads
http://www.microsoft.com/express/Database/

SQL Server 2008 Express Install
http://tinyurl.com/SQLServer2008ExpressInstall

Banco de Dados
http://pt.wikipedia.org/wiki/Banco_de_dados

SQL Server 2008 Books Online
http://msdn.microsoft.com/pt-br/library/ms130214(SQL.105).aspx