SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 1 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Capitulo 3 – Tabelas
Lição 1 – Criando tabelas (Creating tables)
Tabelas formam os blocos de construção das aplicações, definindo as estruturas dos dados que são
armazenados. Quando você está desenvolvendo as tabelas, sua tarefa é criar tabelas que possam
armazenar dados requeridos para os negócios da empresa, no mesmo tempo em que a quantidade de
disco e memória são usados; (Tables form the most granular building blocks of applications, defining the structure of the data that can be
stored. When designing tables, your task is to create the tables that can store the data required by your business applications, while at the same time
minimizing the amount of disk and memory being used)
Schemas (Esquemas)
Schema é um mecanismo para agrupar objetos dentro de um banco de dados, além fazer parte de uma
estrutura de segurança do SQL Server.
Você pode gerenciar cada banco de dados dentro de uma instancia separadamente em termos de
consumo de disco, transações e recursos de memória. Caso seu aplicativo precise ou você precise que o
seu aplicativo acesse vários banco de dados que não precisa estar em instancias separadas, então deve
combinar objetos em um único banco de dados e utilizar schemas para separar grupo de objetos.
A sintaxe mais simples para criar um esquema é:
CREATE SCHEMA <schema name > AUTHORIZATION <owner name>
- Um schema é uma coleção de objetos de um banco de dados que são de um dono (usuário único) e
formam um único namespace;
- Namespace é um agrupamento de objetos que não pode ter nomes duplicados;
- O comando CREATE SCHEMA pode criar schemas contendo tabelas e views;
USE AdventureWorks
GO
CREATE SCHEMA test AUTHORIZATION dbo
GO
Criando um schema
Obs: Pode-se haver tabelas com nomes iguais (objetos) em schemas diferentes;
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 2 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Tipos de dados (Data types)
Embora não seja referido como uma constraint, o tipo de dados de uma coluna é constraint mais
fundamental que você pode especificar para uma tabela. A escolha do tipo de dados restringe o
intervalo de valores possíveis, ao passo que define a quantidade máxima de espaço que será consumido
para a coluna dentro de uma linha;
A escolha do tipo de dados é a decisão de desempenho mais importante que você tomará para um
banco de dados. Você precisa selecionar um tipo que possa armazenar os dados necessários para a
empresa, mas o tipo de dados não deve consumir um único byte de armazenamento a mais do que o
necessário. Em milhares ou milhões de linhas de dados, 1 único byte pode fazer grande diferença de
desempenho. Cada byte desperdiçado também desperdiça seu bem mais precioso: memória no servidor,
pois os dados precisam passar pela memória antes que um aplicativo possa utilizá-lo;
Tipos de dados numéricos
Nove tipos de dados vêm com o SQL Server 2008 e eles são usados para armazenar números inteiros,
monetários e decimais.
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 3 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Tipo de dados Intervalo Armazenamento
bigint -2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807) 8 bytes
int -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647) 4 bytes
smallint -2^15 (-32.768) a 2^15-1 (32.767) 2 bytes
tinyint 0 a 255 1 byte
Referencia: http://msdn.microsoft.com/pt-br/library/ms187745.aspx
Nota: Os tipos de dados DECIMAL e NUMERIC são exatamente equivalentes. Os dois tipos de dados
ainda existem dentro do SQL Server para compatibilidade com versões anteriores; DECIMAL é ANSI
e NUMERIC é a compatibilidade; O separador de decimal é o símbolo ponto (.) e o de milhar é o
símbolo virgula (,), independente da configuração do Windows. Somente o separador de decimal é
armazenado no campo;
Mais informações em:
http://imasters.com.br/artigo/244/sql_server/tipos_de_dados_no_sql_server_-_parte_1/
http://msdn.microsoft.com/pt-br/library/ms187746.aspx
Os tipos de dados MONEY e SMALLMONEY são feitos especificamente para armazenar valores
monetários com um máximo de quatro casas decimais;
O tipo FLOAT recebe um parâmetro opcional do número de dígitos armazenados após a vírgula
decimal que é chamado mantissa. Se a mantissa é definida entre 1 e 24, então um tipo FLOAT
consome 4 bytes de armazenamento. Se a mantissa é definida entre 25 e 53, então um FLOAT consome
8 bytes de armazenamento;
Nota: Os tipos de dados FLOAT e REAL são classificados como valores numéricos aproximados ou
números em ponto flutuante. O valor armazenado dentro de uma coluna desses tipos dependendo do
processador.
Tipos de dados decimais
Os tipos de dados decimais tem 2 parametros – precisão e escala. A precisão indica o número total de
dígitos que podem ser armazenados à esquerda da vírgula decimal. A escala indica o número máximo à
direita da vírgula decimal ou valores entre -99999,999 e 99999,99;
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 4 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Exemplo:
USE AdventureWorks
GO
CREATE TABLE test.NUMERAIS
(
VALOR1 DECIMAL(4,2),
VALOR2 DECIMAL(5,2),
VALOR3 DECIMAL(4,3)
)
GO
-- inserção correta
INSERT INTO test.NUMERAIS (VALOR1, VALOR2, VALOR3) values (99.21, 999.22, 9.559);
-- simulando erro. O valor3 está incorreto, pois 3 dígitos sao destinados a decimais
INSERT INTO test.NUMERAIS (VALOR1, VALOR2, VALOR3) values (9.58, 99.22, 99.5);
Tipos de dados alfanuméricos
O SQL Server 2008 tem quatro tipos de dados para armazenar dados alfanuméricos (character), com a
escolha de qual usar dependendo de você ter valores de comprimento fixo ou variável e de querer
armazenar dados Unicode ou não Unicode.
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 5 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Exemplo:
USE AdventureWorks
GO
CREATE TABLE test.CARACTERES
(
NOME1 CHAR(02),
NOME2 VARCHAR(10),
NOME3 NCHAR(04),
NOME4 NVARCHAR(10)
)
GO
INSERT INTO test.CARACTERES (NOME1, NOME2, NOME3, NOME4) VALUES ('AA','AAAA','BB','BBBB');
INSERT INTO test.CARACTERES (NOME1, NOME2, NOME3, NOME4) VALUES ('ÁÃ','ÜÃÕÇ','ÁÃ','ÜÃÕÇ');
SELECT * FROM test.CARACTERES
DECLARE @nstring nchar(12)
SET @nstring = N'Ã'
SELECT UNICODE(@nstring), NCHAR(UNICODE(@nstring))
DECLARE @nstring nchar(12)
SET @nstring = (select top 1 substring(nome3,2,1) FROM test.CARACTERES order by nome3 asc)
SELECT UNICODE(@nstring), NCHAR(UNICODE(@nstring))
Tipos de data e hora
No SQL Server 2008, aumentou muito os tipos de dados para armazenar datas e horas.
Exemplo:
USE AdventureWorks
GO
CREATE TABLE test.DATAHORA
(
CAMPO1 SMALLDATETIME,
CAMPO2 DATETIME,
CAMPO3 DATETIME2,
CAMPO4 DATETIMEOFFSET,
CAMPO5 DATE,
CAMPO6 TIME
)
GO
-- INSERINDO SOMENTE UMA DATA EM UM CAMPO SMALLDATETIME
INSERT INTO test.DATAHORA(CAMPO1) VALUES ('01/11/2012')
GO
-- INSERINDO DATA E HORA EM UM CAMPO SMALLDATETIME (NAO GUARDA OS SEGUNDOS)
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 6 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
INSERT INTO test.DATAHORA(CAMPO1) VALUES ('01/11/2012 01:15:06.000')
GO
-- INSERINDO SOMENETE UMA DATA EM UM CAMPO DATETIME
INSERT INTO test.DATAHORA(CAMPO2) VALUES ('01/11/2012')
GO
-- INSERINDO DATA E HORA EM UM CAMPO DATETIME
INSERT INTO test.DATAHORA(CAMPO2) VALUES ('01/11/2012 01:15:06.125')
GO
-- INSERINDO SOMENTE UMA DATA EM UM CAMPO DATETIME2
INSERT INTO test.DATAHORA(CAMPO3) VALUES ('01/11/2012')
GO
-- INSERINDO DATA E HORA EM UM CAMPO DATETIME
INSERT INTO test.DATAHORA(CAMPO3) VALUES ('01/11/2012 01:15:06.125')
GO
-- INSERINDO DATA E HORA e FUSO EM UM CAMPO DATETIMEOFFSET
INSERT INTO test.DATAHORA(CAMPO4) VALUES ('01/11/2012 14:15:06.158 +3:30')
GO
INSERT INTO test.DATAHORA(CAMPO4) VALUES ('01/11/2012 20:30:02.141 -5:00')
GO
-- INSERINDO DATA EM UM CAMPO DO TIPO DATE
INSERT INTO test.DATAHORA(CAMPO5) VALUES ('04/15/2012')
GO
-- INSERINDO HORA EM UM CAMPO DO TIPO TIME
INSERT INTO test.DATAHORA(CAMPO6) VALUES ('06:59:09.961')
GO
-- VERIFICANDO RESULTADOS DA TABELA
SELECT * FROM test.DATAHORA
GO
-- Mais informações: http://msdn.microsoft.com/pt-br/library/bb630289.aspx
DATETIME E SMALLDATETIME armazenam data e hora em um único campo e existe em várias
edições anteriores do SQL Server. DATETIME2 oferece precisão melhor que DATETIME e
SMALLDATETIME. DATETIMEOFFSET permite armazenar um fuso horário para aplicativos que
precisam regionalizar data e horas.
Dados binários
São armazenados em um conjunto em quatro tipos de dados:
De modo analógico aos tipos de dados alfanuméricos de comprimento variável, você pode aplicar a
palavra-chave MAX no tipo de dados VARBINARY para permitir o armazenamento de até 2 GB de
dados, enquanto suporta todas as funções de programação disponíveis para manipular dados binários;
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 7 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Tipo de dados XML
O tipo de dados XML permite armazenar e manipular documentos XML (Extensible Markup
Language) de forma nativa. Ao armazenar documentos XML, você está limitando a um máximo de 2
GB, assim como a um máximo de 128 níveis dentro de um documento. Embora você possa armazenar
um documento XML em uma coluna alfanumérica, o tipo XML entende de forma nativa a estrutura de
dados XML e o significado das marcas XML dentro do documento. Voce pode aplicar validação
adicional na coluna XML, que restringe os documentos que podem ser armazenados com base em um
ou mais esquemas XML.
Os esquemas XML são armazenados dentro do SQL Server em uma estrutura chamada coleção de
esquemas (schema collection). As coleções podem conter um ou mais esquemas XML. Quando uma
coleção de esquemas é aplicada em uma coluna XML, os únicos documentos que podem ser
armazenados dentro da coluna XML devem primeiramente ser validados na coleção de esquemas XML
associada.
O comando a seguir cria uma coleção de esquemas XML:
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 8 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Além desses, o SQL Server 2008 possui os tipos de dados espaciais e tipos de dados HIERARCHID,
porém não serão vistos nesse momento;
Propriedades de coluna
Anulação
Indica se uma coluna permite ou não valores nulos. Caso não esteja explicito no comando de criação da
tabela em cada coluna, o SQL Server tem o padrão NULL (pode conter valores nulos). É aconselhável
que se especifique na criação dos objetos, pois a propriedade do banco ANSI_NULL_DEFAULT pode
ser modificada;
Exemplo:
USE master
GO
-- The code from this point on demonstrates that SET ANSI_NULL_DFLT_ON
-- has an effect when the 'ANSI null default' for the database is
false.
-- Set the 'ANSI null default' database option to false by executing
-- ALTER DATABASE.
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 9 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
ALTER DATABASE AdventureWorks SET ANSI_NULL_DEFAULT OFF;
GO
USE AdventureWorks;
GO
-- Create table t1.
CREATE TABLE t1 (a TINYINT) ;
GO
-- NULL INSERT should fail.
INSERT INTO t1 (a) VALUES (NULL);
GO
-- SET ANSI_NULL_DFLT_ON to ON and create table t2.
SET ANSI_NULL_DFLT_ON ON;
GO
CREATE TABLE t2 (a TINYINT);
GO
-- NULL insert should succeed.
INSERT INTO t2 (a) VALUES (NULL);
GO
-- SET ANSI_NULL_DFLT_ON to OFF and create table t3.
SET ANSI_NULL_DFLT_ON OFF;
GO
CREATE TABLE t3 (a TINYINT);
GO
-- NULL insert should fail.
INSERT INTO t3 (a) VALUES (NULL);
GO
Mais informações em: http://msdn.microsoft.com/pt-br/library/ms187375.aspx
COLLATE
Podemos especificar a propriedade COLLATE de um banco de dados para anular a sequencia de
collation da instância, a qual o SQL Server aplica então como sequencia padrão para os objetos dentro
do banco de dados. Assim também é possível anular a sequencia do banco para sobrepor a sequencia da
tabela inteira ou para uma coluna individual.
Especificando a opção COLLATE para uma coluna alfanumérica, você pode configurar um
comportamento específico para o idioma na coluna.
Exemplo:
CREATE TABLE test.COLECAO
(
CAMPO1 VARCHAR(30),
CAMPO2 VARCHAR(30) COLLATE Traditional_Spanish_ci_ai
)
GO
INSERT INTO test.COLECAO (CAMPO1, CAMPO2) VALUES ('Chiapas','Chiapas');
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 10 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
INSERT INTO test.COLECAO (CAMPO1, CAMPO2) VALUES ('Colima','Colima');
INSERT INTO test.COLECAO (CAMPO1, CAMPO2) VALUES ('Cinco Rios','Cinco Rios');
INSERT INTO test.COLECAO (CAMPO1, CAMPO2) VALUES ('California','California');
SELECT * FROM test.COLECAO
order by CAMPO1 asc
GO
SELECT * FROM test.COLECAO
order by CAMPO2 asc
GO
--Apply an typical collation
SELECT CAMPO1, CAMPO2 FROM test.COLECAO
ORDER BY CAMPO2
COLLATE Latin1_General_CS_AS_KS_WS ASC;
GO
-- Apply a Spanish collation
SELECT CAMPO1, CAMPO2 FROM test.COLECAO
ORDER BY CAMPO2
COLLATE Traditional_Spanish_ci_ai ASC;
GO
Mais informações em: http://msdn.microsoft.com/pt-br/library/ms190273.aspx
IDENTITY
São utilizadas em colunas do tipo inteiro (exceto float e real), para fornecer um valor automático
sequencial. Não se pode atualizar uma coluna do tipo identidade. Em uma tabela, só pode ter uma
coluna de identidade. É necessário também especificar um valor de propagação e um valor de
incremento a ser aplicado para cada linha inserida subsequentemente. Geralmente colunas de
identidade são únicas, mas não é item obrigatório. Embora o SQL Server forneça o próximo valor da
sequencia automaticamente, você pode inserir um valor em uma coluna de identidade explicitamente,
usando o comando SET IDENTITY_INSERT <nome da tabela> ON. Você também pode mudar o
próximo valor gerado modificando a propagação com o comando DBCC CHECKIDENT.
Exemplo
CREATE TABLE test.IDENTIDADE
(
CAMPO1 INT NOT NULL IDENTITY(1,1) primary key,
CAMPO2 VARCHAR(20)
)
GO
--Tentativa de insercao de um dado passando valor para a coluna IDENTITY
INSERT INTO test.IDENTIDADE (CAMPO1, CAMPO2) VALUES (1,'TESTE');
GO
--Inserindo um dado na tabela que contem identity
INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE');
GO
INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE2');
GO
INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE3');
GO
INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE4');
GO
--VERIFICANDO OS DADOS
SELECT * FROM test.IDENTIDADE
GO
--INSERINDO UM DADO EXPLICITAMENTE NA COLUNA IDENTITY
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 11 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
SET IDENTITY_INSERT test.IDENTIDADE ON
GO
--insercao de um dado passando valor para a coluna IDENTITY
INSERT INTO test.IDENTIDADE (CAMPO1, CAMPO2) VALUES (6,'TESTE6');
GO
--DESABILITANDO A INSERCAO MANUAL
SET IDENTITY_INSERT test.IDENTIDADE OFF
GO
--tentativa de insercao de um dado passando valor para a coluna IDENTITY
INSERT INTO test.IDENTIDADE (CAMPO1, CAMPO2) VALUES (7,'TESTE7');
GO
--Inserindo um dado na tabela que contem identity
INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE_A');
GO
INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE_B');
GO
INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE_C');
GO
INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE_D');
GO
--VERIFICANDO OS DADOS
SELECT * FROM test.IDENTIDADE
GO
--MUDANDO O PROXIMO VALOR PROPAGADO
DBCC CHECKIDENT ("test.IDENTIDADE", RESEED,20)
--inserindo dados
INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE_D');
GO
--VERIFICANDO OS DADOS
SELECT * FROM test.IDENTIDADE
GO
ROWGUIDCOL
Propriedade usada principalmente pela replicação por mesclagem (merge), para designar uma coluna
para identificar linhas exclusivamente nos banco de dados. É usada para garantir que exista apenas uma
coluna desse tipo e que ela tenha o tipo de dados UNIQUEIDENTIFIER;
Exemplo
-- CRIANDO TABELA COM A COLUNA DE IDENTIFICACAO UNICA
CREATE TABLE test.TABELA_COM_GUID
(
CODIGO uniqueidentifier ROWGUIDCOL,
NOME varchar(20)
)
GO
-- INSERINDO DADOS
INSERT INTO test.TABELA_COM_GUID (CODIGO,NOME) VALUES
(NEWID(),'TESTE1');
GO
INSERT INTO test.TABELA_COM_GUID (CODIGO,NOME) VALUES
(NEWID(),'TESTE2');
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 12 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
GO
INSERT INTO test.TABELA_COM_GUID (CODIGO,NOME) VALUES
(NEWID(),'TESTE3');
GO
INSERT INTO test.TABELA_COM_GUID (CODIGO,NOME) VALUES
(NEWID(),'TESTE4');
GO
-- VERIFICANDO DADOS
SELECT * FROM test.TABELA_COM_GUID
GO
Ao contrário do Identity, o GUID não gera um sequencial. Para que isso aconteça, na criação da tabela
é necessário utilizar o seguinte comando:
CREATE TABLE test.Globally_Unique_Data
(
guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
Employee_Name varchar(60)
CONSTRAINT Guid_PK PRIMARY KEY (guid)
)
go
-- INSERINDO DADOS
insert into test.Globally_Unique_Data (Employee_Name) values ('teste1');
GO
insert into test.Globally_Unique_Data (Employee_Name) values ('teste2');
GO
insert into test.Globally_Unique_Data (Employee_Name) values ('teste3');
GO
insert into test.Globally_Unique_Data (Employee_Name) values ('teste4');
GO
insert into test.Globally_Unique_Data (Employee_Name) values ('teste5');
GO
insert into test.Globally_Unique_Data (Employee_Name) values ('teste6');
GO
-- SELECIONANDO DADOS
SELECT * FROM test.Globally_Unique_Data
GO
Mais informações em: http://msdn.microsoft.com/pt-br/library/ms191131.aspx
FILESTREAM
Esse tipo de propriedade é aplicado a uma coluna do tipo VARBINARY(MAX), que os objetos são
referenciados a uma pasta do SO. Como o SQL Server controla essa pasta, quando é feito backup do
banco de dados, os arquivos dessa pasta também são feitos ao mesmo tempo.
Observação: Um filegroup designado para armazenamento de um FILESTREAM fica off-line e
inacessível dentro de um Database Snapshot. Além disso, você não pode implementar Database
Mirroring em um banco de dados contendo dados armazenamentos com FILESTREAM.
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 13 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
NOT FOR REPLICATION
É usada para uma coluna definida como IDENTITY. Caso você insira explicitamente um valor de uma
coluna IDENTITY, o SQL Server gera uma nova propagação automaticamente para a coluna. Se a
tabela estiver participando de replicação, você não vai querer gerar uma nova propagação para essa
coluna sempre que os dados forem sincronizados. Aplicando a propriedade NOT FOR REPLICATION
para a coluna de identidade quando o mecanismo de replicação estiver aplicando alterações;
Mais informações em:
http://msdn.microsoft.com/pt-br/library/ms186775.aspx
http://msdn.microsoft.com/pt-br/library/ms188997.aspx
http://msdn.microsoft.com/en-us/library/aa237102(v=sql.80).aspx
SPARSE
Projetada para otimizar o espaço de armazenamento de colunas com uma grande porcentagem de
valores NULL. Para ser aplicada, a coluna deve aceitar NULL. Quando um valor NULL é armazenado
em uma coluna designada SPARCE, nenhum espaço de armazenamento é consumido. Contudo, os
valores não NULL exigem 4 bytes de espaço de armazenamento atém do espaço normal consumido
pelo tipo de dados.
Você não pode aplicar a propriedade SPARCE em:
- Colunas com a propriedade ROWGUIDCOL ou IDENTITY;
- Tipos de dados TEXT, NTEXT, IMAGE, TIMESTAMP, GEOMETRY, GEOGRAPHY ou tipos
definidos pelo usuário;
- Um VARBINARY(MAX) com a propriedade FILESTREAM;
- Uma coluna calculada de uma coluna com uma regra padrão vinculado a ela;
- Colunas que fazem parte de um índice clusterizado ou de uma chave primária;
- Uma coluna dentro de uma instrução ALTER TABLE;
-- coluna sparsas
USE AdventureWorks
GO
--CREATE SCHEMA test AUTHORIZATION dbo
--GO
CREATE TABLE test.DocumentStore (
DocID int PRIMARY KEY,
Title varchar(200) NOT NULL,
ProductionSpecification varchar(20) SPARSE NULL,
ProductionLocation smallint SPARSE NULL,
MarketingSurveyGroup varchar(20) SPARSE NULL
)
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 14 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
GO
--inserindo dados na tabela
INSERT test.DocumentStore(DocID, Title, ProductionSpecification,
ProductionLocation)
VALUES (1, 'Tire Spec 1', 'AXZZ217', 27);
GO
INSERT test.DocumentStore(DocID, Title, MarketingSurveyGroup)
VALUES (2, 'Survey 2142', 'Men 25 - 35');
GO
-- selecionando todas as colunas
SELECT DocID, Title, ProductionSpecification, ProductionLocation,
MarketingSurveyGroup
FROM test.DocumentStore ;
--especificando a seleção
SELECT DocID, Title, ProductionSpecification, ProductionLocation
FROM test.DocumentStore
WHERE ProductionSpecification IS NOT NULL ;
Referencia: http://msdn.microsoft.com/pt-br/library/cc280604.aspx
Colunas Calculadas
Permitem adicionar em uma tabela colunas quem em vez de serem preenchidas com dados, são
calculadas com base em outras colunas da linha. Quando essa coluna é criada, somente a definição do
cálculo é armazenada. Quando for utilizada um comando DML (insert, update, delete), o valor será
calculado no momento da execução. Se a coluna calculada é PERSISTED, o SQL Server armazena o
resultado do cálculo na linha e atualiza o valor sempre que os dados dos quais os cálculos depende são
alterados.
-- criacao de campos calculados
use AdventureWorks
go
CREATE SCHEMA test AUTHORIZATION dbo
GO
create table test.CAMPOSCALCULADOS (
ID INT NOT NULL IDENTITY(1,1),
ITEM INT NOT NULL,
QUANTIDADE INT,
VALOR MONEY,
DESCONTO MONEY,
IMPOSTO MONEY,
FRETE MONEY,
TOTALGERAL AS (QUANTIDADE * VALOR) - DESCONTO + IMPOSTO + FRETE,
CONSTRAINT PK_CAMPOSCALCULADOS PRIMARY KEY(ID)
)
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 15 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
GO
INSERT INTO test.CAMPOSCALCULADOS (ITEM, QUANTIDADE, VALOR, DESCONTO, IMPOSTO,
FRETE)
VALUES (1,10,1.25,2,5,2),
(2,20,4.10,1,15,5),
(3,40,3.55,10,20,10)
GO
SELECT * FROM test.CAMPOSCALCULADOS
GO
Compactação de linha e página
A compactação em nível de linha permite compactar linhas individuais para encaixar mais linhas em
uma página, o que por sua vez reduz a quantidade de espaço de armazenamento para a tabela, pois não
é preciso armazenar tantas páginas em um disco. (O limite de compactação é de no máximo 8.060
bytes em uma única linha)
A compactação de página reduz somente a quantidade de armazenamento em disco necessária, pois a
página inteira é compactada. Quando o SQL Server aplica compactação de página em um heap (uma
tabela sem índice clusterizado), ele compacta apenas as páginas que existem atualmente na tabela. O
SQL Server compactará dados novos adicionados em um heap somente se você usar as instruções
BULK INSERT ou INSERT INTO...WITH (TABLLOCK). As páginas adicionadas na tabela usando
BCP ou uma instrução INSERT que não especifique uma sugestão de bloqueio de tabela não são
compactadas. Para compactar páginas recentemente adicionadas e não compactadas você precisa
executar o comando ALTER TABLE...REBUILD com a opção de compactação PAGE.
A configuração de compactação para uma tabela não passa para índices não-clusterizados ou views
indexadas criadas na tabela. (É necessário especificar para cada uma delas);
Os tipos VARCHAR(MAX), NVARCHAR(MAX) e VARBINARY(MAX) (incluindo também com a
opção FILESTREAM) armazenam dados em estruturas especializadas fora da linha, que não podem ser
compactados;
No SQL Server 2008, uma tabela pode ter 1.024 colunas, porém utilizando os recursos de colunas
esparsas, você pode criar uma tabela com até 30.000 colunas. As tabelas que excedem as 1.024
colunas usando uma definição de configuração de coluna são referidas como tabelas amplas, mas os
dados armazenados não podem ainda passar de 8.019 bytes, a não ser que você tenha as colunas do tipo
VARCHAR(MAX), NVARCHAR(MAX) ou VARBINARY(MAX) definida na tabela;
Além de tabelas persistentes em disco, temos também tabelas temporárias que são armazenadas no
banco de dados tempdb, podendo ser locais ou globais. Uma tabela temporária local é criada da mesma
forma que uma tabela comum, porém com o símbolo # antes do nome da tabela (somente visível dentro
da conexão que a criou) e uma global tem o símbolo ## antes do nome da tabela (visível a todas as
conexões da instancia);
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 16 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Criando tabelas
No código abaixo, segue criação de um schema e duas tabelas, conforme exemplos vistos:
USE AdventureWorks
GO
CREATE SCHEMA test AUTHORIZATION dbo
GO
CREATE TABLE test.Customer
(
CustomerID INT IDENTITY(1,1),
LastName VARCHAR(50) NOT NULL,
FirstName VARCHAR(50) NOT NULL,
CreditLine MONEY SPARSE NULL,
CreationDate DATE NOT NULL
)
GO
CREATE TABLE test.OrderHeader
(
OrderID INT IDENTITY(1,1),
CustomerID INT NOT NULL,
OrderDate DATE NOT NULL,
OrderTime TIME NOT NULL,
SubTotal MONEY NOT NULL,
ShippingAmt MONEY NOT NULL,
OrderTotal AS (SubTotal + ShippingAmt)
)
WITH (DATA_COMPRESSION = ROW)
GO
Exemplos de criação de tabelas com colunas SPARSE, colunas calculadas e
compressão em linha
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 17 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Lição 2 – Implementando constraints
As constraints são utilizadas para impor regras de negócios e consistência de dados;
Primary Keys (Chaves Primárias)
Chaves primárias definem a coluna ou colunas que identificam exclusivamente cada linha da tabela,
sendo que as mesmas precisam ser NOT NULL. Só pode haver uma constraint de chave primária por
tabela; Quando a chave primária é criada, você também especifica se ela é CLUSTERED ou
NONCLUSTERED (agrupada ou não-agrupada). Uma chave CLUSTERED, o SQL SERVER
armazena a tabela em ordem de classificação de acordo com a chave primária;
Dica: A opção padrão de uma chave primária é CLUSTERED. Quando uma chave primária
CLUSTERED é criada em uma tabela que é compactada, a opção de compactação é aplicada na chave
primária quando a tabela é reconstruída;
-- criacao de chaves primarias
use AdventureWorks
go
CREATE SCHEMA test AUTHORIZATION dbo
GO
--exemplo1, sem nomeação da chave primária, em nivel coluna
CREATE TABLE test.Funcionarios
(
ID int NOT NULL PRIMARY KEY,
Nome varchar(30),
Nascimento date,
Salario money
)
go
--exemplo2, com nomeação da chave primário, em nivel tabela
--e utilizando um identity de 1 em 1 para auto-incremento
CREATE TABLE test.Clientes
(
ID bigint NOT NULL identity(1,1),
Tipo_Pessoa char(1),
Nome_Razao varchar(40),
Cidade varchar(20),
UF char(02),
Constraint pk_Clientes PRIMARY KEY(ID)
)
GO
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 18 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
--exemplo3, com nomeacao da PK, e com mais de 1 campo sendo a PK
CREATE TABLE test.ItemNF
(
Nr_NF int not null,
Item_NF smallint not null,
Cod_Prod int,
Quantidade int,
Valor_unit money,
Constraint pk_ItemNF Primary Key (NR_NF, Item_NF)
)
Go
--exemplo4: alterando uma tabela já existente e adicionando uma chave primária
--criando a tabela sem PK
create table test.ALUNO
(
RA CHAR(7),
Nome varchar(40),
Cod_Curso int
)
go
--alterando o RA para not null
alter table test.ALUNO alter column RA CHAR(07) NOT NULL
GO
--alterando para ser PK
alter table test.ALUNO add constraint PK_Aluno PRIMARY KEY(RA)
GO
Referência: http://msdn.microsoft.com/pt-br/library/ms190273.aspx
Foreign Keys (Chaves Estrangeiras)
São utilizadas para integridade referencial entre tabelas dentro do banco de dados. Criando chaves
estrangeiras, você pode garantir que tabelas relacionadas não contenham linhas órfãs inválidas. As
chaves estrangeiras criam a relação pai-filho entre duas tabelas e garantem que um valor que não exista
na tabela pai não possa ser gravado na tabela filho;
Para criar uma chave estrangeira entre duas tabelas, a tabela pai deve ter uma chave primária, a qual é
usada para se referir à tabela filho e os tipos de dados entre as colunas das devidas tabelas devem ser
compatíveis. Se você tiver uma chave primária de várias colunas, todas as colunas da chave primária
pai devem existir na tabela filho para definir uma chave estrangeira;
--criacao de foreign key's
--exmeplo1: criando PK e FK na criacao da tabela, com nomeacao
--criacao da tabela PAI
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 19 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
CREATE TABLE test.Pedidos
(
Cod_Pedido int not null,
Data_Pedido date,
Cod_Cli int,
Constraint pk_Pedidos Primary key(Cod_Pedido)
)
go
--Criacao da tabela filho, relacionando a FK
CREATE TABLE test.ItensPedido
(
Cod_Pedido int not null,
Item_Pedido int not null,
Cod_Prod int,
Quantidade int,
Valor money,
Constraint pk_ItensPedido Primary Key(Cod_Pedido,Item_Pedido),
Constraint fk_ItensPedido_Cod_Pedido Foreign Key(Cod_Pedido)
references test.Pedidos(Cod_Pedido)
)
go
--exmeplo2: Criando uma FK sem nomeacao
--excluindo tabelas
DROP TABLE test.ItensPedido
GO
DROP TABLE test.Pedidos
GO
--criacao da tabela PAI
CREATE TABLE test.Pedidos
(
Cod_Pedido int not null,
Data_Pedido date,
Cod_Cli int,
Constraint pk_Pedidos Primary key(Cod_Pedido)
)
go
--Criacao da tabela filho, relacionando a FK, sem nomeacao
CREATE TABLE test.ItensPedido
(
Cod_Pedido int not null,
Item_Pedido int not null Foreign Key(Cod_Pedido)
references test.Pedidos(Cod_Pedido),
Cod_Prod int,
Quantidade int,
Valor money,
Constraint pk_ItensPedido Primary Key(Cod_Pedido,Item_Pedido),
)
go
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 20 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
--exmeplo3: Criando uma FK depois da tabela estar pronta
--excluindo tabelas
DROP TABLE test.ItensPedido
GO
DROP TABLE test.Pedidos
GO
--criacao da tabela PAI
CREATE TABLE test.Pedidos
(
Cod_Pedido int not null,
Data_Pedido date,
Cod_Cli int,
Constraint pk_Pedidos Primary key(Cod_Pedido)
)
go
--Criacao da tabela filho sem relacao com a FK
CREATE TABLE test.ItensPedido
(
Cod_Pedido int not null,
Item_Pedido int not null,
Cod_Prod int,
Quantidade int,
Valor money,
Constraint pk_ItensPedido Primary Key(Cod_Pedido,Item_Pedido),
)
go
--criando a relação pai/filh
alter table test.ItensPedido add Foreign Key(Cod_Pedido)
references test.Pedidos(Cod_Pedido)
go
Unique Constraint (Constraint exclusivas)
Permitem definir uma coluna ou colunas que os valores devem ser exclusivos dentro da tabela. Por
exemplo, um CPF ou CNPJ dentro da tabela de clientes ou de fornecedores não poderiam se repetir. O
que diferencia essa constraint de uma chave primária, é que a constraint UNIQUE permite ter um valor
NULL na tabela;
--criacao de campos UNIQUE
--criando a tabela, com constraint UNIQUE sem nomeacao
create table test.empresas
(
Cod_Empresa int not null,
CNPJ char(18) unique,
Razao_Social varchar(30)
)
go
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 21 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
--criando tabela, com nomeacao da constraint UNIQUE
drop table test.empresas
go
create table test.empresas
(
Cod_Empresa int not null,
CNPJ char(18),
Razao_Social varchar(30),
constraint UK_Empresas_CNPJ UNIQUE (CNPJ)
)
go
--insercao de dados para teste
insert into test.empresas values(1,'00.000.000/0001-00','empresa 1')
go
--irá charmar o erro:
insert into test.empresas values(2,'00.000.000/0001-00','empresa 1')
go
Default Constraint (Constraint padrão)
Especifica um valor padrão que é gravado na coluna caso o aplicativo não fornece nenhum valor. As
constraints default se aplicam apenas as colunas adicionadas com uma instrução INSERT, BPC ou
BULK INSERT. Pode ser definidas em colunas NULL ou NOT NULL. Caso seja explicito a passagem
do valor NULL, o valor NULL terá prioridade sobre o valor padrão.
-- exemplo de DEFAULT
-- Criando a tabela com nomeacao da constraint DEFAULT
CREATE TABLE test.Cidades
(
Cod_Cidade int not null,
Desc_Cidade varchar(30),
UF char(02) constraint def_UF default 'SP'
)
go
-- teste de insercao de dados
insert into test.Cidades (Cod_Cidade,Desc_Cidade,UF)
values (1,'Balneario Camboriu','SC')
go
insert into test.Cidades (Cod_Cidade,Desc_Cidade)
values (2,'Jundiai')
go
--selecionando os dados
select *
from test.Cidades
Referencia:
http://blog.sqlauthority.com/2008/09/08/sql-server-%E2%80%93-2008-creating-
primary-key-foreign-key-and-default-constraint/
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 22 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Check Constraint (Constraints de verificação)
Limitam o intervalo de valores dentro de uma coluna. As constraints checks podem ser criadas em
nível de coluna e não podem referenciar nenhuma outra coluna na tabela. Quando criadas em nível de
tabela podem referenciar qualquer coluna dentro da tabela, mas não podem referencias colunas de
outras tabelas; O retorno de validação é verdadeiro ou falso; As constraints check podem utilizar
comparações simples como: >, <, >=, <=, <> e =, ou mais complexas como AND, OR ou NOT. Podem
utilizar caracteres curinga % e _, e executar rotinas de correspondências de padrão (mascaras como
CPF, CNPJ, FONE, etc)
-- check constraint
create table test.Estoque
(
ID int not null,
Data_Mov date constraint DF_DATA_MOV default getdate(),
Tipo_Mov char(01) constraint CK_TIPO_MOV check(Tipo_Mov='E' or Tipo_Mov='S'),
Estoque_Min int constraint CK_ESTOQUE_MIN check(Estoque_Min > 0),
Estoque_Max int,
Cod_prod int,
Valor_Prod money constraint CK_VALOR_PROD check(Valor_Prod > 0 and Valor_Prod <
10000),
constraint CK_ESTOQUE_MAX check(Estoque_Max <= Estoque_Min + 50),
)
go
--simulando entradas na tabela estoque
--erro no tipo_mov
insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod)
values (1,'A',10,1,100)
go
--consertando o erro tipo_mov
insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod)
values (1,'E',10,1,100)
go
insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod)
values (2,'S',20,2,100)
go
-- erro no estoque minimo
insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod)
values (3,'E',0,10,1000)
go
--consertando o erro do estoque minimo
insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod)
values (3,'E',1,10,1000)
go
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 23 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
--erro no valor do produto
insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod)
values (4,'E',20,100,0)
go
insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod)
values (4,'E',20,100,10000)
go
--consertando o erro do valor do produto
insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod)
values (4,'E',20,100,999)
go
--erro no valor do ESTOQUE MAXIMO
select * from test.Estoque
insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Estoque_Max, Cod_prod,
Valor_Prod)
values (5,'E',10,100,100,10)
go
--consertando o valor do estoque maximo
insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Estoque_Max, Cod_prod,
Valor_Prod)
values (5,'E',10,10,50,10)
go
Mais informações sobre criação de tabelas: http://msdn.microsoft.com/pt-br/library/ms174979.aspx
Projetando um banco de dados: http://msdn.microsoft.com/pt-br/library/ms189317.aspx
METODOLOGIA DE AULA TEÓRICA
DISCIPLINA: BANCO DE DADOS I
TÍTULO DA AULA: CRIACAO DE TABELAS
Rev. 3
13.11.2019
Pág. 24 de 24
CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br
Exercícios:
Cenário:
A Empresa FRUTAS DA HORTA NA HORA Ltda resolveu implantar um sistema de pedidos on-line
para seus clientes jurídicos da região que estejam localizados até 200 KM de raio da sua sede. O DBA
atual, KAVITA GURU disse que não irá conseguir desenvolver esse serviço, por conta das
manutenções, já existem nos sistemas atuais e para isso, contratou você para desenvolver e criar a base
de dados do novo sistema baseado no cenário abaixo:
A empresa precisará de uma tabela de CLIENTES contendo código de identificação (auto-numeração),
login (único), senha (no mínimo de 6 caracteres), razão social (obrigatório), cnpj (único sem repetição),
endereço, bairro, cidade (a maioria da cidade de São Paulo sendo o padrão), uf (a maioria do estado de
SP, sendo o padrão), cep, telefones de contato, email’s de contato. Além disso, precisará cadastrar seus
PRODUTOS (frutas), com os dados de código de identificação, descrição do produto (obrigatório),
estoque mínimo (sempre maior do que 10), estoque máximo (nunca menor que estoque mínimo e
nunca maior que estoque mínimo + 100), valor de custo (maior ou igual a 1), valor de venda (valor de
custo + 25%), unidade de medida de venda (podendo ser KG, DUZIA, CAIXA, etc), grupo que o
produto pertence (consultando a tabela de grupos contendo código de identificação e descrição do
grupo).
Para que o sistema funcione, também será necessário as tabelas de PEDIDOS e ITENS_DO_PEDIDO
contendo, código de identificação do pedido (auto-numeração), status do pedido (podendo ter o valor
de “A” ativo ou “C” Cancelado e por padrão ser “A” ativo) , data do pedido (precisa ser a mesma da
data do sistema), cliente que solicitou, identificação dos produtos pedidos , valor de venda dos
produtos pedidos, quantidade dos produtos, unidades dos produtos para venda, sub-totais de cada
produto pedido (quantidade x valor do produto), valor total do pedido. A quantidade de produtos
pedidos deverá ser maior que 1(para cada produto) e o valor dos produtos deverá ser consultado da
tabela de produtos do valor de venda.
A FRUTAS DA HORTA NA HORA Ltda comprou o SQL Server 2008 Enterprise e novos hardwares
para suportar o novo sistema, sem limites de usuários para que você desenvolva esse trabalho.
No cenário acima, será necessário:
- Normalizar as tabelas até a 3FN;
- Se necessário, crie outros campos para melhor definir as tabelas;
- Criar o banco de dados da empresa, já tendo em mente que a tabela de PEDIDOS e ITENS DO
PEDIDO serão as mais críticas em relação a armazenamento de dados;
- Criar as tabelas, com seus devidos tipos de dados, relacionamentos e constraints (envolvendo os
checks, defaults, etc);
- Verificar se há regras de negócio que o banco de dados não consegue suprir;

