PROJETO DE BANCO DE DADOS - INTRODUÇÃO AO SQL Prof. Angelo Augusto Frozza, M.Sc. INTRODUÇÃO AO Ferramentas a serem usadas nessa etapa Ferramenta Case SQL brModelo (versão 2.0) Sistema Gerenciador de Banco de Dados (SGBD) SQLite 3 (executa via Pen Driver) PostgreSQL versão 9 ou superior SQL – STRUTURED QUERY LANGUAGE Em 1986, o American Nacional Standard Institute (ANSI) publicou e padronizou a linguagem SQL; SQL estabeleceu-se como linguagem padrão do Modelo Relacional; “Deveria” ser padrão para todos os gerenciadores de Banco de Dados: 1º versão 1989 2º versão 1992 (SQL-92) 3º versão 1999 (SQL:1999) 4º versão 2003 (SQL:2003) SQL – STRUTURED QUERY LANGUAGE Os comandos SQL podem ser agrupados em 5 classes: DDL – Data Definition Language DML – Data Manipulation Language Comandos para o Controle do Gerenciador, Conexão e Usuário DTL – Data Transaction Language Comandos para a Manipulação de Dados (insert, select, update e delete) DCL – Data Control Language Comandos para a Definição de Dados (create, alter e drop) Comandos para o Controle de Transações DQL – Data Query Language Comando para o consulta a dados (select) SQL – STRUTURED QUERY LANGUAGE Exemplos de objetos manipuláveis em um Banco de Dados: Database (Base de Dados) Table (Tabelas) Index (Indíces) View (Visões) Stored Procedures (Procedimentos) Triggers (Gatilhos) Domain (Domínios) Generator (Variáveis Globais) Exception (Excecões) User (Usuários) Role (Grupos de Usuários) SQL – STRUTURED QUERY LANGUAGE Comandos básicos da Linguagem de Definição dos Dados (DDL): CREATE ALTER DROP SQL – STRUTURED QUERY LANGUAGE Objeto Database (Base de Dados) Definição Arquivo que contém a descrição dos dados, metadados, esquema do banco de dados; Contém todos os objetos criados; Contém os dados; Detém a segurança da estrutura completa; Sintaxe: Create database nome_banco SQL – STRUTURED QUERY LANGUAGE Objeto Domínio – Definição São tipos de dados criados para evitar redundâncias de tipos e facilitar a manutenção do Banco de Dados; SQL – STRUTURED QUERY LANGUAGE Criando objetos Domínio CREATE DOMAIN d_logradouro VARCHAR(40); CREATE DOMAIN d_numero VARCHAR(6); CREATE DOMAIN d_cep VARCHAR(8); CREATE DOMAIN d_bairro VARCHAR(30); CREATE DOMAIN d_complemento VARCHAR(20); CREATE DOMAIN d_fone VARCHAR(10); CREATE DOMAIN d_cpf VARCHAR(11); CREATE DOMAIN d_rg VARCHAR(15); CREATE DOMAIN d_email VARCHAR(50); SQL – STRUTURED QUERY LANGUAGE Criando objetos Domínio CREATE DOMAIN d_logico VARCHAR(1) CHECK (VALUE IN (‘S’, ‘N’)); CREATE DOMAIN d_sexo VARCHAR(1) CHECK (VALUE IN (‘M’, ‘F’)); CREATE DOMAIN d_estado_civil VARCHAR(15) CHECK (VALUE IN (‘CASADO’, ‘SOLTEIRO’, ‘DESQUITADO’, ‘SEPARADO’, ‘OUTROS’)); CREATE DOMAIN d_data_atual AS DATE DEFAULT 'NOW‘ NOT NULL; CREATE DOMAIN d_comentarios AS BYTEA NOT NULL; SQL – STRUTURED QUERY LANGUAGE Alterando um objeto Domínio ALTER DOMAIN d_logico SET DEFAULT ‘S’; ALTER DOMAIN nome { SET DEFAULT expressão | DROP DEFAULT } ALTER DOMAIN nome { SET | DROP } NOT NULL ALTER DOMAIN nome ADD restrição_de_domínio ALTER DOMAIN nome DROP CONSTRAINT nome_restrição [ RESTRICT | CASCADE ] ALTER DOMAIN nome OWNER TO novo_dono SQL – STRUTURED QUERY LANGUAGE Eliminando um objeto Domínio DROP DOMAIN d_logico; DROP DOMAIN d_email; SQL – STRUTURED QUERY LANGUAGE Objeto Table – Definição É o local onde armazenamos os dados; Regras para definição do objeto TABLE: Primeiro criar as tabelas que não possuem chave estrangeira; A chave primária sempre será um campo não nulo; Criar Constraints (dar nomes às chaves primárias e estrangeiras); Constraints são restrições criadas para manter a consistência da base de dados; Não podem existir Contraints com mesmo nome na mesma base de dados; Ex: A definição de uma chave primária é uma restrição; A definição de uma chave estrangeira é uma restrição; SQL – STRUTURED QUERY LANGUAGE Criando um Objeto Table Tabela Municipio CREATE TABLE municipio ( id_municipio INTEGER NOT NULL, nome VARCHAR(35) NOT NULL, uf VARCHAR(2) NOT NULL, CONSTRAINT pk_municipio PRIMARY KEY (id_municipio) ); SQL – STRUTURED QUERY LANGUAGE Criando um Objeto Table CREATE TABLE contador ( id_contador INTEGER NOT NULL, nome VARCHAR(50) NOT NULL, logradouro D_LOGRADOURO, nr D_NUMERO, complemento D_COMPLEMENTO, cep D_CEP, bairro D_BAIRRO, fone D_FONE, fax D_FONE, email D_EMAIL, id_municipio INTEGER NOT NULL, CONSTRAINT pk_contador PRIMARY KEY (id_contador), CONSTRAINT fk_contador_municipio FOREIGN KEY (id_municipio) REFERENCES municipio On Update Cascade On Delete no Action ); SQL – STRUTURED QUERY LANGUAGE Alterando a estrutura de um objeto Table - Adicionar o campo data do cadastro na tabela contador: Alter Table Contador add Data D_DataAtual; - Adicionar o campo teste do cadastro na tabela contador: Alter Table Contador add Teste Varchar(10); - Alterando o tipo de um atributo na entidade contador; Alter Table Contador alter nome type varchar(50) not null; - Eliminando um atributo na entidade contador; Alter Table Contador drop teste; SQL – STRUTURED QUERY LANGUAGE Eliminando um objeto Table Drop Table Municipio; Não vai aceitar, pois existe a tabela contador relacionada; 1o) Drop Table Contador; 2o) Drop Table Municipio; SQL – STRUTURED QUERY LANGUAGE Integridade referencial Integridade referencial é um conjunto de regras e de consistências entre os registros de duas tabelas que se relacionam; Como foi visto no modelo relacional: quando duas tabelas se relacionam, a chave primária de uma é copiada para a outra; se esses dados forem alterados ou excluídos da tabela original é necessário verificar o que será feito com os dados e registros duplicados na outra tabela; SQL – STRUTURED QUERY LANGUAGE Integridade referencial Quando se define uma integridade referencial, está se definindo o procedimento que será tomado quando esses processos ocorrerem; Sejam duas tabelas “A” e “B” que se relacionam através de uma coluna “c” que é a chave primária de “A” e, portanto, foi repetida em “B” para se fazer o relacionamento; Quando se define uma integridade referencial para esse relacionamento, está se definindo que a coluna “c” da tabela “B” só pode conter valores já cadastrados na coluna “c” da tabela “A”; SQL – STRUTURED QUERY LANGUAGE Integridade referencial Existem três formas de se manter essa regra quando registros da tabela “A” são excluídos: Restrict: define que, se o valor da coluna “c” de “A” existir em algum registro de “B”, o registro não poderá ser excluído e uma mensagem de erro retornará para a aplicação; Cascade: define que, se o valor da coluna “c” de “A” existir em algum registro de “B”, todos os registros que possuírem esse valor serão também excluídos; Set Null: define que, se o valor da coluna “c” de “A” existir em algum registro de “B”, os valores de “c” em todos os registros serão transformados para “Null”; SQL – STRUTURED QUERY LANGUAGE Integridade referencial CREATE TABLE contador ( id_contador INTEGER NOT NULL, nome VARCHAR(50) NOT NULL, logradouro D_LOGRADOURO, nr D_NUMERO, complemento D_COMPLEMENTO, cep D_CEP, bairro D_BAIRRO, fone D_FONE, fax D_FONE, email D_EMAIL, id_municipio INTEGER NOT NULL, CONSTRAINT pk_contador PRIMARY KEY (id_contador), CONSTRAINT fk_contador_municipio FOREIGN KEY (id_municipio) REFERENCES municipio On Update Cascade On Delete no Action ); SQL – STRUTURED QUERY LANGUAGE Integridade referencial (SQLite3) SQL – STRUTURED QUERY LANGUAGE Integridade referencial (SQLite3) SQL – STRUTURED QUERY LANGUAGE Restrições em campos (SQLite 3): SQL – STRUTURED QUERY LANGUAGE Exemplo geral: CREATE TABLE example ( id_example INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, inteiro_opcional INTEGER, inteiro_obrigatorio INTEGER NOT NULL, real_opcional NUMBER(15,2), real_obrigatorio NUMBER(15,2) NOT NULL, texto_opcional VARCHAR(30), texto_obrigatorio VARCHAR(30) NOT NULL, texto_unico VARCHAR(30) UNIQUE, data DATE, hora TIME, logico BOOLEAN ); SQL – STRUTURED QUERY LANGUAGE Resumo: Foi visto a criação dos seguintes objetos: Database (Base de Dados) Table (Tabelas) Index (Indíces) Domain (Domínios) Não suportado pelo SQLite 3