Spiritual

BDII SQL DDL Revisão 9

Description
exatasfepi.com.br BDII SQL DDL Revisão 9 André Luís Duarte Honra a teu pai e a tua mãe (que é o primeiro mandamento com promessa), para que te vá bem, e sejas de longa vida sobre a terra.(ef 6:2,3) SQL
Categories
Published
of 92
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Related Documents
Share
Transcript
exatasfepi.com.br BDII SQL DDL Revisão 9 André Luís Duarte Honra a teu pai e a tua mãe (que é o primeiro mandamento com promessa), para que te vá bem, e sejas de longa vida sobre a terra.(ef 6:2,3) SQL Introdução Definição de dados Restrições básicas Alteração de esquemas 2 SQL Introdução Definição de dados Restrições básicas Alteração de esquemas 3 Introdução Desenvolvida no laboratório de pesquisas da IBM em San Jose Originalmente denominada SEQUEL (Structured English QUEry Language) Em 1986, o ANSI publicou um primeiro padrão para a linguagem Rapidamente a linguagem estabeleceu-se padrão para bancos de dados relaional 4 Introdução Existem linguagens formais que fornecem notação concisa para representar consultas álgebra relacional, cálculo relacional de tuplas Sistemas comerciais requerem uma linguagem mais amigável ao usuário SQL, QBE e QUEL, possuem muitas outras capacidades além de consultas Recursos para definição da estrutura de dados, modificação e especificação, restrições de segurança, etc 5 Introdução Data Definition Language (DDL) definir esquemas de relação, remover relação, criar índices e modificar esquemas Views Definitions comandos para definição de visões Authorization comandos para especificação de autorização de acesso a relações e visões 6 Introdução Interactive Data Manipulation Language (DML) inclui linguagem de consulta baseada na álgebra relacional e no cálculo relacional de tupla e também comandos para inserir, remover e modificar tuplas em um banco de dados Embeded Data Manipulation Language a forma embutida da SQL é projetada para ser utilizada com linguagens de programação 7 Introdução Integrity a SQL original incluía comandos para instruções complexas de integridade. As versões da SQL fornecem apenas uma forma limitada de verificação de integridade Transaction control a SQL inclui comandos para especificação do início e fim de transações, uma das formas de bloquear explicitamente os dados para controle de concorrência 8 Introdução Todo SGBD relacional baseado em SQL deve ter implementado em seu núcleo o SQL padrão ANSI Os pacotes adicionais do SQL não precisam ser implementados e podem ser substituídos por versões do SGBD 9 SQL Introdução Definição de dados Restrições básicas Alteração de esquemas 10 Definição de dados Em SQL usamos os termos tabela, linha e coluna ao invés de relação, tupla e atributo O principal comando para definição de dados em SQL é o CREATE Pode ser usado para criar esquemas, tabelas, e domínios, além de visões, asserções e gatilhos 11 Esquema e catálogo O conceito de esquema foi incorporado a partir da SQL2 agrupando tabelas e outros construtores que pertencem à mesma aplicação de banco de dados O catálogo armazena a descrição dos esquemas e suas restrições (metadados) 12 Criar esquema Para se criar um esquema usamos o seguinte comando CREATE SCHEMA nome_esquema AUTHORIZATION id_usuário 13 MySQL O MySQL não difere esquema de base de dados Os comandos CREATE SCHEMA e CREATE DATABASE conceitualmente fazem a mesma coisa O MySQL difere do padrão definido para o SQL, pois o comando CREATE não adiciona autorização no momento da sua definição 14 MySQL Sintaxe CREATE {DATABASE SCHEMA} [IF NOT EXISTS] db_name [create_specification]... create_specification: [DEFAULT] CHARACTER SET [=] charset_name [DEFAULT] COLLATE [=] collation_name 15 MySQL Iniciar o gerenciador path \mysql\bin\mysqld C:\ caminho_mysql \mysql\bin\mysqld Logar no gerenciador... mysql.exe u userid -p C:\ path \mysql\bin\mysql.exe u root -p Exibir os esquemas/bancos SHOW SCHEMAS; SHOW DATABASES; 16 MySQL Usar um determinado esquema USE nome_esquema ; Exibir tabelas SHOW TABLES; Ver estrutra da tabela DESCRIBE nome_tabela ; Criar esquema / banco CREATE SCHEMA banco; CREATE DATABASE loja; 17 Verificando a codificação char_set USE banco; SELECT collation USE banco; SELECT Todos os char_set SHOW CHARACTER SET; 18 Verificando a codificação Criar esquema / banco definindo char_set CREATE DATABASE banco1 CHARACTER SET latin1; USE banco1; SELECT 19 Criar tabela CREATE TABLE é usado para criar uma nova relação Nome da tabela Lista de atributos Restrições iniciais 20 Atributos Atributos são definidos antes das restrições Nome Tipo para especificar o domínio de seus valores Restrição de atributo 21 Tipos de dados Numérico Cadeia de caractere Bit-string Booleano Date e time Timestamp Interval 22 Numérico Numérico Inteiro: INTEGER, INT SMALLINT Ponto flutuante: FLOAT, REAL, DOUBLEPRECISION Números formatados podem ser declarados usando DECIMAL(i,j) ou DEC(i,j), onde i número total de dígitos decimais e j número de dígitos depois do ponto decimal 23 Cadeia de caractere Tamanho fixo CHAR(n) ou CHARACTERE(n), onde n é a quantidade de caracteres Tamanho variável VARCHAR(n), CHARVARYNG(n) ou CHARACTERVARYNG(n), onde n representa o número máximo de caracteres 24 Cadeia de caractere Quando se define uma cadeia de caractere literal, esta deve ser colocada entre aspas simples (apóstrofo) e é case sensitive Cadeias fixa têm uma cadeia menor de caracteres branco acoplada ao final da cadeia caso seja necessário 25 Cadeia de caractere Para comparações as cadeias de caracteres são consideradas ordenadas alfabeticamente (ou lexicograficamente) Se uma cadeia str1 aparece antes de uma cadeia str2, então str1 é menor do que str2 As barras verticais são usadas para concatenar cadeias 26 Bit-string Também chamados de cadeia de bits Tamanho fixo BIT(n) Tamanho variável BITVARYNG(n) Onde n é o número máximo de bits Os Bit-string literais são colocados entre aspas simples precedidos pela letra B B Booleanos Possui valores tradicionais TRUE (verdadeiro) FALSE (falso) Em SQL por causa da presença de valores nulos (null) existe um terceiro tipo que é UNKNOWN (desconhecido) 28 Date e time Acrescentados no SQL2 Date (data) contém dez posições e seus componentes são: YEAR, MONTH e DAY YYYY-MM-DD Time (hora) contém no mínimo oito posições com os componentes: HOUR, MINUTE e SECOND HH:MM:SS 29 Date e time O operador relacional (menor que) pode ser usado com os tipos date e time Uma data anterior é considerada menor que ( ) uma data posterior Valores literais representados pela cadeia de caractere devem ser precedidos pela palavra-chave DATE ou TIME DATE TIME 09:01:12 30 Timestamp Engloba os campos DATE e TIME mais um mínimo de seis posições para frações decimais de segundos Valores literais representados pela cadeia de caractere devem ser precedidos pela palavra-chave TIMESTAMP TIMESTAMP :12: Interval Especifica um intervalo relativo que pode ser usado para incrementar ou decrementar um valor absoluto de date time São qualificados para ser intervalos YEAR/MONTH ou DAY/TIME 32 Interval INTERVAL YEAR/MONTH Adiciona 2 anos e 1 mês à data INTERVAL 0 02:10:00 DAY/TIME Adiciona 0 dias, 2 horas, 10 minutos à data 33 Interval SGBD suporta Oracle Informix SGBD suporta parcialmente PostgreSQL SGBD não suporta SQL Server, DB2, MySQL Obs.: MySQL possui funções para realizar cálculos com datas 34 Criando domínios SQL permite a criação de domínios através do comando CREATE DOMAIN Domínios criados facilitam verificações e manutenções CREATE DOMAIN DCPF AS CHAR(11)... cpf DCPF not null... Atualmente somente o Interbase/Firebird e PostgreSQL suportam o comando Outros SGBD implementam aliases 35 MER 36 Esquema relacional Cliente { cpf: int, rg: char (14), pnome: varchar(15), mnome: varchar (100), unome: varchar (15), nascimento; date, endereco: varchar (30), cidade: varchar(30) padrão( Itajubá ), uf: char(2) padrão ( MG ), sexo: char, salario: decimal (10,2) } 37 Esquema relacional Conta { numero: serial, tipo: int, senha: char(6), saldo: decimal (10,2) } 38 Esquema relacional Clienteconta { cpf: char(11), numero: int, dataabertura: date, horaabertura: time } 39 Criar tabela CREATE TABLE cliente( cpf bigint PRIMARY KEY, rg varchar(14) UNIQUE NOT NULL, pnome varchar(15) NOT NULL, mnome varchar(100) NOT NULL, unome varchar(15) NOT NULL, nascimento date, endereco varchar(30), cidade varchar(30) DEFAULT 'Itajubá', uf char(2) DEFAULT 'MG', sexo char, salario decimal(10,2) ); 40 SQL Introdução Definição de dados Restrições básicas Alteração de esquemas 41 Restrições de atributos NOT NULL essa restrição é sempre implícita para atributos que são chave primária, porém pode ser especificada se o valor null não for permitido para o atributo desejado CHEK ( condição ) permite checar se o valor de um atributo satisfaz a condição 42 Padrões de atributos DEFAULT valor - define uma valor padrão para o atributo caso nenhum valor seja informado durante a inserção 43 Restrições de chave primária O comando CREATE TABLE possui a cláusula PRIMARY KEY PRIMARY KEY especifica um ou mais atributos como sendo chave primária da tabela Se a chave é formada por um único atributo a cláusula poderá vir logo após a definição do atributo 44 Restrições de chave primária Se a chave é formada por mais de um atributo: Os atributos que formam a chave devem ser criados antes de serem referenciados Define-se a chave primária através da cláusula PRIMARY KEY... PRIMAY KEY (cpf, rg),... 45 Restrições de chave alternativa A cláusula UNIQUE define as chaves alternativas (secundárias) Obs.: a cláusula UNIQUE em alguns SGBD não garante que o atributo será obrigatório, por isso, devemos indicar a restrição NOT NULL para garantir que o atributo não pode ser nulo 46 Tabela cliente CREATE TABLE cliente( cpf bigint PRIMARY KEY, rg varchar(14) UNIQUE NOT NULL, pnome varchar(15) NOT NULL, mnome varchar(100) NOT NULL, unome varchar(15) NOT NULL, nascimento date, endereco varchar(30), cidade varchar(30) DEFAULT 'Itajubá', uf char(2) DEFAULT 'MG', sexo char, salario decimal(10,2) ); 47 Tabela cliente CREATE TABLE cliente( cpf bigint PRIMARY KEY, rg varchar(14) UNIQUE NOT NULL, pnome varchar(15) NOT NULL, mnome varchar(100) NOT NULL, unome varchar(15) NOT NULL, nascimento date, endereco varchar(30), cidade varchar(30) DEFAULT 'Itajubá', uf char(2) DEFAULT 'MG', sexo char, salario decimal(10,2) ); 48 Tabela conta CREATE TABLE conta( numero serial PRIMARY KEY, tipo int NOT NULL, senha char(6) NOT NULL, saldo decimal(10,2) NOT NULL ); 49 MySQL O MySQL permite que executemos comando a partir de um arquivo, para isso: Crie uma pasta na raiz que irá conter os arquivos (p.e: c:\sqltemp) Crie um arquivo texto chamado clientes.sql Implemente o código para a criação da tabela clientes Logado no banco digite o comando: source path \clientes.sql 50 Integridade referencial É especificada pela cláusula FOREIGN KEY (chave estrangeira) A restrição de integridade pode ser violada quando uma tupla é inserida, removida ou alteração nos atributos A ação padrão do SQL é rejeitar a operação 51 Integridade referencial 52 Integridade referencial 53 Integridade referencial O projetista pode definir ações alternativas caso uma restrição de integridade seja violada Para isso devemos declarar uma ação referencial engatilhada (referential trigged action) 54 Integridade referencial A ação referencial engatilhada pode ser: SET NULL ajustar o valor para null CASCADE propagar a ação em cascata SET DEFAULT ajustar o valor definido em default A ação a ser monitorada pode ser ON DELETE ON UPDATE 55 Integridade referencial Importante Se a(s) chave(s) estrangeira(s) faz(em) parte da chave primária da relação, não podemos criar a ação referencial engatilhada SET NULL ou SET DEFAULT 56 Tabela clienteconta (erro) CREATE TABLE clienteconta ( cpf bigint, numero bigint unsigned, dataabertura date, horaabertura time, PRIMARY KEY (cpf,numero), FOREIGN KEY (cpf) REFERENCES cliente (cpf) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (numero) REFERENCES conta (numero) ON DELETE SET NULL ON UPDATE CASCADE ); 57 Tabela clienteconta (erro) CREATE TABLE clienteconta ( cpf bigint, numero bigint unsigned, dataabertura date, horaabertura time, PRIMARY KEY (cpf,numero), FOREIGN KEY (cpf) REFERENCES cliente (cpf) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (numero) REFERENCES conta (numero) ON DELETE SET NULL ON UPDATE CASCADE ); 58 MySQL Caso ocorra o erro informando que não pode adicionar restrição no MySQL, isso está relacionado à problemas (lógicos) na criação da chave estrangeira Para analisar o domínio do tipo de dados onde o atributo foi construído podemos usar o comando SHOW CREATE TABLES nome da tabela SHOW CREATE TABLE cliente; 59 Tabela clienteconta1 CREATE TABLE clienteconta ( cpf bigint, numero bigint unsigned, dataabertura date, horaabertura time, PRIMARY KEY (cpf,numero), FOREIGN KEY (cpf) REFERENCES cliente (cpf) ON UPDATE CASCADE, FOREIGN KEY (numero) REFERENCES conta (numero) ON UPDATE CASCADE ); 60 Tabela clienteconta 2 CREATE TABLE clienteconta2 ( id bigint AUTO_INCREMENT, cpf bigint, numero bigint unsigned, dataabertura date, horaabertura time, PRIMARY KEY (id), FOREIGN KEY (cpf) REFERENCES cliente (cpf) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (numero) REFERENCES conta (numero) ON DELETE SET NULL ON UPDATE CASCADE ); 61 Integridade referencial A ação SET NULL ou SET DEFAULT é a mesma para ON DELETE e ON UPDATE, o que muda é o valor que será atribuído A ação para CASCADE ON DELETE é excluir todas as tuplas referidas A ação para CASCADE ON UPDATE é atualizar os valores da chave estrangeira das tuplas para o novo valor da chave primária na tabela de origem 62 Integridade referencial A operação CASCADE é apropriada para: Relacionamentos do tipo trabalha_em Relações com atributos multivalorados Relações que são entidades fraca 63 Nomeando restrições Para podermos alterar restrições, devemos nomeá-las no momento de sua criação usando a cláusula CONSTRAINT Não existe um padrão, mas, normalmente usa-se uma combinação dos nome do atributo com o tipo de restrição, por exemplo: cpf_pk, rg_sk, numero_fk indicando repectivamente primary key, second key, foreign key 64 Tabela clienteconta 1 CREATE TABLE clienteconta4 ( cpf bigint, numero bigint unsigned, dataabertura date, horaabertura time, CONSTRAINT CPFNUMEROPK PRIMARY KEY (cpf,numero), CONSTRAINT CPFFK FOREIGN KEY (cpf) REFERENCES cliente (cpf) ON UPDATE CASCADE, CONSTRAINT NUMEROFK FOREIGN KEY (numero) REFERENCES conta (numero) ON UPDATE CASCADE ); 65 Chave alternativa múltipla Suponha a tabela compra a seguir: Há a possibilidade de chave duplicada? Há a possibilidade de inserirmos a compra do mesmo produto para o mesmo cliente com o mesmo vendedor no mesmo horário? Como resolver esta ameaça? 66 Chave alternativa múltipla CREATE TABLE compra( codigo serial PRIMARY KEY cpf bigint NOT NULL, codvend bigint NOT NULL, codprod bigint NOT NULL, datacomp date NOT NULL, hora time NOT NULL, valor decimal(10,2) NOT NULL, FOREIGN KEY(cpf) REFERENCES cliente(cpf), FOREIGN KEY(codvend) REFERENCES vendedor(codigo), FOREIGN KEY(codprod) REFERENCES produto(codigo) ); 67 Chave alternativa múltipla A seguinte declaração possui um problema, qual é? 68 Chave alternativa múltipla CREATE TABLE compra( codigo serial PRIMARY KEY cpf bigint UNIQUE NOT NULL, codvend bigint UNIQUE NOT NULL, codprod bigint UNIQUE NOT NULL, datacomp date UNIQUE NOT NULL, hora time NOT NULL, valor decimal(10,2) NOT NULL, FOREIGN KEY(cpf) REFERENCES cliente(cpf), FOREIGN KEY(codvend) REFERENCES vendedor(codigo), FOREIGN KEY(codprod) REFERENCES produto(codigo) ); 69 Restrições de chave alternativa Como resolver? CREATE TABLE compra( codigo serial PRIMARY KEY cpf bigint NOT NULL, codvend bigint NOT NULL, codprod bigint NOT NULL, datacomp date NOT NULL, hora time NOT NULL, valor decimal(10,2) NOT NULL, UNIQUE KEY(cpf,codvend,codprod,datacomp,hora) FOREIGN KEY(cpf) REFERENCES cliente(cpf), FOREIGN KEY(codvend) REFERENCES vendedor(codigo), FOREIGN KEY(codprod) REFERENCES produto(codigo) ); 70 Exercícios Crie os esquemas relacionais e o banco físico usando o MySQL para o seguinte MER 71 SQL Introdução Definição de dados Restrições básicas Alteração de esquemas 72 Alteração de esquemas Podemos alterar os esquemas do banco de dados usando dois comandos DROP (eliminar) ALTER (alterar) 73 DROP Serve para eliminar elementos (objetos) que possuam ser identificados por um nome no esquema Esquema, database, tabela, domínios ou restrições Possui duas opções de comportamento CASCADE RESTRICT 74 DROP CASCADE Esquema DROP SCHEMA DATADASE nome CASCADE Remove os esquema definido por nome , suas tabelas, domínios e outros elementos Tabela DROP TABLE nome CASCADE Remove a tabela definida por nome bem como todas as referências a esta tabela 75 DROP RESTRICT Esquema DROP SCHEMA DATADASE nome RESTRICT Remove os esquema definido por nome , somente se o esquema não contiver nenhum elemento Tabela DROP TABLE nome RESTRICT Remove a tabela definida por nome somente se a tabela não for referenciada em nenhum lugar 76 MySQL No MySQL as opções foram mantidas na sintaxe do comando mas a partir da versão 5.0 elas não fazem nada Para remover uma tabela que é referenciada em outro local, deve-se remover antes, todas as referências Obs.: em versões posteriores opções podem ser removidas gerando erro de sintaxe no comando 77 ALTER Definições de uma tabela e outros objetos que possuem nome podem ser alterados através do comando ALTER Em tabelas básicas as ações são Adicionar ou eliminar uma coluna Alterar a definição de uma coluna Adicionar ou eliminar restrições em uma tabela 78 Adicionar coluna ALTER TABLE nome ADD atributo definição Após a criação do atributo, se não for definido valor default para ele, o valor do atributo para cada tupla será NULL Neste caso, a restrição NOT NULL não pode ser usada ALTER TABLE cliente ADD varchar(30) default 79 Exercícios Adicione as seguintes colunas nas tabelas indicadas: Atributo telefone do tipo bigint na tabela cliente Atributo 2 do tipo varchar na tabela cliente Atributo cesta na tabela conta do tipo inteiro Atributo status da conta na tabela clienteconta do tipo inteiro 80 MySQL Podemos adicionar um atributo em uma posição específica usando AFTER ou BEFORE ALTER TABLE cliente ADD celular bigint AFTER rg; Obs.: as versões mais atuais do MySQL não implementam a opção BEFORE, se precisa que o atributo seja o primeiro use a opção FIRST 81 Exercícios Adicione as seguintes colunas nas tabelas indicadas: Atributo nomemae do tipo VARCHAR na tabela cliente após o atributo nascimento Atributo digito verificador (dv) na tabela conta do tipo inteiro após o número da conta Atributo código na tabela cliente do tipo inteiro no inicio 82 Eliminar coluna ALTER TABLE nome DROP atributo As opções CASCADE e RESTRICT também podem ser usadas neste caso Como nos casos anteriores CASCADE remove todas as referências do atributo RESTRICT remove o atributo somente se não for referenciado em nenhum outro local 83 Exercício Eliminar o atributo 2 do cliente Eliminar o atributo digito verificador Eliminar o atributo código do cliente Eliminar o atributo cesta 84 Alterar definição de uma coluna Valores default ALTER TABLE nome ALTER atributo DROP DEFAULT ALTER TABLE nome ALTER atributo SET DEFAULT valor 85 Alterar definição de uma coluna Restrição ALTER TABLE nome ALTER atributo DROP CONSTRAINT nome CASCADE; ALTER TABLE nome ALTER atributo ADD CONSTRAINT definição 86 Alterar definição de uma coluna ALTER TABLE nome ALTER atributo DROP CONSTRAINT nome CASCADE; ALTER TABLE nome ALTER atributo ADD CONSTRAINT definição 87 MySQL No MySQL devemos remover a restrição indicando o seu tipo antes do nome ALTER TABLE clienteconta DROP FOREIGN KEY NUMEROFK; ATENÇÃO: o nome da restrição no MySQL é case sensitive 88 MySQL Para remover chave secundária ALTER TABLE clienteconta DROP INDEX numero 89 MySQL Em versões mais antigas do MySQL para removermos a restrição de chave primária devemos primeiro alterar o tipo auto_increment do atributo para depois remover a chave ALTER TABLE clienteconta MODIFY id INT NOT NULL; ALTERA TABLE clienteconta DROP PRIMARY KEY; 90 Exercícios de fixação Dado o MER representado no slide seguinte, crie os esquemas relacionais indicando os domínios de cada atributo, as restrições e crie
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks
SAVE OUR EARTH

We need your sign to support Project to invent "SMART AND CONTROLLABLE REFLECTIVE BALLOONS" to cover the Sun and Save Our Earth.

More details...

Sign Now!

We are very appreciated for your Prompt Action!

x