Você está na página 1de 44

SISTEMAS DE GESTÃO DEBASES DE DADOS

Tema2– Tipos de dados e Base de Dados

Gilda Muhai
Tópicos
 Tipos de Dados
 Conversão de dados
 Aliases
 Estruturas de armazenamento de dados
• Criação e configuração de bases de dados
Tipos de Dados

• Tipo de dados é um atributo que especifica o tipo


de dados de qualquer objeto. Cada coluna, variável,
está relacionado um tipo de dados em SQL Server.
Tipos de Dados
• Os tipos de dados em SQL Server são
organizados nas seguintes categorias:
• Numéricos exatos
• Numéricos aproximados
• Cadeias de caracteres
• Cadeias de caracteres Unicode
• Cadeia de caracteres binária
• Data e hora
• Outros tipos de dados
Dados Numéricos Exatos
• Decimal - Números de precisão e escala fixas;
• Numeric - numeric é funcionalmente equivalente a decimal;
• Bit - Um tipo de dados inteiro que pode aceitar um valor 1,
0 ou NULL.
• Int - ocupa o espaço de armazenamento de 4 bytes
• bigint – ocupa o espaço de armazenamento de 8 bytes;
• Smallint - ocupa o espaço de armazenamento de 2 bytes
• Tinyint - ocupa o espaço de armazenamento de 1 byte

Tipos de dados que representam valores monetários ou


de moeda
• Money - ocupa o espaço de armazenamento de 8 bytes;
• Smallmoney - ocupa o espaço de armazenamento de 4
bytes.
Dados Numéricos Aproximados

• Float – armazena números aproximados até n bits,


dependendo da precisão;
• Real – armazena números aproximados até 4 bytes.

Tipos de dados numéricos aproximados para uso


com dados numéricos de ponto flutuante.
Cadeias de caracteres
• Char - Cadeia de caracteres do comprimento de
fixo n;
• Varchar - Cadeia de caracteres de comprimento
variável com um comprimento máximo de
cadeia de caracteres n;
• Text - Tipos de dados fixos e de comprimento
variável para armazenar dados binários e de
caracteres não Unicode e Unicode grandes.
Cadeias de caracteres Unicode
• Nchar - Dados de cadeia de caracteres de tamanho
fixo. n define o tamanho da cadeia de caracteres
em pares-byte e deve ser um valor entre 1 a 4.000;
• Nvarchar - [ ( n | max ) ]
Dados de cadeia de caracteres de tamanho
variável. n define o tamanho da cadeia de
caracteres em pares-byte e pode ser um valor entre
1 a 4.000. max indica que o tamanho de
armazenamento máximo é de 2^30-1 caracteres (2
GB);
• Ntext - ados Unicode de comprimento variável com
um comprimento máximo de cadeia de caracteres
de 2^30 - 1 (1.073.741.823) bytes.
Cadeia de caracteres binária
• Binary - [ ( n ) ] Dados binários de comprimento fixo
com um tamanho de n bytes, em que n é um valor de 1
a 8.000;
• Varbinary - [ ( n | max) ] Dados binários de tamanho
variável. n pode ser um valor de 1 a 8.000. max indica
que o tamanho de armazenamento máximo é de 2^31-
1 bytes;
• Imagem - Dados binários do comprimento variável de 0
a 2^31-1 (2.147.483.647) bytes.
Data e hora

• Date - padrão de representação de datas definido


