Agbd aula4 sql_ddl

352 visualizações

Publicada em

Arquitetura e gerenciamento de bancos de dados

Publicada em: Engenharia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
352
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
12
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Agbd aula4 sql_ddl

  1. 1. Arquitetura e Gerenciamento de Banco de Dados SQL – (DDL) Profª Débora Souza debora.slsouza@gmail.com
  2. 2. Introdução • SQL (Structured Query Language) é um padrão de linguagem de consulta comercial. • SQL usa uma combinação de construtores em álgebra relacional e cálculo relacional. • Embora o próprio nome se refira a SQL como uma linguagem de consulta, ela possui outros recursos.
  3. 3. Introdução • Modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de padrão SQL. • O padrão SQL define precisamente uma interface SQL para a definição de: • Tabelas • Operações sobre tabelas (seleção, junção e outras); e • Definição de regras de integridade de bancos de dados.
  4. 4. Introdução • A SQL é implementada em praticamente todos os sistemas de bancos de dados relacionais existentes. • Fabricantes de diferentes SGBDs apresentam variações de SQL. • Ex.: PL/SQL • A existência de padrões facilita a interoperabilidade.
  5. 5. Histórico • A IBM desenvolveu a versão original da SQL, originalmente chamada Sequel, no início da década de 1970. • Parte do projeto System R. • Com a evolução da linguagem, está passou a ser chamada de SQL (Structured Query Language). • A SQL se estabeleceu como linguagem padrão de banco de dados relacional.
  6. 6. Histórico • Em 1986 o ANSI e a ISO publicaram um padrão SQL o SQL-86. Apos este, alguns outros surgiram: • SQL-89 • SQL-92 • SQL:1999 • SQL:2003
  7. 7. Partes da SQL • A SQL possui várias partes: • Linguagem de definição de dados (DDL) • Linguagem de manipulação de dados (DML) • Integridade (DDL) • Definições de visões (DDL) • Controle de transações (DDL) - Especificar o início e o fim de transações. • SQL embutida e SQL dinâmica - Definem como as instruções SQL podem ser incorporadas dentro das linguagens de programação de finalidade geral (C, C++, Java). • Autorização (DDL)
  8. 8. Tipos de Domínios Básicos • char(n) - string de caracteres de tamanho fixo n. • varchar(n) - string de caracteres de tamanho variável, com tamanho n máximo. • int - subconjunto finito de inteiros que é dependente da máquina. • smallint - inteiro pequeno (dependente da máquina). • numeric(p,d) - número de ponto fixo com precisão especificada. • Ex.: numeric(3,1) aceita o valor 33,1, mas não aceita 333,1. • real, double precision - números de ponto flutuante. • float(n) - número de ponto flutuante, com precisão de pelo menos n dígitos.
  9. 9. Comandos SQL • Os comandos SQL para definição de dados são: • CREATE • DROP • ALTER
  10. 10. O comando CREATE • O comando CREATE pode ser utilizado para criação de: • Tabelas (relações) • Domínios próprios • View • Entre outros.
  11. 11. O Comando CREATE • Para criação de tabelas (relações): • CREATE TABLE : especifica uma nova relação (tabela). Cada relação possui um nome e um conjunto de atributos (colunas), bem como o tipo deste e possíveis restrições. • Sintaxe: CREATE TABLE nome (A1 D1, A2 D2, ..., An Dn, <regra de integridade1>, ..., <regra de integridadeK> ) • Onde nome é o nome da relação, Ai é um nome de atributo e Di é o domínio do atributo Ai.
  12. 12. O Comando CREATE • As definições dos atributos têm o seguinte formato: • Atributo Tipo [NOT NULL [UNIQUE]] [DEFAULT valor] [AUTO_INCREMENT] • Onde: • Atributo: nome do atributo que está sendo definido. • Tipo: domínio do atributo. • NOT NULL: expressa que o atributo não pode receber valores nulos. • UNIQUE: indica que o atributo tem valor único na tabela. • DEFAULT valor: indica um valor a ser atribuído ao atributo caso não seja determinado um valor na inserção. • AUTO_INCREMENT : utilizado para automatizar um código, geralmente a chave primária.
  13. 13. O Comando CREATE • Existem diversas restrições de integridade permitidas, entre elas: • Integridade de chave: • PRIMARY KEY (atributos chave) • Integridade referencial: • FOREIGN KEY (atributos) REFERENCES tabela_base(atributos) • Integridade de domínio: • CHECK (condição)
  14. 14. Integridade de Chave • Definida com a cláusula PRIMARY KEY. • Não são permitidos valores duplicados em uma chave primária, ou seja, a chave primária é única. • Geralmente, não é possível alterar chaves primárias.
  15. 15. Integridade de Chave • Exemplo da construção de uma relação utilizando chave primária. CREATE TABLE empregado (matricula INT AUTO_INCREMENT, nome VARCHAR(40) NOT NULL, sexo CHAR, salario NUMERIC(10,2), depto INT NOT NULL, PRIMARY KEY (matricula));
  16. 16. Integridade Referencial • Definida com a cláusula FOREIGN KEY • Não é possível definir chaves estrangeiras sem chaves primárias (exclusivas) existentes. • Uma chave estrangeira deve corresponder a um valor de chave primária existente
  17. 17. Integridade Referencial • Exemplo da construção de uma relação utilizando chave estrangeira. CREATE TABLE empregado (matricula INT AUTO_INCREMENT, ... FOREIGN KEY (depto) REFERENCES departamento(codDep));
  18. 18. Integridade Referencial • A cláusula FOREIGN KEY inclui regras de remoção/atualização: • FOREIGN KEY (nome_coluna) REFERENCES nome_tabela [ON DELETE {RESTRICT|CASCADE|SET NULL| SET DEFAULT}] [ON UPDATE {RESTRICT|CASCADE|SET NULL| SET DEFAULT}] • Supondo que T2 tem uma chave estrangeira para T1, vejamos as cláusulas ON DELETE e ON UPDATE
  19. 19. Integridade Referencial • ON DELETE: • RESTRICT: (default) significa que uma tentativa de se remover uma linha de T1 falhará se alguma linha em T2 combina com a chave. • CASCADE: remoção de uma linha de T1 implica em remoção de todas as linhas de T2 que combina com a chave de T1. • SET NULL: remoção de T1 implica em colocar NULL em todos os atributos da chave estrangeira de cada linha de T2 que combina. • SET DEFAULT: remoção de linha em T1 implica em colocar valores DEFAULT nos atributos da chave estrangeira de cada linha de T2 que combina.
  20. 20. Integridade Referencial • ON UPDATE • RESTRICT: (default) update de um atributo de T1 falha se existem linhas em T2 combinando. • CASCADE: update de atributo em T1 implica que linhas que combinam em T2 também serão atualizadas. • SET NULL: update de T1 implica que valores da chave estrangeira em T2 nas linhas que combinam são postos para NULL. • SET DEFAULT: update de T1 implica que valores da chave estrangeira de T2 nas linhas que combinam terão valores default aplicados.
  21. 21. Integridade Referencial • Exemplo da construção de uma relação utilizando chave estrangeira. CREATE TABLE empregado (matricula INT AUTO_INCREMENT, ... FOREIGN KEY (depto) REFERENCES departamento(codDep) ON UPDATE CASCADE);
  22. 22. A Cláusula CHECK • Define uma condição que cada linha deve satisfazer. • Uma única coluna pode ter várias restrições CHECK que fazem referência à coluna na sua definição. • As restrições CHECK podem ser definidas no nível da coluna ou da tabela.
  23. 23. A Cláusula CHECK • Exemplo da construção de uma relação utilizando a cláusula CHECK. CREATE TABLE estudante ( nome char(15) NOT NULL, id_estudante char(10) NOT NULL, nivel char(15) NOT NULL, PRIMARY KEY (id_estudante), CHECK (nivel IN (“Bacharelado”, ”Mestrado”, ”Doutorado”)));
  24. 24. O Comando CREATE – Exemplo CREATE TABLE empregado (matricula INT NOT NULL AUTO_INCREMENT, nome VARCHAR(40) NOT NULL, sexo CHAR, salario NUMERIC(10,2), depto INT NOT NULL, PRIMARY KEY (matricula), CHECK (salario >= 724,00), FOREIGN KEY (depto) REFERENCES departamento(codDep) ON UPDATE CASCADE ON DELETE CASCADE); Observação: este exemplo supõe que a tabela departamento já exista.
  25. 25. O Comando DROP • Remove uma relação do banco de dados. • Exclui todas as informações sobre a relação removida. • Sintaxe: DROP TABLE [IF EXISTS] nome; Onde: • IF EXISTS: preveni um erro de ocorrer se a relação não existir. • nome: nome da relação a ser removida. • Exemplo: • DROP TABLE IF EXISTS empregado;
  26. 26. O Comando ALTER • Permite alterar a estrutura da tabela existente. • Adicionar ou deletar colunas, alterar o tipo de coluna existentes, ou renomear coluna ou tabelas, entre outros. • Os novos atributos terão valores nulos em todas as linhas. • A inclusão de uma coluna requer a especificação do seu tipo de dado. • Está não pode ser definida como NOT NULL.
  27. 27. O Comando ALTER • Sintaxe: • ALTER TABLE nome_relação Opção Descrição ADD [COLUMN] Adiciona uma ou mais colunas CHANGE [COLUMN] Altera o nome da coluna MODIFY [COLUMN] Altera o domínio da coluna DROP [COLUMN] Exclui uma coluna RENAME [TO] Renomeia a Tabela Tabela 1 – Algumas das especificações de ALTER TABLE
  28. 28. O Comando ALTER • Exemplos: • ALTER TABLE nome_tbl RENAME TO novo_nome; • ALTER TABLE clientes DROP email; • ALTER TABLE tarefa ADD COLUMN complete DECIMAL(2,1) AFTER description;
  29. 29. Escolha do SGBD • Para está disciplina o SGBD foi escolhido o MySQL.
  30. 30. Escolha do SGBD • O download do MySQL pode ser feito através do site: • http://dev.mysql.com/downloads/ • Nesta disciplina vamos utiliza-lo através do sistema operacional Ubuntu. • Para fazer o acesso é necessário pelo terminal digite: • mysql -uroot -p
  31. 31. Criação do BD • Criação do banco de dados: • create database nome_do_banco; • Usando o banco de dados: • use nome_do_banco;
  32. 32. Exercício 1. Criar três relações baseadas no funcionamento do IFAL. • Uma das relações deve conter no mínimo 4 domínios de atributos diferentes. • Cada relação deve conter ao menos uma regra de integridade. 2. Escolha uma das relações e faça no mínimo 3 alterações diferentes, sendo uma de cada vez. 3. Pesquise a sintaxe completa para ALTER TABLE e faça, ao menos, 2 modificações diferentes na(s) tabela(s) a sua escolha.
  33. 33. Exercício 4. Crie uma relação cliente e a relação vendedor. 5. Defina as relações a seguir usando SQL: Fornecedor (codigo, nome, cidade) Venda (cod_venda, quantidade, data, cod_forn) • Ser on delete – cascade • Ser on update – cascade Peca (cod_peca, nome, descricao) • É obrigatório que: • Todos os atributos das cinco relações não sejam nulos. • cod_venda seja auto incrementado pelo sistema. • quantidade seja maior que zero. • Nome da peça seja único.
  34. 34. Tipos Definidos pelo Usuário • A SQL aceita duas formas de tipos de dados definidos pelo usuário: • Tipos distintos; e • Tipos estruturados. • É possível que vários atributos possuam o mesmo tipo de dados. • O tipos de dados definidos pelo usuário se propõe a fazer algumas separações como comparar um valor monetário em dólares e em libras, por exemplo.
  35. 35. Tipos Definidos pelo Usuário • A cláusula CREATE TYPE (SQL:1999) pode ser utilizada para criação de um novo tipo. Ex.: CREATE TYPE Dolar AS numeric (10,2) final CREATE TYPE Libra AS numeric (10,2) final • Os tipos recém criados podem ser utilizados como tipos de atributos nas relações. Ex.: CREATE TABLE Conta (num_conta char(10), nome_agencia varchar(15), saldo Dolar)
  36. 36. Tipos Definidos pelo Usuário • Anterior ao SQL:1999 a SQL possuia uma notação semelhante chamada tipo de domínio (SQL-92). • A cláusula em questão era CREATE DOMAIN. Ex.: CREATE DOMAIN Dolar AS numeric (10,2)
  37. 37. Índices • Utilizados para encontrar registros com um valor específico de uma coluna rapidamente. • Sem um índice a procura de um registro ocorre de forma sequencial. • Qual a implicação disto? • Quanto maior a tabela, maior será o custo.
  38. 38. Índices • A utilização de índices torna a busca mais otimizada. • Não há necessidade de se varrer todos os registros. • Como os Índices são Criados? • Automaticamente: Um índice exclusivo é criado automaticamente quando você define uma restrição PRIMARY KEY ou UNIQUE em uma definição de tabela. • Manualmente: Usuários podem criar índices não- exclusivos em colunas para acelerar o tempo de acesso às linhas
  39. 39. Índices • Quando não utilizar índices: • Quando a tabela for pequena. • Quando as colunas não forem utilizadas com frequência como uma condição na consulta. • Quando a tabela for atualizada com frequência.
  40. 40. Índices • Índices podem ser criados tanto no momento da concepção da tabela quanto em uma tabela já existente. • Sintaxe de criação de índices: CREATE [UNIQUE|FULLTEXT] INDEX nome_indice ON nome_tabela (index_col_name,...)
  41. 41. Índices • Exemplos: CREATE TABLE CLIENTES(Codigo INT, Nome VARCHAR(50), INDEX (Codigo)); CREATE TABLE TESTE(Nome VARCHAR(40) NOT NULL, INDEX Nome_indice (Nome(10))); CREATE TABLE TESTE (id INT NOT NULL, ultimo_nome CHAR(30) NOT NULL, primeiro_nome CHAR(30) NOT NULL, PRIMARY KEY (id), INDEX nome (ultimo_nome, primeiro_nome));
  42. 42. Índices • Caso a tabela já existir: CREATE INDEX idx_CLIENTES_CODIGO ON CLIENTES(Codigo); • Para alterar: ALTER TABLE TESTE ADD INDEX(campo1, campo2);
  43. 43. Índices • Para eliminar um índice: DROP INDEX indice_nome ON tabela_nome • Ex.: DROP INDEX OBS.: Para excluir uma chave primária, o nome do índice é sempre PRIMARY, que deve ser especificado como um identificador entre aspas porque PRIMARY é uma palavra reservada.
  44. 44. Exercício • Elabore as relações a seguir conforme o solicitado nas regras. Empregado(matricula, nome, salario, supervisor, depto) Departamento(codDep, nome, gerente, dataIni) Projeto(codProj, nome, local, depart) Alocacao(matricula, codProj, horas) Dependente(codDepend, matricula, nome, sexo)
  45. 45. Exercício • Regras: • As chaves primárias das relações devem ser automaticamente incrementadas pelo sistema. • Nenhum dos atributos pode ser nulo, com exceção do atributo supervisor pertencente a relação Empregado. • O nome do projeto e o nome do departamento devem ser únicos. • Quando nada for digitado para ser armazenado no atributo supervisor, na relação Empregado, “Não tem supervisor” deve ser escrito em seu lugar.
  46. 46. Exercício • Qualquer atualização ou deleção deve ser feito em cascata pelo sistema. • Na relação Empregado, o atributo nome deve ser utilizado como um índice de tamanho 10. • Crie um índice para a relação Empregado e inclua o atributo matricula como índice. • Altere a relação Departamento de modo a incluir um índice nos atributos nome e gerente. • Altere a relação Dependente de modo a incluir um índice nos atributos codDepend e matricula. • Exclua o índice presente na relação Empregado.
  47. 47. Arquitetura e Gerenciamento de Banco de Dados SQL – (DDL) Profª Débora Souza debora.slsouza@gmail.com

×