Banco de Dados Maria Augusta (Magu) 1. Create Database CREATE DATABASE PaisProducaoMineral USE...
-
Upload
marcelo-goncalves-felgueiras -
Category
Documents
-
view
212 -
download
0
Transcript of Banco de Dados Maria Augusta (Magu) 1. Create Database CREATE DATABASE PaisProducaoMineral USE...
Banco de DadosBanco de DadosMaria Augusta (Magu)Maria Augusta (Magu)
•1
Create DatabaseCREATE DATABASE PaisProducaoMineral
USE PaisProducaoMineral
•2
Criando tabelas (1)Informações importantes:1.Nome da tabela. (*)2.Nome e tipo dos dados. (*)3.Chave primária.4.Chave(s) estrangeira(s).5.Outras restrições sobre os campos.
(*) Informações essenciais.
•3
Tipos de Dados no SQL Server (1)
Tipos Numéricos
BIT: Armazena os valores lógicos 0 ou 1.
Valores monetáriosSMALLMONEY: Valores numéricos decimais variando de -214 748.3648 a
214 748.3647.MONEY: Decimais variando de -922 337 203 685 477.5808 a
+922 337 203 685 477.5807
Para armazenar inteiros Para armazenar números reais
TINYINT [0 a 256] NUMERIC(18,0)SMALLINT [-32.768 a 32.767]
DECIMAL(18,0)
INT [-2.147.483.648 a 2.147.483.647]
FLOAT [-1.79E + 308 a 1.79E + 308]
BIGINT [-9.223.372.036.854.775.808 a -9.223.372.036.854.775.807]
REAL [-3.40E + 38 a 3.40E + 38]
•4
Tipos de Dados no SQL Server (2)
Tipos para datasSMALLDATETIME: Armazena data e hora, com precisão de minutos.DATETIME: Armazena data e hora, com precisão de centésimos de segundos.TIME: Armazena somente hora. Pode armazenar segundos até a fração de 9999999.DATE: Armazena somente data.DATETIME2: É uma combinação dos tipos de dados DATE e TIME. A diferença para o tipo DATETIME é a precisão ao armazenar as horas.DATETIMEOFFSET: Armazena valores data e hora com a combinação da hora do dia com o fuso horário. O intervalo de deslocamento do fuso horário é de -14:00 a +14:00.
•5
Tipos de Dados no SQL Server (3)
Tipos para textoCHAR(N): Armazena N caracteres fixos (até 8.000) no formato não Unicode. Independente da quantidade de caracteres utilizados, irá sempre armazenar o tamanho de caracteres do campo, sendo preenchido o restante com espaços em brancoVARCHAR(N): Armazena N caracteres (até 8.000) no formato não Unicode.VARCHAR(MAX): Armazena caracteres no formato não Unicode. MAX indica que o máximo a ser armazenado pode chegar a 2^31-1 bytes.TEXT: Armazena caracteres no formato não Unicode. Esse tipo de dado suporte até 2.147.483.647 caracteres e existem funções específicas para trabalhar com esse tipo de dado.NCHAR(N): Armazena N caracteres fixos (até 4.000) no formato Unicode. Independente da quantidade de caracteres utilizados, irá sempre armazenar o tamanho de caracteres do campo, sendo preenchido o restante com espaços em branco.NVARCHAR(N): Armazena N caracteres (até 4.000) no formato Unicode.NVARCHAR(MAX): Armazena caracteres no formato Unicode. MAX indica que o máximo a ser armazenado pode chegar a 2^31-1 bytes.NTEXT: Armazena caracteres no formato Unicode. Esse tipo de dado suporte até 1.073.741.823 caracteres e existem funções específicas para trabalhar com esse tipo de dado.
•6
Create Table (1) – Apenas os Campos
CREATE TABLE Pais1(Nome varchar(50), Pib money
)
•7
Create Table (2) – Definição de Chave Primária –
Sintaxe 1
CREATE TABLE Pais2(Nome varchar(50) PRIMARY KEY, Pib money
)
•8
Create Table (3) – Definição de Chave Primária –
Sintaxe 2
CREATE TABLE Pais3(Nome varchar(50), Pib money,PRIMARY KEY(Nome)
)
•9
Create Table (4) – Definição de Chave Primária –
Sintaxe 3
CREATE TABLE Pais4(Nome varchar(50), Pib money,CONSTRAINT PK_Pais4
PRIMARY KEY(Nome))
•10
Create Table (5) – Definição de Chave Primária –
Sintaxe 3
CREATE TABLE Mineral(Nome varchar(30), Valor money,CONSTRAINT PK_Mineral PRIMARY KEY(Nome)
)
•11
Create Table (6) – Definição de Chave
Estrangeira – Sintaxe 1
CREATE TABLE PaisMineral1(NomePais varchar(50)
REFERENCES Pais4(Nome),NomeMineral varchar(30)
REFERENCES Mineral(Nome),
ReservaEstimada real, ProducaoAnual real,CONSTRAINT PK_PaisMineral1
PRIMARY KEY(NomePais, NomeMineral))•12
Create Table (7) – Definição de Chave
Estrangeira – Sintaxe 2
CREATE TABLE PaisMineral2(NomePais varchar(50),NomeMineral varchar(30), ReservaEstimada real, ProducaoAnual real,CONSTRAINT PK_PaisMineral2
PRIMARY KEY(NomePais, NomeMineral),FOREIGN KEY (NomePais)
REFERENCES Pais4(Nome),FOREIGN KEY (NomeMineral)
REFERENCES Mineral(Nome))•13
Create Table (8) – Definição de Chave
Estrangeira – Sintaxe 3
CREATE TABLE PaisMineral3(NomePais varchar(50),NomeMineral varchar(30), ReservaEstimada real, ProducaoAnual real,CONSTRAINT PK_PaisMineral3
PRIMARY KEY(NomePais, NomeMineral),CONSTRAINT FK1_PaisMineral3
FOREIGN KEY (NomePais) REFERENCES Pais4(Nome),CONSTRAINT FK2_PaisMineral3
FOREIGN KEY (NomeMineral) REFERENCES Mineral(Nome))•14
Create Table (9) – Outras Restrições
Outras restrições que podem ser impostas sobre um campo (além de chave primária e chave estrangeira):
1. NOT NULL: O campo não pode assumir valores nulos.
2. UNIQUE: O campo não pode assumir valores repetidos.
3. CHECK(condição): O valor do campo deve satisfazer a uma condição expressa na cláusula CHECK.
4. DEFAULT valor: Se nenhum valor for especificado para o campo quando for feita a inserção de um registro no mesmo, então o campo assume o valor “default”.•15
Insert (1) – Comando da DML Comando utilizado para a inserção de registros nas
tabelas.Sintaxe 1
INSERT INTO nome_tabela VALUES (valor1, ... , valorN)
Ao se usar esta sintaxe, os valores especificados após a cláusula VALUES têm que estar, necessariamente, na mesma ordem em que foram criados.
Exemplo:INSERT INTO Pais VALUES (‘Brasil’, 12000) - Certo
INSERT INTO Pais VALUES (12000, ‘Brasil’) - Errado
•16
Insert (2) – Comando da DMLSintaxe 2
INSERT INTO nome_tabela (campo1, ..., campoN) VALUES (valor1, ... , valorN)
Ao se usar esta sintaxe, os valores especificados após a cláusula VALUES têm que estar, necessariamente, na mesma ordem em que o nome dos campos aparecem após o nome da tabela.
Exemplo:INSERT INTO Pais (Pib, Nome) VALUES (12000, ‘Brasil’)INSERT INTO Pais (Nome) VALUES ( ‘Argentina’)•17
Exercício– Criação de TabelasCriar as tabelas a seguir:
Genero (CodGenero, NomeGenero)
DVD (CodDVD, TituloFilme, ValorLocacao, CodGenero)
Cliente (CodCliente, NomeCliente, Endereco, Telefone)
Locacao (CodCliente, CodDVD, DataLocacao, NumeroDias)
CE(Genero)
CE(Cliente) CE(DVD)
•18
Voltando às Restrições (1) Se executarmos o comando INSERT abaixo:
INSERT INTO Genero(CodGenero) VALUES (1)
Verificando o conteúdo da tabela Genero, veremos que consta um NULL para o campo NomeGenero associado ao código de Genero 1.
Para impedir a inserção de valores nulos, impomos a restrição NOT NULL quando da declaração do campo.
Exemplo:CREATE TABLE Genero1( CodGenero int, NomeGenero varchar(30) NOT NULL, CONSTRAINT PK_Genero1 PRIMARY
KEY(CodGenero))
•19
Voltando às Restrições (2) Se executarmos o comando INSERT abaixo:
INSERT INTO Genero1(CodGenero) VALUES (1)
veremos que a inserção não ocorre, aparecendo a seguinte mensagem de erro:
Não é possível inserir o valor NULL na coluna 'NomeGenero', tabela 'Genero1'; a coluna não permite nulos. Falha em INSERT.
•20
Voltando às Restrições (3) Se executarmos os comandos INSERT abaixo:
INSERT INTO Genero VALUES (2, ‘Romance’)INSERT INTO Genero VALUES (3, ‘Romance’)
Verificando o conteúdo da tabela Genero, veremos que o gênero Romance aparece duas vezes, associado ao código 2 e ao código 3.
Para impedir a inserção de valores duplicados de NomeGenero, impomos a restrição UNIQUE quando da declaração do campo. Exemplo:
CREATE TABLE Genero2( CodGenero int, NomeGenero varchar(30) UNIQUE, CONSTRAINT PK_Genero2 PRIMARY
KEY(CodGenero))
•21
Voltando às Restrições (3)CREATE TABLE Genero2( CodGenero int, NomeGenero varchar(30), CONSTRAINT PK_Genero2 PRIMARY KEY(CodGenero), CONSTRAINT UQ_Genero2 UNIQUE(NomeGenero) )
•22
Voltando às Restrições (4) Se executarmos os comandos INSERT abaixo:
INSERT INTO Genero2 VALUES (2, ‘Romance’)INSERT INTO Genero2 VALUES (3, ‘Romance’)
verificamos que a primeira inserção ocorre, porém a segunda não e o SGBD emite a seguinte mensagem de erro:
Violação da restrição UNIQUE KEY 'UQ__Genero2__081698E50425A276'. Não é possível inserir a chave duplicada no objeto 'dbo.Genero2'.
A instrução foi finalizada.
•23
Voltando às Restrições (5) Se executarmos o comando INSERT abaixo:
INSERT INTO DVD VALUES (1, ‘A Volta dos que não Foram’, -1.5, 1)
estaremos inserindo na base um DVD com valor de locação negativo.
•24
Voltando às Restrições (6) Para impedir a inserção de valores de locação
negativos, impomos uma restrição através da cláusula CHECK quando da declaração do campo. Exemplo:
CREATE TABLE DVD1 (CodDVD int, TituloFilme varchar(50), ValorLocacao money CHECK(ValorLocacao>0), CodGenero int, CONSTRAINT PK_DVD1 PRIMARY KEY(CodDVD),CONSTRAINT FK1_DVD1 FOREIGN KEY(CodGenero) REFERENCES Genero(CodGenero)
)•25
Voltando às Restrições (6)• Uma outra sintaxe possível para se fazer a mesma
declaração é:
CREATE TABLE DVD2 (CodDVD int, TituloFilme varchar(50), ValorLocacao money ,CodGenero int, CONSTRAINT PK_DVD2 PRIMARY KEY(CodDVD),CONSTRAINT FK_DVD2 FOREIGN KEY(CodGenero) REFERENCES Genero(CodGenero),CONSTRAINT CK_DVD2 CHECK(ValorLocacao > 0)
)•26
Voltando às Restrições (7) Se executarmos o comando INSERT abaixo:
INSERT INTO DVD1 VALUES (1, ‘A Volta dos que não Foram’, -1.5, 1)
veremos que não é possível fazer a inserção e o SGBD emite a seguinte mensagem de erro:
A instrução INSERT conflitou com a restrição do CHECK "CK__DVD1__ValorLocac__0F975522". O conflito ocorreu no bando de dados "PaisProducaoMinerais", tabela "dbo.DVD1", column 'ValorLocacao'.
A instrução foi finalizada.•27
Voltando às Restrições (8) Se executarmos o comando INSERT abaixo:
INSERT INTO DVD1 (CodDvd, TituloFilme, ValorLocacao)
VALUES (1, ‘A Origem dos Guardiões’, 3.5)
estaremos inserindo na base um DVD sem informar qual é o gênero de filme ao qual ele corresponde.
Neste caso, ficará constando na coluna CodGenero o valor NULL para este filme.
Podemos estabelecer que todo filme que seja inserido sem que se informe o código do gênero, seja considerado como sendo do gênero Infantil (código 1).•28
Voltando às Restrições (9) Fazemos isso por meio da cláusula DEFAULT. Exemplo:
CREATE TABLE DVD2 (CodDVD int, TituloFilme varchar(50), ValorLocacao money, CodGenero int DEFAULT 1, CONSTRAINT PK_DVD2 PRIMARY KEY(CodDVD),CONSTRAINT FK1_DVD2 FOREIGN KEY(CodGenero) REFERENCES Genero(CodGenero)
)
•29
Delete (1) – Comando da DML Comando utilizado para a exclusão de registros
das tabelas.Sintaxe Completa
DELETE FROM nome_tabela WHERE condição
Ao se executar um comando de deleção são excluídos da tabela todos os registros que satisfazem à condição especificada.
Obs: A cláusula WHERE pode ser omitida. Neste caso, são excluídos todos os registros da tabela.
•30
Integridade Referencial e a Criação de Tabelas (1)
Quando se tentar excluir um registro de uma tabela e este registro referencia um registro de outra tabela, o comportamento padrão do SGBD é não permitir a exclusão.
A tabela que referencia é comumente chamada de tabela filha e a tabela referenciada de tabela pai ou tabela mãe.
•31
Integridade Referencial e a Criação de Tabelas (2)
Suponhamos, que os tabelas Genero e DVD tenham os seguintes conteúdos:
Vamos considerar que todas as versões da tabela DVD, que se chamarão DVD1, DVD2, DVD3, etc, terão os mesmos registros representados acima.
CodGenero
NomeGenero
1 Romance2 Ficção3 Suspense4 Terror5 Infantil6 Comédia
CodDVD
TituloFilme ValorLocacao
CodGenero
1 Procurando Nemo
3,50 5
2 O Exorcista 3,00 43 Titanic 2,50 14 Blade Runner 4,00 25 A Órfã 3,00 3
•32
Integridade Referencial e a Criação de Tabelas (3)
• Se tentarmos excluir um registro da tabela Genero, que seja referenciado por algum registro da tabela DVD, como por exemplo:
DELETE FROM Genero WHERE CodGenero = 1
o SGBD não permite que se faça a exclusão, uma vez que ele é responsável por manter a integridade referencial na base de dados.
• Para excluírmos o gênero Romance (CodGenero = 1) da tabela Genero, temos que, antes, excluir o registro com o filme “Titanic”, que é deste gênero, da tabela DVD.•33
Integridade Referencial e a Criação de Tabelas (4)
• Há, entretanto, outros comportamentos que podem ser definidos de tal forma que o SGBD permita a exclusão (ou atualização) de registros referenciados, tomando ações compensatórias, a fim de garantir a integridade referencial. São eles:
1. ON UPDATE/ ON DELETE CASCADE: Faz atualização/exclusão em cascata.
2. ON UPDATE/ ON DELETE SET NULL: Ao se atualizar ou deletar um registro na tabela mãe, coloca um NULL nos campos dos registros que o referenciam, na tabela filha.
3. ON UPDATE/ ON DELETE SET DEFAULT: Ao se atualizar ou deletar um registro na tabela mãe, coloca o valor declarado como DEFAULT nos campos dos registros que o referenciam na tabela filha.•34
Integridade Referencial e a Criação de Tabelas (5)
• Assim, se a tabela DVD3 é criada com a cláusula ON DELETE CASCADE, como abaixo:CREATE TABLE DVD3 (CodDVD int, TituloFilme varchar(50), ValorLocacao money, CodGenero int DEFAULT 5, CONSTRAINT PK_DVD3 PRIMARY KEY(CodDVD),CONSTRAINT FK1_DVD3 FOREIGN KEY(CodGenero) REFERENCES Genero(CodGenero)ON UPDATE CASCADE ON DELETE CASCADE
)ao emitirmos o comando:
DELETE FROM Genero WHERE CodGenero = 1
o registro relativo ao filme Titanic também será excluído da tabela DVD3.
•35
Integridade Referencial e a Criação de Tabelas (6)
• Assim, se a tabela DVD4 é criada com a cláusula ON DELETE SET NULL, como abaixo:CREATE TABLE DVD4 (CodDVD int, TituloFilme varchar(50), ValorLocacao money, CodGenero int DEFAULT 5, CONSTRAINT PK_DVD4 PRIMARY KEY(CodDVD),CONSTRAINT FK1_DVD4 FOREIGN KEY(CodGenero) REFERENCES Genero(CodGenero)ON UPDATE SET NULL ON DELETE SET NULL
)ao emitirmos o comando:
DELETE FROM Genero WHERE CodGenero = 1
o registro relativo ao filme Titanic terá seu campo CodGenero “setado” para NULL na tabela DVD4.
•36
Integridade Referencial e a Criação de Tabelas (7)
• Assim, se a tabela DVD5 é criada com a cláusula ON DELETE SET NULL, como abaixo:CREATE TABLE DVD5 (CodDVD int, TituloFilme varchar(50), ValorLocacao money, CodGenero int DEFAULT 5, CONSTRAINT PK_DVD5 PRIMARY KEY(CodDVD),CONSTRAINT FK1_DVD5 FOREIGN KEY(CodGenero) REFERENCES Genero(CodGenero)ON UPDATE SET DEFAULT ON DELETE SET DEFAULT
)ao emitirmos o comando:
DELETE FROM Genero WHERE CodGenero = 1
o registro relativo ao filme Titanic terá seu campo CodGenero “setado” para 5 na tabela DVD5.
•37
Alterando a Estrutura de Tabelas (1)
• Quando uma tabela precisa sofrer alterações estruturais, uma alternativa possível é excluí-la da base de dados e criar outra com a estrutura desejada.
• Porém, esta não é a melhor solução quando a tabela em questão já está populada com dados.
• Neste caso, é mais conveniente fazer uso do comando ALTER TABLE, que faz parte do grupo de comandos da DDL.
•38
Alterando a Estrutura de Tabelas (2)
• Com o comando ALTER TABLE, é possível fazer os seguintes tipos de alterações estruturais:
1. Incluir um novo campo.2. Excluir um campo.3. Alterar o tipo de um campo.4. Excluir uma restrição.5. Incluir uma restrição.
•39
Alterando a Estrutura de Tabelas (3)
• Para ilustrar as várias possibilidades de uso do comando ALTER TABLE, suponhamos que tenhamos criado a tabela Cliente, com o seguinte comando:
CREATE TABLE Cliente ( CodCliente int, NomeCliente varchar(50), Endereco varchar(100), Telefone varchar(11)CONSTRAINT PK_Cliente PRIMARY KEY (CodCliente))
•40
Alterando a Estrutura de Tabelas (4)
• Para incluir o campo NumFilhos do tipo int, fazemos:
ALTER TABLE ClienteADD NumFilhos int
Exercício: • Inclua agora, nesta mesma tabela, um campo Cpf do
tipo varchar(12).
•41
Alterando a Estrutura de Tabelas (5)
• Para excluir o campo NumFilhos, fazemos:
ALTER TABLE ClienteDROP COLUM NumFilhos
Exercício: • Exclua agora, desta mesma tabela, o campo Cpf que
você incluiu anteriormente.
•42
Alterando a Estrutura de Tabelas (6)
• Vamos incluir o campo NumFilhos, do tipo int novamente e, em seguida, suponhamos que tenhamos a necessidade de alterar seu tipo para tinyint:
ALTER TABLE ClienteALTER COLUM NumFilhos tinyint
Exercício: • Torne a incluir nesta tabela o campo Cpf como
varchar(120 e, sem seguida, altere o seu tipo para varchar(11).
•43
Alterando a Estrutura de Tabelas (6)
• Para excluir da tabela Cliente a restrição PRIMARY KEY fazemos:
ALTER TABLE ClienteDROP CONSTRAINT PK_Cliente
•44
Alterando a Estrutura de Tabelas (6)
• Para incluir na tabela Cliente a restrição PRIMARY KEY de tal forma que agora a chave primária passe a ser o Cpf, fazemos:
ALTER TABLE ClienteADD CONSTRAINT PK_Cliente PRIMARY KEY (Cpf)
•45