Mais conteúdo relacionado

Mais procurados

Aula de SQL - Básico
Aula de SQL - BásicoAula de SQL - Básico
Aula de SQL - BásicoAirton Zanon
 
Sql - Introdução ao mysql
Sql - Introdução ao mysqlSql - Introdução ao mysql
Sql - Introdução ao mysqlArley Rodrigues
 
Banco de Dados II - Unimep/Pronatec - Aula 6
Banco de Dados II - Unimep/Pronatec - Aula 6Banco de Dados II - Unimep/Pronatec - Aula 6
Banco de Dados II - Unimep/Pronatec - Aula 6André Phillip Bertoletti
 
Conceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados MysqlConceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados Mysqlbinhoetec
 
Banco de Dados II - Unimep/Pronatec - Aula 5
Banco de Dados II - Unimep/Pronatec - Aula 5Banco de Dados II - Unimep/Pronatec - Aula 5
Banco de Dados II - Unimep/Pronatec - Aula 5André Phillip Bertoletti
 
Banco de Dados II - Unimep/Pronatec - Aula 3
Banco de Dados II - Unimep/Pronatec - Aula 3Banco de Dados II - Unimep/Pronatec - Aula 3
Banco de Dados II - Unimep/Pronatec - Aula 3André Phillip Bertoletti
 