como AAAA-MM-DD;
• Datetimeoffset - Define a data combinada com uma
hora de um dia que possui reconhecimento de fuso
horário e é baseada em um relógio de 24 horas;
• Datetime - Define uma data combinada com uma
hora do dia que inclui frações de segundos e se
baseia em um período de 24 horas;
• Time - Define uma hora de um dia. A hora se
encontra sem reconhecimento de fuso horário e se
baseia em um relógio de 24 horas.
Outros tipos de dados
• Cursor ;
• Rowversion
• Hierarchyid
• Uniqueidentifier
• Sql_variant
• Xml
(Descrições:
https://docs.microsoft.com/pt-br/sql/t-sql/data-type
s/data-types-transact-sql?view=sql-server-ver15
)
Tipos de Dados (Cont.)
com base em características de armazenamento,
alguns tipos de dados são designados da
seguinte forma:
• Tipos de dados de valor
grande: varchar(max) e nvarchar(max)
• Tipos de dados de objeto
grande: text, ntext, image, varbinary(max) e
xml
Resumo Tipo de Dados
SQL Padrão (ANSI) SQL2 = Padrão +
CHAR(tamanho) VARCHAR(tamanho)
CHARACTER(tamanho) CHAR VARYING(tamanho)
CHARACTER VARYING(tamanho)
INT
INTEGER NCHAR(tamanho)
SMALLINT NATIONAL CHAR(tamanho)
NATIONAL CHARACTER(tamanho)
NUMERIC(precisão,escala) VARYING(tamanho)
DECIMAL(precisão,escala)
DEC(precisão,escala) BIT(tamanho)
BIT VARYING(tamanho)
FLOAT(precisão)
REAL DATETIME
DOUBLE PRECISION TIME(precisão)
TIMESTAMP(precisão)
INTERVAL

13
Conversão de Dados
Os tipos de dados podem ser convertidos nos seguintes
cenários:
• Quando os dados de um objeto são movidos,
comparados ou combinados com dados de outro
objeto, eles podem ser convertidos de um tipo de dados
de um objeto em um tipo de dados de outro objeto.
• Quando os dados de uma coluna de resultado, um
código de retorno ou um parâmetro de saída Transact-
SQL são movidos para uma variável de programa, os
dados devem ser convertidos de tipo de dados do
sistema SQL Server em tipo de dados da variável.
Conversão de Dados (Cont.)
Os tipos de dados podem ser convertidos implícita
ou explicitamente.
• As conversões implícitas não são visíveis ao
usuário. O SQL Server converte automaticamente
os dados de um tipo de dados em outro.
• As conversões explícitas usam as funções CAST ou
CONVERT.
Conversão de Dados (Cont.)
Quando usar o Cast ou o Convert:
• As duas funções permitem converter um tipo de
dado em outro, no entanto a função CAST é padrão
ANSI, pode ser usada em qualquer SGBD; já a
função CONVERT é uma função T-SQL, ou seja,
específica do Microsoft SQL Server.
Sintaxe de Conversão
CAST Syntax:
CAST ( expression AS data_type [ ( length ) ] )

CONVERT Syntax:
CONVERT ( data_type [ ( length ) ] , expression [ ,
style ] )

(
https://docs.microsoft.com/pt-br/sql/t-sql/functions/c
ast-and-convert-transact-sql?view=sql-server-ver15
)
Exemplos de Conversão de Dados
Conversão de valores de ListPrice em int para lista de
produtos com iniciais 33:

Select
• Usando CAST:
• CAST(ListPrice AS int) LIKE '33%’;

• Usando Convert:
• CONVERT(int, ListPrice) LIKE '33%’;

