Dev (Back & Front)ARTIGO

Criando a infra-estrutura de Banco de dados

Para o nosso projeto vamos precisar de uma infra-estrutura simples de banco de dados com apenas três tabelas: clientes, produtos e vendas.

Se você estiver utilizando o MS SQL Server 2005, poderá abrir o Microsoft SQL Server Management Studio.

Selecione o servidor de banco de dados e o usuário para realizar a conexão como a seguir:

Estabelecida a conexão, podemos criar um banco de dados para o nosso projeto.

Para isso, clique com o botão direito sobre Databases e escolha a opção “New Database…

Vamos dar o nome do nosso database de Loja.

Deixe a configuração padrão para o tamanho inicial dos arquivos de dados e Log. Clique em Ok para criar o database:

Após clicar em Ok provavelmente precisaremos aguardar alguns segundos para que o MS SQL Server 2005 crie o banco de dados Loja.

Quando esta janela de título New Database desaparecer, podemos verificar que o banco de dados Loja foi criado com sucesso conforme figura abaixo:

Agora que já temos o nosso banco de dados, vamos executar os scripts para criar as três tabelas necessárias ao nosso projeto.

2.1 Criando a tabela de Clientes

Clicando com o botão direito sobre o database Loja, escolha a opção New Query:

Copie o script SQL abaixo e cole na janela de Query aberta.