Banco de dados comandos sql
Banco de dados   comandos sqlBanco de dados   comandos sql
Banco de dados comandos sqlNilson Augustini
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLDaniel Brandão
 
Banco de Dados II Aula 04 - MODELAGEM DE DADOS (Generalização e Especialização)
Banco de Dados II Aula 04 - MODELAGEM DE DADOS (Generalização e Especialização)Banco de Dados II Aula 04 - MODELAGEM DE DADOS (Generalização e Especialização)
Banco de Dados II Aula 04 - MODELAGEM DE DADOS (Generalização e Especialização)Leinylson Fontinele
 

Mais procurados (20)

Apostila modelagem de banco de dados
Apostila modelagem de banco de dadosApostila modelagem de banco de dados
Apostila modelagem de banco de dados
 
Aula de SQL - Básico
Aula de SQL - BásicoAula de SQL - Básico
Aula de SQL - Básico
 
Sql - Introdução ao mysql
Sql - Introdução ao mysqlSql - Introdução ao mysql
Sql - Introdução ao mysql
 
Introdução ao SQL
Introdução ao SQLIntrodução ao SQL
Introdução ao SQL
 
Banco de dados aula 2
Banco de dados  aula 2Banco de dados  aula 2
Banco de dados aula 2
 
Banco de Dados II - Unimep/Pronatec - Aula 6
Banco de Dados II - Unimep/Pronatec - Aula 6Banco de Dados II - Unimep/Pronatec - Aula 6
Banco de Dados II - Unimep/Pronatec - Aula 6
 
Conceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados MysqlConceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados Mysql
 
ArcGIS Nivel Basico
ArcGIS Nivel BasicoArcGIS Nivel Basico
ArcGIS Nivel Basico
 
Banco de Dados II - Unimep/Pronatec - Aula 5
Banco de Dados II - Unimep/Pronatec - Aula 5Banco de Dados II - Unimep/Pronatec - Aula 5
Banco de Dados II - Unimep/Pronatec - Aula 5
 
Aula2 - SQL
Aula2 - SQLAula2 - SQL
Aula2 - SQL
 
Banco de Dados II - Unimep/Pronatec - Aula 3
Banco de Dados II - Unimep/Pronatec - Aula 3Banco de Dados II - Unimep/Pronatec - Aula 3
Banco de Dados II - Unimep/Pronatec - Aula 3
 
Apostila access 2010
Apostila access 2010Apostila access 2010
Apostila access 2010
 
Banco de dados comandos sql
Banco de dados   comandos sqlBanco de dados   comandos sql
Banco de dados comandos sql
 
Linguagem SQL
Linguagem SQLLinguagem SQL
Linguagem SQL
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
Sql - introdução
Sql -  introduçãoSql -  introdução
Sql - introdução
 
Aula10 sql-ddl
Aula10 sql-ddlAula10 sql-ddl
Aula10 sql-ddl
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQL
 
Banco de Dados II Aula 04 - MODELAGEM DE DADOS (Generalização e Especialização)
Banco de Dados II Aula 04 - MODELAGEM DE DADOS (Generalização e Especialização)Banco de Dados II Aula 04 - MODELAGEM DE DADOS (Generalização e Especialização)
Banco de Dados II Aula 04 - MODELAGEM DE DADOS (Generalização e Especialização)
 

Semelhante a BD I - Aula 15 B - Criacao de tabelas

Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docxmodulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docxAnaAlmeida462833
 
Alta disponibilidade com bancos de dados relacionais no Azure
Alta disponibilidade com bancos de dados relacionais no AzureAlta disponibilidade com bancos de dados relacionais no Azure
Alta disponibilidade com bancos de dados relacionais no AzureRubens Guimarães - MTAC MVP
 
Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)guestcc491
 
Apostila Access 2000.pdf
Apostila Access 2000.pdfApostila Access 2000.pdf
Apostila Access 2000.pdfssuser382e50
 
6338 111121071604-phpapp01
6338 111121071604-phpapp016338 111121071604-phpapp01
6338 111121071604-phpapp01Gilson Figueredo
 
Sistemas de Base de Dados
Sistemas de Base de DadosSistemas de Base de Dados
Sistemas de Base de DadosMariana Hiyori
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Osny Pereira Filho
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdfQuitriaSilva550
 
Apresentação de microsoft access 2007 luis aguiar
Apresentação de microsoft access 2007   luis aguiarApresentação de microsoft access 2007   luis aguiar
Apresentação de microsoft access 2007 luis aguiarLuis Aguiar
 
Net Coders Ladies - Introdução a Banco de Dados
Net Coders Ladies - Introdução a Banco de Dados Net Coders Ladies - Introdução a Banco de Dados
Net Coders Ladies - Introdução a Banco de Dados Aline Lavorato
 
Php curso de php com my sql
Php   curso de php com my sqlPhp   curso de php com my sql
Php curso de php com my sqlrobinhoct
 
Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06thomasdacosta
 
ODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosCaio Lima
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 

Semelhante a BD I - Aula 15 B - Criacao de tabelas (20)

Apostila aed
Apostila aedApostila aed
Apostila aed
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docxmodulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
 
Alta disponibilidade com bancos de dados relacionais no Azure
Alta disponibilidade com bancos de dados relacionais no AzureAlta disponibilidade com bancos de dados relacionais no Azure
Alta disponibilidade com bancos de dados relacionais no Azure
 
Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)
 
Apostila Access 2000.pdf
Apostila Access 2000.pdfApostila Access 2000.pdf
Apostila Access 2000.pdf
 
6338 111121071604-phpapp01
6338 111121071604-phpapp016338 111121071604-phpapp01
6338 111121071604-phpapp01
 
Bd ii material
Bd ii   materialBd ii   material
Bd ii material
 
Sistemas de Base de Dados
Sistemas de Base de DadosSistemas de Base de Dados
Sistemas de Base de Dados
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
 
Apresentação de microsoft access 2007 luis aguiar
Apresentação de microsoft access 2007   luis aguiarApresentação de microsoft access 2007   luis aguiar
Apresentação de microsoft access 2007 luis aguiar
 
Net Coders Ladies - Introdução a Banco de Dados
Net Coders Ladies - Introdução a Banco de Dados Net Coders Ladies - Introdução a Banco de Dados
Net Coders Ladies - Introdução a Banco de Dados
 
Php curso de php com my sql
Php   curso de php com my sqlPhp   curso de php com my sql
Php curso de php com my sql
 
Apostila Oracle
Apostila OracleApostila Oracle
Apostila Oracle
 
Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06
 
ODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de Dados
 
Banco de dados nas nuvens - aula 3
Banco de dados nas nuvens - aula 3Banco de dados nas nuvens - aula 3
Banco de dados nas nuvens - aula 3
 
Cacti
CactiCacti
Cacti
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 

Mais de Rodrigo Kiyoshi Saito

Algoritmos - Aula 16 B - Arquivos - Exercicios
Algoritmos - Aula 16 B - Arquivos - ExerciciosAlgoritmos - Aula 16 B - Arquivos - Exercicios
Algoritmos - Aula 16 B - Arquivos - ExerciciosRodrigo Kiyoshi Saito
 