(
https://docs.microsoft.com/pt-br/sql/t-sql/functions/cast-an
d-convert-transact-sql?view=sql-server-ver15
Convenções para Nomeação

 Deve começar com uma letra


 Pode ter de 1 a 30 caracteres
 Deve conter somente A–Z, a–z, 0–9, _, $ e #
 Não deve duplicar o nome de outro objeto de
propriedade do mesmo usuário
 Não deve ser uma palavra reservada do SGBD

19
Aliases
O alias é um nome alternativo que pode ser
usado para fazer uma conexão.
• Para empregar usa-se a cláusila “as”.
Sintaxe:
SELECT coluna AS aliasDaColuna FROM tabela as
aliasDaTabela; ou

SELECT coluna aliasDaColuna FROM tabela as


aliasDaTabela;

Ex: SELECT NomeEst AS Est FROM tbl_Estudante;


• Antes de convertemos dados e criarmos aliases,
façamos uma revisão de criação de bases de dados.
Estruturas de armazenamento de
dados
Objetos do Banco de Dados
Objeto Descrição
Tabela Unidade básica de armazenamento,
composta de linhas de uma ou mais colunas
View Representa logicamente subconjuntos de
dados de uma ou mais tabelas
Seqüência Gera valores de chave primária
Índice Melhora o desempenho de algumas
consultas
Sinônimo Atribui nomes alternativos a objetos

23
SQL como DDL
• Instruções para definição do esquema da base
de dados:
• CREATE TABLE
• Cria uma nova tabela na base de dados, especificando nome,
atributos e restrições

• ALTER TABLE
• Altera definições de uma tabela

• DROP TABLE
• Remove uma tabela, quando suas definições não são mais
necessárias
24
Criação de uma Base de Dados
• CREATE DATABASE
• Cria um novo banco de dados
• Sintaxe pode mudar a depender do SGBD

CREATE DATABASE <nome_do_BD>

CREATE DATABASE Teste;

• Para verificar a existência da BD usa-se a instrução:


SELECT *FROM sys.databases; GO
Ou
• SELECT name, database_id, create_date FROM sys.databases;
GO 25
Exclusão de uma BD
DROP DATABASE <nome_do_BD>

DROP DATABASE Teste;


Caso não se tenha certeza de que foi apagada, como
também para evitar erros pode-se usar o seguinte
comando:
DROP DATABASE IF EXISTS Teste;
(A clausula garante que se exclua a BD caso exista)
Criação de tabelas
• CREATE TABLE
• Colunas são especificadas primeiro, sob a forma:
<nomeCol> <domínio> <restrição>
• Depois Chaves, integridade referencial e restrições de integridade

CREATE TABLE <nome_da_tabela>


( <nome_da_col1> <tipo_da_col1> NOT NULL,
<nome_da_col2> <tipo_da_col2> NOT NULL,
...
PRIMARY KEY <lista_de_nomes_de_col>,
FOREIGN KEY <nomes_de_col>
REFERENCES <nome_tab_ref>(<nome_da_col_ref>)
);

27
Criação de tabelas
Ex:
CREATE TABLE Estudante Identity PRIMARY KEY(
codEst INT,
nome CHAR (15),
sobrenome CHAR (20)
);
Para listar:
• select * from INFORMATION_SCHEMA.TABLES;
• SELECT table_name FROM Information_schema.tables;
Para visualizar a estrutura da tabela:
EXEC sp_help Estudante; (O nome da tabela pode ser outro
dependendo da tabela criada)
28
Restrições e Valores Default
• Restrições:
• NOT NULL
• Restrição aplicadas a colunas cujos valores não podem ser
nulos

• Valores Default
• Adiciona-se a cláusula DEFAULT <valor> logo após a
restrição:
CREATE TABLE Empregado
( ...
Sexo CHAR(1) NOT NULL DEFAULT “F”,
...
); Restrição Definição do
valor default
29
Criação de tabelas
• Especificação de chaves:
• Primária:
PRIMARY KEY(<nomeColuna>),

• Estrangeira:
FOREIGN KEY(<nomeCol>) REFERENCES <NomeTabRefer>
(<nomeColRefer>),

• Alternativa:
UNIQUE KEY(CPF), (SQL2)

30
Criação de tabelas
• Exemplo com chave primária:

CREATE TABLE Departamento


( Dcod INTEGER NOT NULL,
Dnome VARCHAR(20) NOT NULL,
Cidade VARCHAR(20),
PRIMARY KEY(Dcod));

Departamento
Dcod Dnome Cidade
31
Criação de tabelas
• Exemplo com chave primária composta

CREATE TABLE Empregado


( Ecod INTEGER NOT NULL,
Enome VARCHAR(40) NOT NULL,
CPF VARCHAR(15) NOT NULL,
Salario DECIMAL(7,2),
Cod_Dept INTEGER NOT NULL,
PRIMARY KEY(Ecod,ENome));

Empregado
Ecod Enome CPF Salario Cod_Dept
32
Criação de tabelas
• Exemplo com chave estrangeira

CREATE TABLE Empregado


( ...,
CONSTRAINT TrabalhaEm
FOREIGN KEY(Cod_Dept) REFERENCES
Departamento(Dcod),
...
);

Empregado
Ecod Enome CPF Salario Cod_Dept

33
Criação de tabelas
• Exemplo com chave alternativa

CREATE TABLE Empregado


( ...,
UNIQUE KEY(CPF));

Empregado
Ecod Enome CPF Salario Cod_Dept
34
Criação de tabelas
• Assim...
CREATE TABLE Empregado
( Ecod INTEGER NOT NULL,
Enome VARCHAR(40) NOT NULL,
CPF VARCHAR(15) NOT NULL,
Salario DECIMAL(7,2),
Cod_Dept INTEGER NOT NULL,
PRIMARY KEY(Ecod,ENome),
CONSTRAINT TrabalhaEm
FOREIGN KEY(Cod_Dept) REFERENCES Departamento(Dcod),
UNIQUE KEY(CPF));

Empregado
Ecod Enome CPF Salario Cod_Dept
35
Exercício
• Crie as seguintes tabelas em seu BD, definindo as
condições descritas abaixo
Fornecedor (Fcod#, Fnome, Status, Cidade)
Peca (Pcod#, Pnome, Cor, Peso, Cidade)
Projeto (PRcod#, Icod#, PRnome, Cidade)
Fornecimento (Fcod#, Pcod#, PRcod#, Quantidade)
Instituição (Icod#, nome)

• Nomes para restrições de chaves primária, estrangeira e alternativa


• Valor default para o atributo Status, de Fornecedor
• Todos os atributos de Peca não podem ser nulos
• A ação de CASCADE em Fornecimento se a tabela de Projeto fosse excluída
• Qual tabela deve ser criada por último?Pq?

36
Criação de tabelas
• Exemplo com chave estrangeira

CREATE TABLE Empregado


( ...,
CONSTRAINT TrabalhaEm
FOREIGN KEY(Cod_Dept) REFERENCES
Departamento(Dcod),
...
);

37
Remoção de tabelas
• DROP TABLE
• Elimina completamente a tabela (vazia ou não)

DROP TABLE <nome_da_tabela>;

• Ex.:
DROP TABLE Empregado;

• Não há como recuperar a tabela removida

38
Alteração de tabelas
• ALTER TABLE
ALTER TABLE <nome_da_tabela> <alteração>;

• Adicionar uma coluna:

ALTER TABLE Empregado


ADD Telefone VARCHAR(30)
ADD sexo CHAR(1) DEFAULT ‘F’;

39
Alteração de tabelas
• Excluir restrições de chave primária

ALTER TABLE Empregado


DROP PRIMARY KEY;

• Exclusão de uma chave estrangeira


• Pode ser feita somente se ela recebeu um nome quando foi
definida (através de CONSTRAINT):

ALTER TABLE Empregado


DROP FOREIGN KEY TrabalhaEm;
40
Alteração de tabelas
• Adicionar chave estrangeira:

ALTER TABLE Empregado


CONSTRAINT Supervisao
ADD FOREIGN KEY(Codesupervisor)
REFERENCES Empregado(codemp);

41
Integridade referencial
• Cuidados
• Quando colunas são excluídas ou alteradas
• Quando o valor do atributo da chave estrangeira é modificado
na tabela referenciada

• Ações disparadas quando ocorrem violações:

SET NULL
ON DELETE
CASCADE
ON UPDATE

42
Integridade referencial
• Exemplo, na tabela de Empregado
CREATE TABLE Empregado
( ...
FOREIGN KEY(Cod_Dept) REFERENCES Departamento(Dcod)
ON DELETE SET NULL
ON UPDATE CASCADE,
...
);
• Ou seja...
• Na remoção da linha que contém o valor da chave estrangeira,
colocar nulo à coluna (se a coluna admitir NULL)
• Na alteração do valor da chave estrangeira, alterar em cascata
as chaves que referenciam este valor

43
Exercício
• Altere as tabelas criadas anteriormente para :

Fornecedor (Fcod#, Fnome, Status, Ccod#, fone)


Cidade (Ccod#, Cnome, uf)
Peça (Pcod#, Pnome, Cor, Peso, Ccod#)
Projeto (PRcod#, Jnome, Ccod#)
Fornecimento (Fcod#, Pcod#, PRcod#,Quantidade)

• Observe que a tabela Instituição não existe mais.

44

Você também pode gostar