CREATE TABLE [CLIENTES] (
	[CODIGO] [int] IDENTITY (1, 1) NOT NULL ,
	[NOME] [varchar] (100) ,
	[EMAIL] [varchar] (100) ,
	[TELEFONE] [varchar] (80) ,
	CONSTRAINT [PK_CLIENTES] PRIMARY KEY  CLUSTERED 
	(
		[CODIGO]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO

O código deverá ficar assim:

Para executar esse script e criar a tabela de Clientes, clique no botão Execute:

Se a mensagem “Command(s) completed successfully.” for exibida, podemos expandir o database Loja e depois expandir Tables para vermos a tabela CLIENTES que acabamos de criar.

O campo Código da nossa tabela de Clientes foi criado como Identity e Primary Key. O que significa isso?

Bem, Primary key (chave primária) é um campo que será único para cada registro da tabela, ou seja, só existirá um campo com o código igual a 1, só existirá um campo com o código igual a 2 etc. É um campo que não admite valores repetidos. Se tentarmos incluir um valor na chave primária já existente na tabela, o MS SQL Server vai exibir uma mensagem de erro e não permitirá essa inclusão.

A característica Identity desse campo significa que ele será gerenciado pelo MS SQL Server e nós não precisamos nos preocupar em inserir um valor inexistente na tabela para evitar a duplicidade. Na prática isso quer dizer que nós nem precisamos mencionar esse campo nas operações de inserção pois é o gerenciador de banco de dados que se encarrega de inserir uma chave primária válida.

Vamos inserir um registro na tabela de clientes com o comando a seguir.

Podemos apagar o comando de Create table existente na janela do Management Studio e vamos colar o comando abaixo:

insert into clientes(nome,email,telefone)

values (´Carlos Camacho´,´c_olavo@hotmail.com´,´(11) 9999-5555´)

Clique em Execute para executar o comando de inserção:

Se a mensagem “1 row(s) affected” for exibida, significa que o registro foi inserido com sucesso.

Execute o comando de seleção a seguir para visualizarmos o registro que acabamos de inserir na tabela de Clientes:

Select * from clientes

Perceba que apesar de não mencionarmos o campo Codigo no comando de insert executado anteriormente, o MS SQL Server providenciou a inserção desse valor automaticamente.

Se executarmos outro comando de insert, o MS SQL Server vai gerar um código diferente para inserir no campo Codigo do novo registro.

Parabéns! Acabamos de preparar a infra-estrutura do nosso projeto com a tabela de Clientes criada corretamente.

2.2 Agora vamos executar o script para criar a tabela de produtos:

O processo é o mesmo. Apague o conteúdo da janela de query e cole o script abaixo.

CREATE TABLE [PRODUTOS] (
	[CODIGO] [int] IDENTITY (1, 1) NOT NULL ,
	[NOME] [varchar] (100) ,
	[PRECO] decimal(10,2) ,
	[ESTOQUE] [int] ,
	CONSTRAINT [PK_PRODUTOS] PRIMARY KEY  CLUSTERED 
	(
		[CODIGO]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO

Com o script na janela de query, clique em Executar para criarmos a tabela de produtos.

Nesse instante você deve estar pensando…

Ué?! Depois que cliquei no Execute apareceu a mensagem “Command(s) completed successfully.” Mas a tabela PRODUTOS não apareceu em Tables… O que aconteceu?

Você está certo(a)! Precisamos atualizar o Management Studio para ver a tabela recém-criada. Para isso, vamos clicar com o botão direito do mouse em Tables e escolher a opção Refresh:

Veja o Management Studio após o Refresh:

Agora podemos ver a tabela de Produtos.

Que tal inserirmos dois produtos nessa tabela?

  • Apague o código da janela de query;
  • Copie o código abaixo na janela de query e clique em Execute para a inserção dos dois produtos.
insert into produtos (nome, preco, estoque) 
values (´Computador Pentium Dual Core´,´1500.00´,´15´)
insert into produtos (nome, preco, estoque) 
values (´Impressora Deskjet HP´,´599.90´,´150´)

Vamos ver o resultado:

Na janela de mensagens podemos ver que os dois registros foram inseridos com sucesso.

Utilize o comando select para consultar os produtos cadastrados.

  • Apague o conteúdo da janela de query;
  • Copie o comando abaixo e clique em Execute.
select * from produtos

O resultado é esse:

Ok, a nossa inserção de produtos funcionou!

Cadastramos 15 computadores Pentium Dual Core com o valor unitário de R$ 1.500,00;

E cadastramos também 150 impressoras Deskjet HP com o valor unitário de R$ 599,90.

A nossa tabela de Produtos está pronta. Agora só falta criarmos a tabela de Vendas!

2.3 Vamos criar a tabela para armazenar as Vendas.
  • Apague o conteúdo da janela de query;
  • Copie o comando abaixo e clique em Execute.
CREATE TABLE [VENDAS] (
	[CODIGO] [int] IDENTITY (1, 1) NOT NULL ,
	[DATA] [datetime],
	[QUANTIDADE] [int],
	[FATURADO] bit, 
	[CODIGOCLIENTE] [int],
	[CODIGOPRODUTO] [int],
	CONSTRAINT [PK_VENDAS] PRIMARY KEY  CLUSTERED 
	(
		[CODIGO]
	)  ON [PRIMARY],
        CONSTRAINT [FK_Codigo_Cliente] FOREIGN KEY 
	(
		[CODIGOCLIENTE]
	) REFERENCES [Clientes] (
		[Codigo]
	),
	CONSTRAINT [FK_Codigo_Produto] FOREIGN KEY 
	(
		[CODIGOPRODUTO]
	) REFERENCES [Produtos] (
		[Codigo]
	)

) ON [PRIMARY]
GO

Vejamos o resultado:

Dê um Refresh clicando com o botão direito tem Tables para que a tabela de Vendas seja exibida:

A tabela de Vendas que acabamos de criar possui duas foreign keys (chaves estrangeiras). Essas duas chaves são os campos: CodigoCliente e CodigoProduto.

Isso significa que quando um registro for inserido nesta tabela, o campo CodigoCliente incluído deverá existir na tabela de Clientes, assim como o campo CodigoProduto deverá existir na tabela Produtos.

Se alguém tentar incluir valores nestes campos que não existam nas tabelas citadas, o Microsoft SQL Server vai informar a ocorrência de um erro e não permitirá a inclusão.

Esse mecanismo do sistema gerenciador de banco de dados existe para manter a integridade dos dados. Chamamos isso de integridade referencial.

Uma regra que vamos usar no nosso projeto é que ao realizar uma venda, atualizaremos o estoque do produto na tabela de Produtos. Faremos com que o estoque fique atualizado com a seguinte fórmula:

Estoque = Estoque - Quantidade Vendida .

Essa tarefa será realizada juntamente com a tarefa de inclusão da Venda na tabela de Vendas.

Assim, para manter a integridade dos dados, precisaremos garantir que as duas coisas aconteçam:

  1. a inclusão na tabela de Vendas; e
  2. a atualização do estoque na tabela de Produtos.

Para isso usaremos uma Transação. Com a transação podemos garantir a execução das duas tarefas. Se uma delas for bem sucedida e a outra falhar, a transação desfaz a primeira tarefa mantendo assim a integridade referencial.

Em outras palavras, não existirá na tabela de Vendas um registro que tenha o código do produto vendido mas que o estoque deste produto na tabela de Produtos esteja desatualizado.

Veremos isso com mais detalhes no próximo artigo chamado “Camada de Acesso a Dados (Data Access Layer)”. Implementaremos as classes de acesso a dados e faremos esse controle transacional no método Incluir da classe de Vendas.

Observações:

Para futura utilização no nosso projeto, precisaremos guardar as seguintes informações sobre o banco de dados:

  • Nome do servidor de banco de dados que estamos usando;
  • Nome do banco de dados onde as três tabelas foram criadas;
  • Nome do usuário e senha utilizados para acessar o banco de dados.

Essa informação é importante para a construção da nossa string de conexão ou connectionstring.

A connectionstring será usada para a conexão com o banco de dados através da aplicação que desenvolveremos neste projeto.

Um bom site para consulta sobre a correta connectionstring que devemos utilizar é o http://www.connectionstrings.com/ Neste site existem dicas para criar connectionstrings para diferentes versões de bancos de dados.

No meu caso, se eu fechar a janela de Query que estávamos usando, poderei ver o nome do servidor de banco de dados que estou usando:

O usuário e a senha são aqueles que usei inicialmente para conectar no servidor de banco de dados antes de iniciar a criação do database Loja.

  • Nome do Servidor: MAQ-607567\SQLEXPRESS
  • Nome do banco de dados: Loja
  • Usuário: camacho
  • Senha: camacho2008a3

Assim, a minha connectionstring ficará assim:

"server=MAQ-607567\SQLEXPRESS;database=Loja;user=camacho;pwd=camacho2008a3"

A sua connectionstring vai depender dos nomes que você usou para:

  • Criar o servidor de banco de dados;
  • Criar o banco de dados;
  • Criar usuário e senha que terão acesso ao banco de dados.

Até o próximo artigo!

é mestrando em Tecnologias da Inteligência e Design Digital pela PUCSP. Pós-graduado em Análise e Projeto de Sistemas pela UNIP onde também se formou em Bacharel em Ciência da Computação. Possui Licenciatura Plena em Matemática pelas Faculdades Oswaldo Cruz. MCP .Net, MCP SQL Server.

Ver perfil