Algoritmos - Aula 16 - Registros - Exercicio Enunciado
Algoritmos - Aula 16 - Registros - Exercicio EnunciadoAlgoritmos - Aula 16 - Registros - Exercicio Enunciado
Algoritmos - Aula 16 - Registros - Exercicio EnunciadoRodrigo Kiyoshi Saito
 
BD I - Aula 15 C - Manutencao de tabelas
BD I - Aula 15 C - Manutencao de tabelasBD I - Aula 15 C - Manutencao de tabelas
BD I - Aula 15 C - Manutencao de tabelasRodrigo Kiyoshi Saito
 
BD I - Aula 14 B - Exercicios - Enunciado
BD I - Aula 14 B - Exercicios - EnunciadoBD I - Aula 14 B - Exercicios - Enunciado
BD I - Aula 14 B - Exercicios - EnunciadoRodrigo Kiyoshi Saito
 
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub SelectsBD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub SelectsRodrigo Kiyoshi Saito
 
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis - Exercicios Enunc...
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis - Exercicios Enunc...Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis - Exercicios Enunc...
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis - Exercicios Enunc...Rodrigo Kiyoshi Saito
 
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis
Algoritmos - Aula 15 - Modularizacao e Escopo de VariaveisAlgoritmos - Aula 15 - Modularizacao e Escopo de Variaveis
Algoritmos - Aula 15 - Modularizacao e Escopo de VariaveisRodrigo Kiyoshi Saito
 
BD I - Aula 13 B - Agrupando Dados - Parte 04 - Exercicios Enunciado
BD I - Aula 13 B - Agrupando Dados  - Parte 04 - Exercicios EnunciadoBD I - Aula 13 B - Agrupando Dados  - Parte 04 - Exercicios Enunciado
BD I - Aula 13 B - Agrupando Dados - Parte 04 - Exercicios EnunciadoRodrigo Kiyoshi Saito
 
BD I - Aula 13 B - Agrupando Dados - Parte 04
BD I - Aula 13 B - Agrupando Dados  - Parte 04BD I - Aula 13 B - Agrupando Dados  - Parte 04
BD I - Aula 13 B - Agrupando Dados - Parte 04Rodrigo Kiyoshi Saito
 
BD I - Aula 13 B - Agrupando dados - Parte 04 - Exercicios Enunciado
BD I - Aula 13 B - Agrupando dados  - Parte 04 - Exercicios EnunciadoBD I - Aula 13 B - Agrupando dados  - Parte 04 - Exercicios Enunciado
BD I - Aula 13 B - Agrupando dados - Parte 04 - Exercicios EnunciadoRodrigo Kiyoshi Saito
 
BD I - Aula 13 A - Funcoes de string datas numeros e conversao - parte 03
BD I - Aula 13 A - Funcoes de string datas numeros e conversao - parte 03BD I - Aula 13 A - Funcoes de string datas numeros e conversao - parte 03
BD I - Aula 13 A - Funcoes de string datas numeros e conversao - parte 03Rodrigo Kiyoshi Saito
 
Algoritmos - Aula 13 C - Matrizes em C
Algoritmos - Aula 13 C - Matrizes em CAlgoritmos - Aula 13 C - Matrizes em C
Algoritmos - Aula 13 C - Matrizes em CRodrigo Kiyoshi Saito
 
Algoritmos - Aula 13 B - Vetores em C
Algoritmos - Aula 13 B - Vetores em CAlgoritmos - Aula 13 B - Vetores em C
Algoritmos - Aula 13 B - Vetores em CRodrigo Kiyoshi Saito
 
Algoritmos - Aula 12 B - Traducao Ling C - Condicoes
Algoritmos - Aula 12 B - Traducao Ling C - CondicoesAlgoritmos - Aula 12 B - Traducao Ling C - Condicoes
Algoritmos - Aula 12 B - Traducao Ling C - CondicoesRodrigo Kiyoshi Saito
 
Algoritmos - Aula 12 A - Traducao ling C - Ent Proc Saida
Algoritmos - Aula 12 A - Traducao ling C - Ent Proc SaidaAlgoritmos - Aula 12 A - Traducao ling C - Ent Proc Saida
Algoritmos - Aula 12 A - Traducao ling C - Ent Proc SaidaRodrigo Kiyoshi Saito
 

Mais de Rodrigo Kiyoshi Saito (20)

Algoritmos - Aula 16 B - Arquivos
Algoritmos - Aula 16 B - ArquivosAlgoritmos - Aula 16 B - Arquivos
Algoritmos - Aula 16 B - Arquivos
 
Algoritmos - Aula 16 B - Arquivos - Exercicios
Algoritmos - Aula 16 B - Arquivos - ExerciciosAlgoritmos - Aula 16 B - Arquivos - Exercicios
Algoritmos - Aula 16 B - Arquivos - Exercicios
 
Algoritmos - Aula 16 - Registros - Exercicio Enunciado
Algoritmos - Aula 16 - Registros - Exercicio EnunciadoAlgoritmos - Aula 16 - Registros - Exercicio Enunciado
Algoritmos - Aula 16 - Registros - Exercicio Enunciado
 
Algoritmos - Aula 16 - Registros
Algoritmos - Aula 16 - RegistrosAlgoritmos - Aula 16 - Registros
Algoritmos - Aula 16 - Registros
 
BD I - Aula 15 C - Manutencao de tabelas
BD I - Aula 15 C - Manutencao de tabelasBD I - Aula 15 C - Manutencao de tabelas
BD I - Aula 15 C - Manutencao de tabelas
 
BD I - Aula 15 A - Comandos DML
BD I - Aula 15 A - Comandos DMLBD I - Aula 15 A - Comandos DML
BD I - Aula 15 A - Comandos DML
 
BD I - Aula 14 B - Exercicios - Enunciado
BD I - Aula 14 B - Exercicios - EnunciadoBD I - Aula 14 B - Exercicios - Enunciado
BD I - Aula 14 B - Exercicios - Enunciado
 
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub SelectsBD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
 
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis - Exercicios Enunc...
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis - Exercicios Enunc...Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis - Exercicios Enunc...
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis - Exercicios Enunc...
 
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis
Algoritmos - Aula 15 - Modularizacao e Escopo de VariaveisAlgoritmos - Aula 15 - Modularizacao e Escopo de Variaveis
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis
 
BD I - Aula 13 B - Agrupando Dados - Parte 04 - Exercicios Enunciado
BD I - Aula 13 B - Agrupando Dados  - Parte 04 - Exercicios EnunciadoBD I - Aula 13 B - Agrupando Dados  - Parte 04 - Exercicios Enunciado
BD I - Aula 13 B - Agrupando Dados - Parte 04 - Exercicios Enunciado
 
BD I - Aula 13 B - Agrupando Dados - Parte 04
BD I - Aula 13 B - Agrupando Dados  - Parte 04BD I - Aula 13 B - Agrupando Dados  - Parte 04
BD I - Aula 13 B - Agrupando Dados - Parte 04
 
BD I - Aula 13 B - Agrupando dados - Parte 04 - Exercicios Enunciado
BD I - Aula 13 B - Agrupando dados  - Parte 04 - Exercicios EnunciadoBD I - Aula 13 B - Agrupando dados  - Parte 04 - Exercicios Enunciado
BD I - Aula 13 B - Agrupando dados - Parte 04 - Exercicios Enunciado
 
BD I - Aula 13 A - Funcoes de string datas numeros e conversao - parte 03
BD I - Aula 13 A - Funcoes de string datas numeros e conversao - parte 03BD I - Aula 13 A - Funcoes de string datas numeros e conversao - parte 03
BD I - Aula 13 A - Funcoes de string datas numeros e conversao - parte 03
 
Algoritmos - Aula 13 C - Matrizes em C
Algoritmos - Aula 13 C - Matrizes em CAlgoritmos - Aula 13 C - Matrizes em C
Algoritmos - Aula 13 C - Matrizes em C
 
Algoritmos - Aula 13 B - Vetores em C
Algoritmos - Aula 13 B - Vetores em CAlgoritmos - Aula 13 B - Vetores em C
Algoritmos - Aula 13 B - Vetores em C
 
Algoritmos - Aula 13 A - Lacos em C
Algoritmos - Aula 13 A - Lacos em CAlgoritmos - Aula 13 A - Lacos em C
Algoritmos - Aula 13 A - Lacos em C
 
Algoritmos - Aula 12 B - Traducao Ling C - Condicoes
Algoritmos - Aula 12 B - Traducao Ling C - CondicoesAlgoritmos - Aula 12 B - Traducao Ling C - Condicoes
Algoritmos - Aula 12 B - Traducao Ling C - Condicoes
 
Algoritmos - Aula 12 A - Traducao ling C - Ent Proc Saida
Algoritmos - Aula 12 A - Traducao ling C - Ent Proc SaidaAlgoritmos - Aula 12 A - Traducao ling C - Ent Proc Saida
Algoritmos - Aula 12 A - Traducao ling C - Ent Proc Saida
 
BD I - Aula 10 A - Introducao a SQL
BD I - Aula 10 A - Introducao a SQLBD I - Aula 10 A - Introducao a SQL
BD I - Aula 10 A - Introducao a SQL
 

Último

Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficasprofcamilamanz
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelGilber Rubim Rangel
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreElianeElika
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxTainTorres4
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
Revista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfRevista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfMárcio Azevedo
 

Último (20)

Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficas
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim Rangel
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
Revista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfRevista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdf
 

