Desvendando o SQL - Parte II - Criando um Banco de Dados e Tabelas

Olá a todos,

Dando continuidade à série de artigos sobre o SQL vamos hoje começar a colocar a mão na massa no aprendizado da linguagem SQL. Para aqueles que não leram o primeiro artigo acesse Desvendando o SQL - Parte I.


No artigo anterior começamos a conhecer o SQL, fizemos uma introdução da linguagem, mostramos alguns comandos e operadores e também onde encontrar as ferramentas que utilizaremos durante nossos artigos. Então caso ainda não tenha instalado faça isso antes de começar a utilizar os comandos. Os links de instalação das ferramentas de banco e IDE são  Microsoft® SQL Server® 2008 Express e Microsoft® SQL Server® 2008 Management Studio Express respectivamente.  Caso usem o Windows 8, o SQL Server 2008 pode causar problemas de compatibilidade, então aconselho usarem o Microsoft® SQL Server® 2012 Express. No caso da versão 2012 existe uma opção a Express with Tools já consta o Mecanismo de Banco de Dados e o SQL Server Management Studio Express. Ressaltando que as ferramentas acima são gratuitas.

Como disse anteriormente, tudo que faremos via script, salvo algumas exceções pode ser feito de forma amigável por meio da ferramenta de gerenciamento, o que é intuitiva, mas como o objetivo é colocar a mente pra funcionar, pois podemos precisar no futuro vamos voltar no tempo e fazer tudo na base da mão.

Hoje vamos conhecer melhor alguns comandos de criação de algumas estruturas do SQL e carga em tabelas. Sem perder mais tempo vamos começar. Tudo começa com a criação de um Banco de Dados é dentro dele que tudo é feito. Alojado no banco de dados estarão às tabelas (tables), visões (views), stored procedures (procedimentos armazenados), function (funções), usuários (user), regras e tudo mais necessário para a organização de seus dados.

CRIANDO UM NOVO BANCO


A sintaxe ou forma de descrever o comando de forma geral é bem extensa e complexa, pois dentro dele pode-se determinar n configurações do BD, mas por enquanto vamos nos atentar ao mais simples possível sem deixar de lado a funcionalidade. O primeiro desses comandos é o CREATE DATABASE Database_name, onde Database_name: é o nome do novo banco de dados. Pode escolher o nome que achar melhor de acordo com a sua utilização. Nomes de bancos de dados devem ser exclusivos dentro de uma instância do SQL Server e estar de acordo com as regras de identificadores que se segue, não se preocupe no momento com os dados técnicos.

O database_name pode conter um máximo de 128 caracteres, sem acentos, espaços nem caracteres preferencialmente. Para efeito de organização vou utilizar uma nomenclatura padrão que costumo usar.

Como é uma coisa que muitos conhecem e para facilitar vamos criar uma estrutura simples de estoque. Claro que para grandes sistemas o ideal é fazer um levantamento antes de todas as tabelas necessárias e somente depois criaram já com suas respectivas ligação, mas a nível de aprendizado iremos no momento pular essa parte.

Abra sua IDE do SQL Server 2008 Express ou 2012 Express coloque usuário e senha que cadastrou na instalação, agora abra uma nova consulta (CTRL+N) e nela digite o comando abaixo:

CREATE DATABASE DBEstoque

Em seguida aperte F5 ou vá ao menu Consulta/Executar para executar o comando, esse vai ser nosso banco de teste. Se a mensagem ‘Comando(s) concluído(s) com êxito’ aparecer o seu banco foi criado com sucesso, se não aparecer na lista é só atualizar o servidor que ele vai está lá normalmente. Pronto nosso banco já está criado, algo como a estrutura abaixo vai aparecer. Se não criou certo e seja necessário apagar o banco criado utilize DROP DATABASE database_name, onde database_name é o nome do banco que será apagado, mas pelo amor de Deus tome cuidado ao executar esse comando porque ele não tem volta.




Agora com o banco criado digite o comando:

USE DBEstoque

Isso vai garantir que todos os comandos a seguir serão feito dentro de nosso BD que foi criado.

AS PRIMEIRAS TABELAS


As tabelas são os repositórios de suas informações, lembra-se do Excel? É bem parecido, composta por colunas e linhas, onde as colunas são os campos que serão necessários para armazenar as informações, onde cada coluna terá seu tipo de dados específico, e as linhas, também chamadas de tuplas, contem as informações referentes a cada campo criado.


colunas
NOME
TELEFONE
CPF
linhas
João Lima
9999-9999
11111111111
Paulo Cesar
8888-8888
22222222222
Maria Pereira
7777-7777
33333333333


Seguindo o padrão vou utilizar uma nomenclatura para as tabelas e os campos, mas você poderá usar a quer mais se adaptar a sua situação, só lembrando que evite usar caracteres especiais ou espaços nos nomes, isso facilitará as consultas futuras.

Alguns pontos são importantes na criação de uma tabela:

  • Quais os campos que serão utilizados;
  • De que tipos são;
  • Se são ou não obrigatórios;
  • Quais desses campos serão considerados como chaves primárias e chaves estrangeiras.

Tipo de Dados


SQL tem uma gama bem extensa de tipos de dados, inclusive podemos criar os nossos próprios, esses tipos podem ser usados em colunas, variáveis, parâmetros. Esses tipos são divididos em categorias, futuramente explicaremos com mais detalhes cada tipo:

Numéricos exatos

o   bigint
o   numeric
o   bit    
o   smallint
o   decimal      
o   smallmoney
o   int    
o   tinyint
o   money

Numéricos aproximados

o   float
o   real

Data e hora

o   data 
o   datetimeoffset
o   datetime2  
o   smalldatetime
o   datetime    
o   time

Cadeias de caracteres

o   char – tamanho fixo
o   varchar – tamanho variável
o   text    

Cadeias de caracteres Unicode

o   nchar
o   nvarchar
o   ntext  

Cadeia de caracteres binária

o   binary        
o   varbinary
o   image      
    

Outros tipos de dados

o   cursor        
o   timestamp
o   hierarchyid
o   uniqueidentifier
o   sql_variant
o   xml
o   table 


Chave Primária


Ou como o banco conhece Primary Key. Segundo o MSDN “é uma restrição que impõe a integridade de entidade para uma coluna ou colunas especificadas por meio de um índice exclusivo. Somente uma restrição PRIMARY KEY pode ser criada por tabela.” Em geral é um campo onde não pode haver repetições.

Chave Estrangeira


Ou como é conhecida Foreign Key. Segundo o MSDN “é uma restrição que fornece integridade referencial para os dados na coluna ou colunas. As restrições FOREIGN KEY requerem que cada valor na coluna exista na coluna ou colunas referenciadas correspondentes na tabela referenciada. As restrições FOREIGN KEY podem fazer referência somente a colunas que sejam restrições PRIMARY KEY ou UNIQUE na tabela ou colunas referenciadas em um UNIQUE INDEX na tabela referenciada. As chaves estrangeiras em colunas computadas também devem ser marcadas como PERSISTED.” São os campos que fazem as ligações entre as tabelas.


Agora explicado vamos criar nossas tabelas, vou criar a primeira de forma bem detalhada explicando o que significa, as outras estarão no script disponibilizado no final do artigo. Acredito que o SQL ainda esteja aberto e com uma nova consulta, se não faça isso e então escreva o código abaixo.


CREATE TABLE TBCategoria
(
         CD_CATEGORIA       INT              NOT NULL      IDENTITY,    
         DESC_CATEGORIA    VARCHAR(30) NOT NULL                                 
)

EXECUTE SP_ADDEXTENDEDPROPERTY 'MS_DESCRIPTION',
   'Tabela de Categoria de Produto',
   'USER', 'DBO', 'TABLE', 'TBCategoria'
GO

ALTER TABLE TBCategoria
   ADD CONSTRAINT PK_CATG PRIMARY KEY (CD_CATEGORIA)
GO

A primeira parte cria a tabela, utilizaremos sempre um TB antes da funcionalidade da tabela, nesse caso será a tabela de categoria de produtos que terá somente dois campos, um será o código do tipo inteiro, ou seja, um número, e outro será a descrição do tipo cadeia de caracteres com até 30 posições. O NOT NULL determina que os campos sejam obrigatórios. O IDENTITY determina que o campo seja preenchido automaticamente de forma sequencial.

A segunda parte não é obrigatória, é mais uma questão de organização, o comando cria uma descrição pra tabela, explicando do que se trata, fica mais bonitinho.

A última parte cria a chave primária da tabela, veja que ela altera a tabela TbCategoria e cria uma restrição com o nome de PK_CATG dizendo que o campo CD_CATEGORIA é a chave primária da tabela, isso vai determinar que esse campo será único, ou seja, sem repetições.

Tabela criada agora crie as outras. Deu errado? Não tem problema o script está apagando e criando as tabelas e suas chaves na ordem correta. Mas e tem uma ordem? Na verdade tem, quando temos algumas tabelas que se interligam, criá-las na ordem errada vai gerar erro no momento da execução, pois o script pode está fazendo referencia a campos que nem existem. Lembra-se do DROP que mencionei no banco? Funciona da mesma maneira para tabela, é só colocar DROP TABLE table_name onde tabme_name é o nome da tabela criada.


Agora vamos inserir algumas categorias nessa tabela que criamos. É um script bem simples já que nesse caso você só precisa preenche um campo pois o outro é automático. Em uma nova consulta escreva o código abaixo:

INSERT INTO TBCategoria (DESC_CATEGORIA) VALUES ('Bebidas')
INSERT INTO TBCategoria (DESC_CATEGORIA) VALUES ('Cereais')
INSERT INTO TBCategoria (DESC_CATEGORIA) VALUES ('Lacticínios')
INSERT INTO TBCategoria (DESC_CATEGORIA) VALUES ('Massas')
INSERT INTO TBCategoria (DESC_CATEGORIA) VALUES ('Enlatados')

Quando só preenchemos alguns campos da tabela é preciso que digamos qual campo vai receber o que, caso contrário podemos inserir os dados em um campo errado.

Feita a inserção podemos conferir se está tudo ok, em uma nova consulta digite:

SELECT * FROM TBCATEGORIA

O resultado abaixo vai aparecer mostrando que os dados foram inseridos normalmente e você acabou de fazer sua primeira consulta.


Agora é com você, crie as outras tabelas, e depois insira as informações em cada uma delas, se der errado é só rodar os scripts novamente que vai da certo, se desejar crie outras tabelas, insira mais alguns dados nas tabelas criadas sempre respeitando as chaves primárias e estrangeiras.

Se tiver alguma dúvida não se acanhe é só comentar suas dúvidas que com prazer irei respondê-la. No próximo artigo vamos mexer mais um pouco na estrutura das tabelas, conheceremos o UPDATE e o DELETE, não perca.

Abraço a todos e até a próxima.

Scripts:

Comentários

Postagens mais visitadas