BD I - Aula 15 B - Criacao de tabelas

  • 1. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 1 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Capitulo 3 – Tabelas Lição 1 – Criando tabelas (Creating tables) Tabelas formam os blocos de construção das aplicações, definindo as estruturas dos dados que são armazenados. Quando você está desenvolvendo as tabelas, sua tarefa é criar tabelas que possam armazenar dados requeridos para os negócios da empresa, no mesmo tempo em que a quantidade de disco e memória são usados; (Tables form the most granular building blocks of applications, defining the structure of the data that can be stored. When designing tables, your task is to create the tables that can store the data required by your business applications, while at the same time minimizing the amount of disk and memory being used) Schemas (Esquemas) Schema é um mecanismo para agrupar objetos dentro de um banco de dados, além fazer parte de uma estrutura de segurança do SQL Server. Você pode gerenciar cada banco de dados dentro de uma instancia separadamente em termos de consumo de disco, transações e recursos de memória. Caso seu aplicativo precise ou você precise que o seu aplicativo acesse vários banco de dados que não precisa estar em instancias separadas, então deve combinar objetos em um único banco de dados e utilizar schemas para separar grupo de objetos. A sintaxe mais simples para criar um esquema é: CREATE SCHEMA <schema name > AUTHORIZATION <owner name> - Um schema é uma coleção de objetos de um banco de dados que são de um dono (usuário único) e formam um único namespace; - Namespace é um agrupamento de objetos que não pode ter nomes duplicados; - O comando CREATE SCHEMA pode criar schemas contendo tabelas e views; USE AdventureWorks GO CREATE SCHEMA test AUTHORIZATION dbo GO Criando um schema Obs: Pode-se haver tabelas com nomes iguais (objetos) em schemas diferentes;
  • 2. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 2 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Tipos de dados (Data types) Embora não seja referido como uma constraint, o tipo de dados de uma coluna é constraint mais fundamental que você pode especificar para uma tabela. A escolha do tipo de dados restringe o intervalo de valores possíveis, ao passo que define a quantidade máxima de espaço que será consumido para a coluna dentro de uma linha; A escolha do tipo de dados é a decisão de desempenho mais importante que você tomará para um banco de dados. Você precisa selecionar um tipo que possa armazenar os dados necessários para a empresa, mas o tipo de dados não deve consumir um único byte de armazenamento a mais do que o necessário. Em milhares ou milhões de linhas de dados, 1 único byte pode fazer grande diferença de desempenho. Cada byte desperdiçado também desperdiça seu bem mais precioso: memória no servidor, pois os dados precisam passar pela memória antes que um aplicativo possa utilizá-lo; Tipos de dados numéricos Nove tipos de dados vêm com o SQL Server 2008 e eles são usados para armazenar números inteiros, monetários e decimais.
  • 3. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 3 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Tipo de dados Intervalo Armazenamento bigint -2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807) 8 bytes int -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647) 4 bytes smallint -2^15 (-32.768) a 2^15-1 (32.767) 2 bytes tinyint 0 a 255 1 byte Referencia: http://msdn.microsoft.com/pt-br/library/ms187745.aspx Nota: Os tipos de dados DECIMAL e NUMERIC são exatamente equivalentes. Os dois tipos de dados ainda existem dentro do SQL Server para compatibilidade com versões anteriores; DECIMAL é ANSI e NUMERIC é a compatibilidade; O separador de decimal é o símbolo ponto (.) e o de milhar é o símbolo virgula (,), independente da configuração do Windows. Somente o separador de decimal é armazenado no campo; Mais informações em: http://imasters.com.br/artigo/244/sql_server/tipos_de_dados_no_sql_server_-_parte_1/ http://msdn.microsoft.com/pt-br/library/ms187746.aspx Os tipos de dados MONEY e SMALLMONEY são feitos especificamente para armazenar valores monetários com um máximo de quatro casas decimais; O tipo FLOAT recebe um parâmetro opcional do número de dígitos armazenados após a vírgula decimal que é chamado mantissa. Se a mantissa é definida entre 1 e 24, então um tipo FLOAT consome 4 bytes de armazenamento. Se a mantissa é definida entre 25 e 53, então um FLOAT consome 8 bytes de armazenamento; Nota: Os tipos de dados FLOAT e REAL são classificados como valores numéricos aproximados ou números em ponto flutuante. O valor armazenado dentro de uma coluna desses tipos dependendo do processador. Tipos de dados decimais Os tipos de dados decimais tem 2 parametros – precisão e escala. A precisão indica o número total de dígitos que podem ser armazenados à esquerda da vírgula decimal. A escala indica o número máximo à direita da vírgula decimal ou valores entre -99999,999 e 99999,99;
  • 4. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 4 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Exemplo: USE AdventureWorks GO CREATE TABLE test.NUMERAIS ( VALOR1 DECIMAL(4,2), VALOR2 DECIMAL(5,2), VALOR3 DECIMAL(4,3) ) GO -- inserção correta INSERT INTO test.NUMERAIS (VALOR1, VALOR2, VALOR3) values (99.21, 999.22, 9.559); -- simulando erro. O valor3 está incorreto, pois 3 dígitos sao destinados a decimais INSERT INTO test.NUMERAIS (VALOR1, VALOR2, VALOR3) values (9.58, 99.22, 99.5); Tipos de dados alfanuméricos O SQL Server 2008 tem quatro tipos de dados para armazenar dados alfanuméricos (character), com a escolha de qual usar dependendo de você ter valores de comprimento fixo ou variável e de querer armazenar dados Unicode ou não Unicode.
  • 5. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 5 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Exemplo: USE AdventureWorks GO CREATE TABLE test.CARACTERES ( NOME1 CHAR(02), NOME2 VARCHAR(10), NOME3 NCHAR(04), NOME4 NVARCHAR(10) ) GO INSERT INTO test.CARACTERES (NOME1, NOME2, NOME3, NOME4) VALUES ('AA','AAAA','BB','BBBB'); INSERT INTO test.CARACTERES (NOME1, NOME2, NOME3, NOME4) VALUES ('ÁÃ','ÜÃÕÇ','ÁÃ','ÜÃÕÇ'); SELECT * FROM test.CARACTERES DECLARE @nstring nchar(12) SET @nstring = N'Ã' SELECT UNICODE(@nstring), NCHAR(UNICODE(@nstring)) DECLARE @nstring nchar(12) SET @nstring = (select top 1 substring(nome3,2,1) FROM test.CARACTERES order by nome3 asc) SELECT UNICODE(@nstring), NCHAR(UNICODE(@nstring)) Tipos de data e hora No SQL Server 2008, aumentou muito os tipos de dados para armazenar datas e horas. Exemplo: USE AdventureWorks GO CREATE TABLE test.DATAHORA ( CAMPO1 SMALLDATETIME, CAMPO2 DATETIME, CAMPO3 DATETIME2, CAMPO4 DATETIMEOFFSET, CAMPO5 DATE, CAMPO6 TIME ) GO -- INSERINDO SOMENTE UMA DATA EM UM CAMPO SMALLDATETIME INSERT INTO test.DATAHORA(CAMPO1) VALUES ('01/11/2012') GO -- INSERINDO DATA E HORA EM UM CAMPO SMALLDATETIME (NAO GUARDA OS SEGUNDOS)
  • 6. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 6 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br INSERT INTO test.DATAHORA(CAMPO1) VALUES ('01/11/2012 01:15:06.000') GO -- INSERINDO SOMENETE UMA DATA EM UM CAMPO DATETIME INSERT INTO test.DATAHORA(CAMPO2) VALUES ('01/11/2012') GO -- INSERINDO DATA E HORA EM UM CAMPO DATETIME INSERT INTO test.DATAHORA(CAMPO2) VALUES ('01/11/2012 01:15:06.125') GO -- INSERINDO SOMENTE UMA DATA EM UM CAMPO DATETIME2 INSERT INTO test.DATAHORA(CAMPO3) VALUES ('01/11/2012') GO -- INSERINDO DATA E HORA EM UM CAMPO DATETIME INSERT INTO test.DATAHORA(CAMPO3) VALUES ('01/11/2012 01:15:06.125') GO -- INSERINDO DATA E HORA e FUSO EM UM CAMPO DATETIMEOFFSET INSERT INTO test.DATAHORA(CAMPO4) VALUES ('01/11/2012 14:15:06.158 +3:30') GO INSERT INTO test.DATAHORA(CAMPO4) VALUES ('01/11/2012 20:30:02.141 -5:00') GO -- INSERINDO DATA EM UM CAMPO DO TIPO DATE INSERT INTO test.DATAHORA(CAMPO5) VALUES ('04/15/2012') GO -- INSERINDO HORA EM UM CAMPO DO TIPO TIME INSERT INTO test.DATAHORA(CAMPO6) VALUES ('06:59:09.961') GO -- VERIFICANDO RESULTADOS DA TABELA SELECT * FROM test.DATAHORA GO -- Mais informações: http://msdn.microsoft.com/pt-br/library/bb630289.aspx DATETIME E SMALLDATETIME armazenam data e hora em um único campo e existe em várias edições anteriores do SQL Server. DATETIME2 oferece precisão melhor que DATETIME e SMALLDATETIME. DATETIMEOFFSET permite armazenar um fuso horário para aplicativos que precisam regionalizar data e horas. Dados binários São armazenados em um conjunto em quatro tipos de dados: De modo analógico aos tipos de dados alfanuméricos de comprimento variável, você pode aplicar a palavra-chave MAX no tipo de dados VARBINARY para permitir o armazenamento de até 2 GB de dados, enquanto suporta todas as funções de programação disponíveis para manipular dados binários;
  • 7. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 7 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Tipo de dados XML O tipo de dados XML permite armazenar e manipular documentos XML (Extensible Markup Language) de forma nativa. Ao armazenar documentos XML, você está limitando a um máximo de 2 GB, assim como a um máximo de 128 níveis dentro de um documento. Embora você possa armazenar um documento XML em uma coluna alfanumérica, o tipo XML entende de forma nativa a estrutura de dados XML e o significado das marcas XML dentro do documento. Voce pode aplicar validação adicional na coluna XML, que restringe os documentos que podem ser armazenados com base em um ou mais esquemas XML. Os esquemas XML são armazenados dentro do SQL Server em uma estrutura chamada coleção de esquemas (schema collection). As coleções podem conter um ou mais esquemas XML. Quando uma coleção de esquemas é aplicada em uma coluna XML, os únicos documentos que podem ser armazenados dentro da coluna XML devem primeiramente ser validados na coleção de esquemas XML associada. O comando a seguir cria uma coleção de esquemas XML:
  • 8. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 8 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Além desses, o SQL Server 2008 possui os tipos de dados espaciais e tipos de dados HIERARCHID, porém não serão vistos nesse momento; Propriedades de coluna Anulação Indica se uma coluna permite ou não valores nulos. Caso não esteja explicito no comando de criação da tabela em cada coluna, o SQL Server tem o padrão NULL (pode conter valores nulos). É aconselhável que se especifique na criação dos objetos, pois a propriedade do banco ANSI_NULL_DEFAULT pode ser modificada; Exemplo: USE master GO -- The code from this point on demonstrates that SET ANSI_NULL_DFLT_ON -- has an effect when the 'ANSI null default' for the database is false. -- Set the 'ANSI null default' database option to false by executing -- ALTER DATABASE.
  • 9. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 9 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br ALTER DATABASE AdventureWorks SET ANSI_NULL_DEFAULT OFF; GO USE AdventureWorks; GO -- Create table t1. CREATE TABLE t1 (a TINYINT) ; GO -- NULL INSERT should fail. INSERT INTO t1 (a) VALUES (NULL); GO -- SET ANSI_NULL_DFLT_ON to ON and create table t2. SET ANSI_NULL_DFLT_ON ON; GO CREATE TABLE t2 (a TINYINT); GO -- NULL insert should succeed. INSERT INTO t2 (a) VALUES (NULL); GO -- SET ANSI_NULL_DFLT_ON to OFF and create table t3. SET ANSI_NULL_DFLT_ON OFF; GO CREATE TABLE t3 (a TINYINT); GO -- NULL insert should fail. INSERT INTO t3 (a) VALUES (NULL); GO Mais informações em: http://msdn.microsoft.com/pt-br/library/ms187375.aspx COLLATE Podemos especificar a propriedade COLLATE de um banco de dados para anular a sequencia de collation da instância, a qual o SQL Server aplica então como sequencia padrão para os objetos dentro do banco de dados. Assim também é possível anular a sequencia do banco para sobrepor a sequencia da tabela inteira ou para uma coluna individual. Especificando a opção COLLATE para uma coluna alfanumérica, você pode configurar um comportamento específico para o idioma na coluna. Exemplo: CREATE TABLE test.COLECAO ( CAMPO1 VARCHAR(30), CAMPO2 VARCHAR(30) COLLATE Traditional_Spanish_ci_ai ) GO INSERT INTO test.COLECAO (CAMPO1, CAMPO2) VALUES ('Chiapas','Chiapas');
  • 10. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 10 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br INSERT INTO test.COLECAO (CAMPO1, CAMPO2) VALUES ('Colima','Colima'); INSERT INTO test.COLECAO (CAMPO1, CAMPO2) VALUES ('Cinco Rios','Cinco Rios'); INSERT INTO test.COLECAO (CAMPO1, CAMPO2) VALUES ('California','California'); SELECT * FROM test.COLECAO order by CAMPO1 asc GO SELECT * FROM test.COLECAO order by CAMPO2 asc GO --Apply an typical collation SELECT CAMPO1, CAMPO2 FROM test.COLECAO ORDER BY CAMPO2 COLLATE Latin1_General_CS_AS_KS_WS ASC; GO -- Apply a Spanish collation SELECT CAMPO1, CAMPO2 FROM test.COLECAO ORDER BY CAMPO2 COLLATE Traditional_Spanish_ci_ai ASC; GO Mais informações em: http://msdn.microsoft.com/pt-br/library/ms190273.aspx IDENTITY São utilizadas em colunas do tipo inteiro (exceto float e real), para fornecer um valor automático sequencial. Não se pode atualizar uma coluna do tipo identidade. Em uma tabela, só pode ter uma coluna de identidade. É necessário também especificar um valor de propagação e um valor de incremento a ser aplicado para cada linha inserida subsequentemente. Geralmente colunas de identidade são únicas, mas não é item obrigatório. Embora o SQL Server forneça o próximo valor da sequencia automaticamente, você pode inserir um valor em uma coluna de identidade explicitamente, usando o comando SET IDENTITY_INSERT <nome da tabela> ON. Você também pode mudar o próximo valor gerado modificando a propagação com o comando DBCC CHECKIDENT. Exemplo CREATE TABLE test.IDENTIDADE ( CAMPO1 INT NOT NULL IDENTITY(1,1) primary key, CAMPO2 VARCHAR(20) ) GO --Tentativa de insercao de um dado passando valor para a coluna IDENTITY INSERT INTO test.IDENTIDADE (CAMPO1, CAMPO2) VALUES (1,'TESTE'); GO --Inserindo um dado na tabela que contem identity INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE'); GO INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE2'); GO INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE3'); GO INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE4'); GO --VERIFICANDO OS DADOS SELECT * FROM test.IDENTIDADE GO --INSERINDO UM DADO EXPLICITAMENTE NA COLUNA IDENTITY
  • 11. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 11 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br SET IDENTITY_INSERT test.IDENTIDADE ON GO --insercao de um dado passando valor para a coluna IDENTITY INSERT INTO test.IDENTIDADE (CAMPO1, CAMPO2) VALUES (6,'TESTE6'); GO --DESABILITANDO A INSERCAO MANUAL SET IDENTITY_INSERT test.IDENTIDADE OFF GO --tentativa de insercao de um dado passando valor para a coluna IDENTITY INSERT INTO test.IDENTIDADE (CAMPO1, CAMPO2) VALUES (7,'TESTE7'); GO --Inserindo um dado na tabela que contem identity INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE_A'); GO INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE_B'); GO INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE_C'); GO INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE_D'); GO --VERIFICANDO OS DADOS SELECT * FROM test.IDENTIDADE GO --MUDANDO O PROXIMO VALOR PROPAGADO DBCC CHECKIDENT ("test.IDENTIDADE", RESEED,20) --inserindo dados INSERT INTO test.IDENTIDADE (CAMPO2) VALUES ('TESTE_D'); GO --VERIFICANDO OS DADOS SELECT * FROM test.IDENTIDADE GO ROWGUIDCOL Propriedade usada principalmente pela replicação por mesclagem (merge), para designar uma coluna para identificar linhas exclusivamente nos banco de dados. É usada para garantir que exista apenas uma coluna desse tipo e que ela tenha o tipo de dados UNIQUEIDENTIFIER; Exemplo -- CRIANDO TABELA COM A COLUNA DE IDENTIFICACAO UNICA CREATE TABLE test.TABELA_COM_GUID ( CODIGO uniqueidentifier ROWGUIDCOL, NOME varchar(20) ) GO -- INSERINDO DADOS INSERT INTO test.TABELA_COM_GUID (CODIGO,NOME) VALUES (NEWID(),'TESTE1'); GO INSERT INTO test.TABELA_COM_GUID (CODIGO,NOME) VALUES (NEWID(),'TESTE2');
  • 12. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 12 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br GO INSERT INTO test.TABELA_COM_GUID (CODIGO,NOME) VALUES (NEWID(),'TESTE3'); GO INSERT INTO test.TABELA_COM_GUID (CODIGO,NOME) VALUES (NEWID(),'TESTE4'); GO -- VERIFICANDO DADOS SELECT * FROM test.TABELA_COM_GUID GO Ao contrário do Identity, o GUID não gera um sequencial. Para que isso aconteça, na criação da tabela é necessário utilizar o seguinte comando: CREATE TABLE test.Globally_Unique_Data ( guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, Employee_Name varchar(60) CONSTRAINT Guid_PK PRIMARY KEY (guid) ) go -- INSERINDO DADOS insert into test.Globally_Unique_Data (Employee_Name) values ('teste1'); GO insert into test.Globally_Unique_Data (Employee_Name) values ('teste2'); GO insert into test.Globally_Unique_Data (Employee_Name) values ('teste3'); GO insert into test.Globally_Unique_Data (Employee_Name) values ('teste4'); GO insert into test.Globally_Unique_Data (Employee_Name) values ('teste5'); GO insert into test.Globally_Unique_Data (Employee_Name) values ('teste6'); GO -- SELECIONANDO DADOS SELECT * FROM test.Globally_Unique_Data GO Mais informações em: http://msdn.microsoft.com/pt-br/library/ms191131.aspx FILESTREAM Esse tipo de propriedade é aplicado a uma coluna do tipo VARBINARY(MAX), que os objetos são referenciados a uma pasta do SO. Como o SQL Server controla essa pasta, quando é feito backup do banco de dados, os arquivos dessa pasta também são feitos ao mesmo tempo. Observação: Um filegroup designado para armazenamento de um FILESTREAM fica off-line e inacessível dentro de um Database Snapshot. Além disso, você não pode implementar Database Mirroring em um banco de dados contendo dados armazenamentos com FILESTREAM.
  • 13. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 13 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br NOT FOR REPLICATION É usada para uma coluna definida como IDENTITY. Caso você insira explicitamente um valor de uma coluna IDENTITY, o SQL Server gera uma nova propagação automaticamente para a coluna. Se a tabela estiver participando de replicação, você não vai querer gerar uma nova propagação para essa coluna sempre que os dados forem sincronizados. Aplicando a propriedade NOT FOR REPLICATION para a coluna de identidade quando o mecanismo de replicação estiver aplicando alterações; Mais informações em: http://msdn.microsoft.com/pt-br/library/ms186775.aspx http://msdn.microsoft.com/pt-br/library/ms188997.aspx http://msdn.microsoft.com/en-us/library/aa237102(v=sql.80).aspx SPARSE Projetada para otimizar o espaço de armazenamento de colunas com uma grande porcentagem de valores NULL. Para ser aplicada, a coluna deve aceitar NULL. Quando um valor NULL é armazenado em uma coluna designada SPARCE, nenhum espaço de armazenamento é consumido. Contudo, os valores não NULL exigem 4 bytes de espaço de armazenamento atém do espaço normal consumido pelo tipo de dados. Você não pode aplicar a propriedade SPARCE em: - Colunas com a propriedade ROWGUIDCOL ou IDENTITY; - Tipos de dados TEXT, NTEXT, IMAGE, TIMESTAMP, GEOMETRY, GEOGRAPHY ou tipos definidos pelo usuário; - Um VARBINARY(MAX) com a propriedade FILESTREAM; - Uma coluna calculada de uma coluna com uma regra padrão vinculado a ela; - Colunas que fazem parte de um índice clusterizado ou de uma chave primária; - Uma coluna dentro de uma instrução ALTER TABLE; -- coluna sparsas USE AdventureWorks GO --CREATE SCHEMA test AUTHORIZATION dbo --GO CREATE TABLE test.DocumentStore ( DocID int PRIMARY KEY, Title varchar(200) NOT NULL, ProductionSpecification varchar(20) SPARSE NULL, ProductionLocation smallint SPARSE NULL, MarketingSurveyGroup varchar(20) SPARSE NULL )
  • 14. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 14 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br GO --inserindo dados na tabela INSERT test.DocumentStore(DocID, Title, ProductionSpecification, ProductionLocation) VALUES (1, 'Tire Spec 1', 'AXZZ217', 27); GO INSERT test.DocumentStore(DocID, Title, MarketingSurveyGroup) VALUES (2, 'Survey 2142', 'Men 25 - 35'); GO -- selecionando todas as colunas SELECT DocID, Title, ProductionSpecification, ProductionLocation, MarketingSurveyGroup FROM test.DocumentStore ; --especificando a seleção SELECT DocID, Title, ProductionSpecification, ProductionLocation FROM test.DocumentStore WHERE ProductionSpecification IS NOT NULL ; Referencia: http://msdn.microsoft.com/pt-br/library/cc280604.aspx Colunas Calculadas Permitem adicionar em uma tabela colunas quem em vez de serem preenchidas com dados, são calculadas com base em outras colunas da linha. Quando essa coluna é criada, somente a definição do cálculo é armazenada. Quando for utilizada um comando DML (insert, update, delete), o valor será calculado no momento da execução. Se a coluna calculada é PERSISTED, o SQL Server armazena o resultado do cálculo na linha e atualiza o valor sempre que os dados dos quais os cálculos depende são alterados. -- criacao de campos calculados use AdventureWorks go CREATE SCHEMA test AUTHORIZATION dbo GO create table test.CAMPOSCALCULADOS ( ID INT NOT NULL IDENTITY(1,1), ITEM INT NOT NULL, QUANTIDADE INT, VALOR MONEY, DESCONTO MONEY, IMPOSTO MONEY, FRETE MONEY, TOTALGERAL AS (QUANTIDADE * VALOR) - DESCONTO + IMPOSTO + FRETE, CONSTRAINT PK_CAMPOSCALCULADOS PRIMARY KEY(ID) )
  • 15. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 15 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br GO INSERT INTO test.CAMPOSCALCULADOS (ITEM, QUANTIDADE, VALOR, DESCONTO, IMPOSTO, FRETE) VALUES (1,10,1.25,2,5,2), (2,20,4.10,1,15,5), (3,40,3.55,10,20,10) GO SELECT * FROM test.CAMPOSCALCULADOS GO Compactação de linha e página A compactação em nível de linha permite compactar linhas individuais para encaixar mais linhas em uma página, o que por sua vez reduz a quantidade de espaço de armazenamento para a tabela, pois não é preciso armazenar tantas páginas em um disco. (O limite de compactação é de no máximo 8.060 bytes em uma única linha) A compactação de página reduz somente a quantidade de armazenamento em disco necessária, pois a página inteira é compactada. Quando o SQL Server aplica compactação de página em um heap (uma tabela sem índice clusterizado), ele compacta apenas as páginas que existem atualmente na tabela. O SQL Server compactará dados novos adicionados em um heap somente se você usar as instruções BULK INSERT ou INSERT INTO...WITH (TABLLOCK). As páginas adicionadas na tabela usando BCP ou uma instrução INSERT que não especifique uma sugestão de bloqueio de tabela não são compactadas. Para compactar páginas recentemente adicionadas e não compactadas você precisa executar o comando ALTER TABLE...REBUILD com a opção de compactação PAGE. A configuração de compactação para uma tabela não passa para índices não-clusterizados ou views indexadas criadas na tabela. (É necessário especificar para cada uma delas); Os tipos VARCHAR(MAX), NVARCHAR(MAX) e VARBINARY(MAX) (incluindo também com a opção FILESTREAM) armazenam dados em estruturas especializadas fora da linha, que não podem ser compactados; No SQL Server 2008, uma tabela pode ter 1.024 colunas, porém utilizando os recursos de colunas esparsas, você pode criar uma tabela com até 30.000 colunas. As tabelas que excedem as 1.024 colunas usando uma definição de configuração de coluna são referidas como tabelas amplas, mas os dados armazenados não podem ainda passar de 8.019 bytes, a não ser que você tenha as colunas do tipo VARCHAR(MAX), NVARCHAR(MAX) ou VARBINARY(MAX) definida na tabela; Além de tabelas persistentes em disco, temos também tabelas temporárias que são armazenadas no banco de dados tempdb, podendo ser locais ou globais. Uma tabela temporária local é criada da mesma forma que uma tabela comum, porém com o símbolo # antes do nome da tabela (somente visível dentro da conexão que a criou) e uma global tem o símbolo ## antes do nome da tabela (visível a todas as conexões da instancia);
  • 16. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 16 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Criando tabelas No código abaixo, segue criação de um schema e duas tabelas, conforme exemplos vistos: USE AdventureWorks GO CREATE SCHEMA test AUTHORIZATION dbo GO CREATE TABLE test.Customer ( CustomerID INT IDENTITY(1,1), LastName VARCHAR(50) NOT NULL, FirstName VARCHAR(50) NOT NULL, CreditLine MONEY SPARSE NULL, CreationDate DATE NOT NULL ) GO CREATE TABLE test.OrderHeader ( OrderID INT IDENTITY(1,1), CustomerID INT NOT NULL, OrderDate DATE NOT NULL, OrderTime TIME NOT NULL, SubTotal MONEY NOT NULL, ShippingAmt MONEY NOT NULL, OrderTotal AS (SubTotal + ShippingAmt) ) WITH (DATA_COMPRESSION = ROW) GO Exemplos de criação de tabelas com colunas SPARSE, colunas calculadas e compressão em linha
  • 17. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 17 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Lição 2 – Implementando constraints As constraints são utilizadas para impor regras de negócios e consistência de dados; Primary Keys (Chaves Primárias) Chaves primárias definem a coluna ou colunas que identificam exclusivamente cada linha da tabela, sendo que as mesmas precisam ser NOT NULL. Só pode haver uma constraint de chave primária por tabela; Quando a chave primária é criada, você também especifica se ela é CLUSTERED ou NONCLUSTERED (agrupada ou não-agrupada). Uma chave CLUSTERED, o SQL SERVER armazena a tabela em ordem de classificação de acordo com a chave primária; Dica: A opção padrão de uma chave primária é CLUSTERED. Quando uma chave primária CLUSTERED é criada em uma tabela que é compactada, a opção de compactação é aplicada na chave primária quando a tabela é reconstruída; -- criacao de chaves primarias use AdventureWorks go CREATE SCHEMA test AUTHORIZATION dbo GO --exemplo1, sem nomeação da chave primária, em nivel coluna CREATE TABLE test.Funcionarios ( ID int NOT NULL PRIMARY KEY, Nome varchar(30), Nascimento date, Salario money ) go --exemplo2, com nomeação da chave primário, em nivel tabela --e utilizando um identity de 1 em 1 para auto-incremento CREATE TABLE test.Clientes ( ID bigint NOT NULL identity(1,1), Tipo_Pessoa char(1), Nome_Razao varchar(40), Cidade varchar(20), UF char(02), Constraint pk_Clientes PRIMARY KEY(ID) ) GO
  • 18. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 18 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br --exemplo3, com nomeacao da PK, e com mais de 1 campo sendo a PK CREATE TABLE test.ItemNF ( Nr_NF int not null, Item_NF smallint not null, Cod_Prod int, Quantidade int, Valor_unit money, Constraint pk_ItemNF Primary Key (NR_NF, Item_NF) ) Go --exemplo4: alterando uma tabela já existente e adicionando uma chave primária --criando a tabela sem PK create table test.ALUNO ( RA CHAR(7), Nome varchar(40), Cod_Curso int ) go --alterando o RA para not null alter table test.ALUNO alter column RA CHAR(07) NOT NULL GO --alterando para ser PK alter table test.ALUNO add constraint PK_Aluno PRIMARY KEY(RA) GO Referência: http://msdn.microsoft.com/pt-br/library/ms190273.aspx Foreign Keys (Chaves Estrangeiras) São utilizadas para integridade referencial entre tabelas dentro do banco de dados. Criando chaves estrangeiras, você pode garantir que tabelas relacionadas não contenham linhas órfãs inválidas. As chaves estrangeiras criam a relação pai-filho entre duas tabelas e garantem que um valor que não exista na tabela pai não possa ser gravado na tabela filho; Para criar uma chave estrangeira entre duas tabelas, a tabela pai deve ter uma chave primária, a qual é usada para se referir à tabela filho e os tipos de dados entre as colunas das devidas tabelas devem ser compatíveis. Se você tiver uma chave primária de várias colunas, todas as colunas da chave primária pai devem existir na tabela filho para definir uma chave estrangeira; --criacao de foreign key's --exmeplo1: criando PK e FK na criacao da tabela, com nomeacao --criacao da tabela PAI
  • 19. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 19 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br CREATE TABLE test.Pedidos ( Cod_Pedido int not null, Data_Pedido date, Cod_Cli int, Constraint pk_Pedidos Primary key(Cod_Pedido) ) go --Criacao da tabela filho, relacionando a FK CREATE TABLE test.ItensPedido ( Cod_Pedido int not null, Item_Pedido int not null, Cod_Prod int, Quantidade int, Valor money, Constraint pk_ItensPedido Primary Key(Cod_Pedido,Item_Pedido), Constraint fk_ItensPedido_Cod_Pedido Foreign Key(Cod_Pedido) references test.Pedidos(Cod_Pedido) ) go --exmeplo2: Criando uma FK sem nomeacao --excluindo tabelas DROP TABLE test.ItensPedido GO DROP TABLE test.Pedidos GO --criacao da tabela PAI CREATE TABLE test.Pedidos ( Cod_Pedido int not null, Data_Pedido date, Cod_Cli int, Constraint pk_Pedidos Primary key(Cod_Pedido) ) go --Criacao da tabela filho, relacionando a FK, sem nomeacao CREATE TABLE test.ItensPedido ( Cod_Pedido int not null, Item_Pedido int not null Foreign Key(Cod_Pedido) references test.Pedidos(Cod_Pedido), Cod_Prod int, Quantidade int, Valor money, Constraint pk_ItensPedido Primary Key(Cod_Pedido,Item_Pedido), ) go
  • 20. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 20 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br --exmeplo3: Criando uma FK depois da tabela estar pronta --excluindo tabelas DROP TABLE test.ItensPedido GO DROP TABLE test.Pedidos GO --criacao da tabela PAI CREATE TABLE test.Pedidos ( Cod_Pedido int not null, Data_Pedido date, Cod_Cli int, Constraint pk_Pedidos Primary key(Cod_Pedido) ) go --Criacao da tabela filho sem relacao com a FK CREATE TABLE test.ItensPedido ( Cod_Pedido int not null, Item_Pedido int not null, Cod_Prod int, Quantidade int, Valor money, Constraint pk_ItensPedido Primary Key(Cod_Pedido,Item_Pedido), ) go --criando a relação pai/filh alter table test.ItensPedido add Foreign Key(Cod_Pedido) references test.Pedidos(Cod_Pedido) go Unique Constraint (Constraint exclusivas) Permitem definir uma coluna ou colunas que os valores devem ser exclusivos dentro da tabela. Por exemplo, um CPF ou CNPJ dentro da tabela de clientes ou de fornecedores não poderiam se repetir. O que diferencia essa constraint de uma chave primária, é que a constraint UNIQUE permite ter um valor NULL na tabela; --criacao de campos UNIQUE --criando a tabela, com constraint UNIQUE sem nomeacao create table test.empresas ( Cod_Empresa int not null, CNPJ char(18) unique, Razao_Social varchar(30) ) go
  • 21. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 21 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br --criando tabela, com nomeacao da constraint UNIQUE drop table test.empresas go create table test.empresas ( Cod_Empresa int not null, CNPJ char(18), Razao_Social varchar(30), constraint UK_Empresas_CNPJ UNIQUE (CNPJ) ) go --insercao de dados para teste insert into test.empresas values(1,'00.000.000/0001-00','empresa 1') go --irá charmar o erro: insert into test.empresas values(2,'00.000.000/0001-00','empresa 1') go Default Constraint (Constraint padrão) Especifica um valor padrão que é gravado na coluna caso o aplicativo não fornece nenhum valor. As constraints default se aplicam apenas as colunas adicionadas com uma instrução INSERT, BPC ou BULK INSERT. Pode ser definidas em colunas NULL ou NOT NULL. Caso seja explicito a passagem do valor NULL, o valor NULL terá prioridade sobre o valor padrão. -- exemplo de DEFAULT -- Criando a tabela com nomeacao da constraint DEFAULT CREATE TABLE test.Cidades ( Cod_Cidade int not null, Desc_Cidade varchar(30), UF char(02) constraint def_UF default 'SP' ) go -- teste de insercao de dados insert into test.Cidades (Cod_Cidade,Desc_Cidade,UF) values (1,'Balneario Camboriu','SC') go insert into test.Cidades (Cod_Cidade,Desc_Cidade) values (2,'Jundiai') go --selecionando os dados select * from test.Cidades Referencia: http://blog.sqlauthority.com/2008/09/08/sql-server-%E2%80%93-2008-creating- primary-key-foreign-key-and-default-constraint/
  • 22. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 22 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Check Constraint (Constraints de verificação) Limitam o intervalo de valores dentro de uma coluna. As constraints checks podem ser criadas em nível de coluna e não podem referenciar nenhuma outra coluna na tabela. Quando criadas em nível de tabela podem referenciar qualquer coluna dentro da tabela, mas não podem referencias colunas de outras tabelas; O retorno de validação é verdadeiro ou falso; As constraints check podem utilizar comparações simples como: >, <, >=, <=, <> e =, ou mais complexas como AND, OR ou NOT. Podem utilizar caracteres curinga % e _, e executar rotinas de correspondências de padrão (mascaras como CPF, CNPJ, FONE, etc) -- check constraint create table test.Estoque ( ID int not null, Data_Mov date constraint DF_DATA_MOV default getdate(), Tipo_Mov char(01) constraint CK_TIPO_MOV check(Tipo_Mov='E' or Tipo_Mov='S'), Estoque_Min int constraint CK_ESTOQUE_MIN check(Estoque_Min > 0), Estoque_Max int, Cod_prod int, Valor_Prod money constraint CK_VALOR_PROD check(Valor_Prod > 0 and Valor_Prod < 10000), constraint CK_ESTOQUE_MAX check(Estoque_Max <= Estoque_Min + 50), ) go --simulando entradas na tabela estoque --erro no tipo_mov insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod) values (1,'A',10,1,100) go --consertando o erro tipo_mov insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod) values (1,'E',10,1,100) go insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod) values (2,'S',20,2,100) go -- erro no estoque minimo insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod) values (3,'E',0,10,1000) go --consertando o erro do estoque minimo insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod) values (3,'E',1,10,1000) go
  • 23. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 23 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br --erro no valor do produto insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod) values (4,'E',20,100,0) go insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod) values (4,'E',20,100,10000) go --consertando o erro do valor do produto insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Cod_prod, Valor_Prod) values (4,'E',20,100,999) go --erro no valor do ESTOQUE MAXIMO select * from test.Estoque insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Estoque_Max, Cod_prod, Valor_Prod) values (5,'E',10,100,100,10) go --consertando o valor do estoque maximo insert into test.Estoque (ID,Tipo_Mov, Estoque_Min, Estoque_Max, Cod_prod, Valor_Prod) values (5,'E',10,10,50,10) go Mais informações sobre criação de tabelas: http://msdn.microsoft.com/pt-br/library/ms174979.aspx Projetando um banco de dados: http://msdn.microsoft.com/pt-br/library/ms189317.aspx
  • 24. METODOLOGIA DE AULA TEÓRICA DISCIPLINA: BANCO DE DADOS I TÍTULO DA AULA: CRIACAO DE TABELAS Rev. 3 13.11.2019 Pág. 24 de 24 CENTRO UNIVERSITÁRIO PADRE ANCHIETA – PROF. RODRIGO SAITO – rodrigok@anchieta.br Exercícios: Cenário: A Empresa FRUTAS DA HORTA NA HORA Ltda resolveu implantar um sistema de pedidos on-line para seus clientes jurídicos da região que estejam localizados até 200 KM de raio da sua sede. O DBA atual, KAVITA GURU disse que não irá conseguir desenvolver esse serviço, por conta das manutenções, já existem nos sistemas atuais e para isso, contratou você para desenvolver e criar a base de dados do novo sistema baseado no cenário abaixo: A empresa precisará de uma tabela de CLIENTES contendo código de identificação (auto-numeração), login (único), senha (no mínimo de 6 caracteres), razão social (obrigatório), cnpj (único sem repetição), endereço, bairro, cidade (a maioria da cidade de São Paulo sendo o padrão), uf (a maioria do estado de SP, sendo o padrão), cep, telefones de contato, email’s de contato. Além disso, precisará cadastrar seus PRODUTOS (frutas), com os dados de código de identificação, descrição do produto (obrigatório), estoque mínimo (sempre maior do que 10), estoque máximo (nunca menor que estoque mínimo e nunca maior que estoque mínimo + 100), valor de custo (maior ou igual a 1), valor de venda (valor de custo + 25%), unidade de medida de venda (podendo ser KG, DUZIA, CAIXA, etc), grupo que o produto pertence (consultando a tabela de grupos contendo código de identificação e descrição do grupo). Para que o sistema funcione, também será necessário as tabelas de PEDIDOS e ITENS_DO_PEDIDO contendo, código de identificação do pedido (auto-numeração), status do pedido (podendo ter o valor de “A” ativo ou “C” Cancelado e por padrão ser “A” ativo) , data do pedido (precisa ser a mesma da data do sistema), cliente que solicitou, identificação dos produtos pedidos , valor de venda dos produtos pedidos, quantidade dos produtos, unidades dos produtos para venda, sub-totais de cada produto pedido (quantidade x valor do produto), valor total do pedido. A quantidade de produtos pedidos deverá ser maior que 1(para cada produto) e o valor dos produtos deverá ser consultado da tabela de produtos do valor de venda. A FRUTAS DA HORTA NA HORA Ltda comprou o SQL Server 2008 Enterprise e novos hardwares para suportar o novo sistema, sem limites de usuários para que você desenvolva esse trabalho. No cenário acima, será necessário: - Normalizar as tabelas até a 3FN; - Se necessário, crie outros campos para melhor definir as tabelas; - Criar o banco de dados da empresa, já tendo em mente que a tabela de PEDIDOS e ITENS DO PEDIDO serão as mais críticas em relação a armazenamento de dados; - Criar as tabelas, com seus devidos tipos de dados, relacionamentos e constraints (envolvendo os checks, defaults, etc); - Verificar se há regras de negócio que o banco de dados não consegue suprir;