GES013 - Sistema de Banco de Dados SQL DDL e Implementação no PostgreSQL Ilmério Reis da Silva ilmerio arroba ufu.br www.facom.ufu.br/~ilmerio/sbd UFU/FACOM/BCC
SQL Def. A SQL(Structured Query Language) é uma Linguagem de Consulta Estruturada declarativa para acesso a sistemas de banco de dados relacionais. OBS: como linguagem declarativa descreve o problema ao invés da solução, especificando o que deve ser feito e não como. UFU/FACOM Página 2
SQL - Histórico 1970s - SEQUEL do SYSTEM R nos laboratórios da IBM 1986 Padrão ANSI chamado SQL1 ou SQL-86 1992 SQL2 => introdução de chave estrangeira 1999 SQL3 => gatilhos; características objetorelacional(tipo LOB-Large Object); consultas recursivas, etc. 2003 - SQL-2003: mais recursos para definição de tipos (OO); SQL/XML; etc. 2008 SQL-2008: mais recursos para orientação a objetos UFU/FACOM Página 3
SQL/ DDLExemplos SGBDs UFU/FACOM Página 4
SQL Principais Classes de Comandos Duas classes importantes de comandos: DDL: Data definition language Comandos para a definição de dados DML: Data manipulation language Comandos para a manipulação de dados DML interativa interface direta com o SGBD DML embutida utilizada em programas de aplicação UFU/FACOM Página 5
SQL-DDL Def SQL/DDL (Data Definition Language) permite ao usuário definir tabelas e elementos associados. OBS: A SQL/DDL se caracteriza por poucos comandos básicos, embora implementações comerciais tenham várias extensões. UFU/FACOM Página 6
SQL/ DDL Conceitos associados Banco de dados e Catálogo Esquema Tabela Linha Coluna Índice UFU/FACOM Página 7
SQL/ DDL Comandos CREATE Cria uma definição CREATE TABLE tab... ALTER Altera uma definição ALTER TABLE tab ADD... DROP Exclui uma definição DROP TABLE tab UFU/FACOM Página 8
SQL/ DDL Abrangência Definição de tabelas Definição de restrições de integridade Definição de índices Definição de privilégios de acesso Definição de visões UFU/FACOM Página 9
O SGBD PostgreSQL PostgreSql Um SGBD objeto-relacional. UFU/FACOM Página 10
PostgreSQL - Breve Histórico 1986-1993: Postgres / University of California at Berkeley 1995: Postgres95 (Open source) / PostgreSQL 6.0; 2005: PostgreSQL 8.0 com facilidades de instalação em Windows 2010: PostgreSQL 9.0 replicação nativa UFU/FACOM Página 11
PostgreSql - Principais Características implementa SQL92/SQL1999; herança tipos de dados funções restrições (constraints) gatilhos (triggers) regras(rules) integridade transacional UFU/FACOM Página 12
PostgreSql Criação de Banco de Dados CREATE DATABASE nome [ [ WITH ] [ OWNER [=] dono_bd ] [ TEMPLATE [=] modelo ] [ ENCODING [=] codificação ] [ TABLESPACE [=] tablespace ] ] [ CONNECTION LIMIT [=] limite_con ] ] Exemplo: CREATE DATABASE estbx WITH OWNER estgx; UFU/FACOM Página 13
PostgreSql Convenção de Sintaxe Convenção UPPERCASE (maiúsculo) Palavra-chave SQL. lowercase (minúsculo) Identificadores ou constantes SQL informadas pelo usuário itálico Nome de um bloco de sintaxe. Essa convenção é usada para indicar blocos longos de sintaxe que podem ser usados em mais de um local. (barra vertical) Separa elementos opcionais da sintaxe dentro de colchetes ou UFU/FACOM chaves. Somente um dos itens pode ser escolhido. Página 14
PostgreSql Convenção de Sintaxe (cont...) Convenção [ ] (colchetes) Item de sintaxe opcional. Os colchetes não fazem parte do comando. { } (chaves) Item da sintaxe obrigatório. As chaves não fazem parte do comando. [,...] O item precedente pode ser repetido N vezes. A separação entre os itens é feita por uma vírgula UFU/FACOM Página 15
PostgreSql - Sintaxe Sintaxe completa: consultar manual PostgreSQL www.postgresql.org/docs/8.4/static/sql-createdatabase.html UFU/FACOM Página 16
PostgreSql Criação de Esquemas CREATE SCHEMA schemaname [ AUTHORIZATION username ] Exemplo: CREATE SCHEMA company UFU/FACOM Página 17
PostgreSql Criação de Tabela CREATE TABLE tabela ( {coluna tipo [restricoes coluna] restricoes tabela} [,...] ) [ INHERITS (tabela pai [,...])] UFU/FACOM Página 18
PostgreSql Exemplo de Tabela CREATE TABLE tabela ({coluna tipo [restricoes coluna] restricoes tabela} [,...]) [ INHERITS (tabela pai [,...])] Exemplos de identificadores de tabela: company.employee public.employee employee UFU/FACOM Página 19
PostgreSql regras para identificadores Iniciam com letras (a-z) ou underscore (_) Caracteres subsequentes: letras, dígitos (0-9), _ Identificadores e palavras-chave não são casesensite UPDATE MY_TABLE SET A = 5; update my_table SeT a = 5; Convenção adotada Palavras-chave em maiúscula Identificadores em minúsculo UPDATE my_table SET a = 5; Identificadores com aspas Aceitam quaisquer caracteres UPDATE "my_table" SET "a" = 5; UFU/FACOM Página 20
PostgreSql regras para identificadores cont. Ao colocar aspas em um identificador ele torna-se casesensitive Identificadores sem aspas são sempre transformados em minúsculo (embora o padrão SQL defina que se transforme em maiúscula) Se você criar um esquema ou tabela usando a interface gráfica do pgadmin e, caso o identificador deste objeto não seja composto por letras minúsculas, o objeto será identificado somente por meio de aspas. Faça o teste, criando esquemas e tabelas por meio da interface gráfica e utilizando letras maiúsculas. Mais informações e referência: http://www.postgresql.org/docs/8.4/static/sql-syntax -lexical.html UFU/FACOM Página 21
PostgreSql Exemplo de Tipos CREATE TABLE tabela ({coluna tipo [restricoes coluna] restricoes tabela} [,...]) [ INHERITS (tabela pai [,...])] Exemplos de coluna tipo: nome VARCHAR(40) sexo CHAR salario DECIMAL(10, 2) UFU/FACOM Página 22
PostgreSql Outros exemplos de tipos CREATE TABLE tabela ({coluna tipo [restricoes coluna] restricoes tabela} [,...]) [ INHERITS (tabela pai [,...])] Outros tipos: INT; SMALLINT; REAL; DATE; TIME; TIMESTAMP; BOOLEAN, GEOMETRIC(POINT, LINE, etc), NETWORK ADDRES, BIT, XML, ARRAYS, COMPOSITE, OID, etc. VER DOCUMENTAÇÃO DO POSTGRES: www.postgres.org UFU/FACOM Página 23
PostgreSql Tipo Lógico UFU/FACOM Página 24
PostgreSql Tipos para números exatos UFU/FACOM Página 25
PostgreSql Tipos p/ números aproximados UFU/FACOM Página 26
PostgreSql Tipos p/ dados temporais UFU/FACOM Página 27
PostgreSql Tipos p/ cadeias de caracteres UFU/FACOM Página 28
PostgreSql Outros Tipos Existem outros tipos de dados além dos apresentados anteriormente. Consulte o manual do PostgreSQL: http://www.postgresql.org/docs/8.4/static /datatype.html Livro: Beginning databases with PostgreSQL: Matthew and Stones, 2nd ed. Apress(citado pelo Prof. Bruno) UFU/FACOM Página 29
PostgreSql Exemplo de restrições de coluna CREATE TABLE tabela ({coluna tipo [restricoes coluna] restricoes tabela} [,...]) [ INHERITS (tabela pai [,...])] [CONSTRAINT restrição] {NOT NULL NULL UNIQUE PRIMARY KEY CHECK (expressão) REFERENCES tabela [ ( coluna ) ] [ON DELETE ação ] [ ON UPDATE ação ]} [DEFERRABLE NOT DEFERRABLE ] [INITIALLY DEFERRED INITIALLY IMMEDIATE ] Exemplos de restricoes coluna: sexo CHAR CHECK (sexo IN ( M, F )) UFU/FACOM Página 30
PostgreSql DOMÍNIOS UFU/FACOM Página 31
PostgreSql CREATE DOMAIN CREATE DOMAIN name [ AS ] data_type [ DEFAULT expression ] [ constraint [... ] ] onde constraint é: [ CONSTRAINT constraint_name ] { NOT NULL NULL CHECK (expression) UFU/FACOM Página 32
PostgreSql CREATE DOMAIN- Exemplos CREATE DOMAIN sexo AS char(1) DEFAULT 'M' NOT NULL CHECK ( VALUE IN ('M', 'F')); CREATE DOMAIN data_evento AS date CONSTRAINT valida_data CHECK ( VALUE > '01/01/1900' AND VALUE < '01/01/2099'); Obs.: podemos então definir os tipos sexo ou data_evento no CREATE TABLE UFU/FACOM Página 33
PostgreSql Exemplo de restrição de tabela CREATE TABLE tabela ({coluna tipo [restricoes coluna] restricoes tabela} [,...]) [ INHERITS (tabela pai [,...])] [CONSTRAINT restrição] {UNIQUE(coluna [,...]) PRIMARY KEY(coluna [,...]) CHECK (expressão) FOREIGN KEY REFERENCES tabela [ ( coluna, [,...] ) ] [ON DELETE ação ] [ ON UPDATE ação ]} [DEFERRABLE NOT DEFERRABLE ] [INITIALLY DEFERRED INITIALLY IMMEDIATE ] Exemplo restricoes tabela: PRIMARY KEY(ssn) UFU/FACOM Página 34
PostgreSql Exemplo de criação de tabela CREATE TABLE emp ( ssn CHAR(9) NOT NULL, name VARCHAR(40), sex CHAR CHECK (sex IN ( M, F )), salary DECIMAL(10,2), mngrsalary DECIMAL(10,2), CHECK (mngrsalary > salary), PRIMARY KEY (ssn)); UFU/FACOM Página 35
PostgreSql CREATE TABLE sintaxe completa Sintaxe completa: consultar manual PostgreSQL http://www.postgresql.org/docs/8.4/static/sql-createtable.html UFU/FACOM Página 36
PostgreSql Company Database - employee CREATE TABLE employee (fname VARCHAR (15) NOT NULL, minit CHAR, lname VARCHAR (15) NOT NULL, ssn CHAR(9) NOT NULL, bdate DATE, address VARCHAR(30), sex CHAR CHECK (sex IN ( M, F )), salary DECIMAL(10,2), superssn CHAR(9), dno INT NOT NULL, PRIMARY KEY (ssn)); CREATE TABLE department (dname varchar(15) NOT NULL, dnumber INT NOT NULL, mgrssn CHAR(9), mgrstartdate DATE, PRIMARY KEY (dnumber) ); UFU/FACOM Página 37
PostgreSql Company Database - outras CREATE TABLE dependent (essn CHAR(9) NOT NULL, dependent_name VARCHAR(30) NOT NULL, sex CHAR, bdate DATE, relationship VARCHAR(15), PRIMARY KEY (essn, dependent_name) ); CREATE TABLE dept_locations (dnumber INT NOT NULL, dlocation VARCHAR(15)); CREATE TABLE project (pname VARCHAR(20), pnumber INT NOT NULL, plocation VARCHAR(15), dnum INT, PRIMARY KEY (pnumber)) CREATE TABLE works_on (essn CHAR(9) NOT NULL, pno INT NOT NULL, hours DECIMAL(4,2)); UFU/FACOM Página 38
PostgreSql DROP TABLE DROP TABLE Exclui uma tabela existente de um banco de dados. Não pode ser excluída a tabela que possui alguma referência. Neste caso, deve-se primeiro excluir a tabela que possui algum campo que a está referenciando e depois excluir a tabela inicial. DROP TABLE <nome da tabela> Exemplo: /* Apaga tabela Departamento */ DROP TABLE Departamento; UFU/FACOM Página 39
PostgreSql ALTER TABLE ALTER TABLE Altera as definições de campos e de restrições. ALTER TABLE <nome da tabela> ADD <definição de Coluna> ADD <Restrição de integridade> ALTER <definição de Coluna> ALTER <definição de Coluna> DEFAULT <default-value> ALTER <definição de Coluna> [ NOT ] NULL DROP <definição de Coluna> DROP CONSTRAINT <nome da restrição> RENAME <novo nome> RENAME <Atributo> TO <novo atributo> Onde <definição de coluna> pode ser: <Nome Atributo> <Tipo de Dado> [NULL ] [ DEFAULT default-value ] UFU/FACOM Página 40
PostgreSql Company Database Alter table ALTER TABLE employee ADD CONSTRAINT emp_superssn FOREIGN KEY (superssn) REFERENCES employee(ssn) DEFERRABLE ALTER TABLE employee ADD CONSTRAINT emp_dno FOREIGN KEY (dno) REFERENCES department(dnumber) DEFERRABLE; ALTER TABLE department ADD CONSTRAINT dept_mgrssn FOREIGN KEY (mgrssn) REFERENCES employee(ssn) DEFERRABLE; ALTER TABLE dependent ADD CONSTRAINT depe_essn FOREIGN KEY(essn) REFERENCES employee(ssn); UFU/FACOM Página 41
PostgreSql Company Database Alter table 2 ALTER TABLE dept_locations ADD CONSTRAINT loc_dnumber FOREIGN KEY (dnumber) REFERENCES department(dnumber) ALTER TABLE project ADD CONSTRAINT proj_dnum FOREIGN KEY (dnum) REFERENCES department(dnumber) ALTER TABLE works_on ADD CONSTRAINT w_essn FOREIGN KEY (essn) REFERENCES employee(ssn), ALTER TABLE works_on ADD CONSTRAINT w_pno FOREIGN KEY (pno) REFERENCES project(pnumber) UFU/FACOM Página 42
PostgreSql Objetivos da Criação de Índices OBJETIVOS: Restrições de integridade: chaves Desempenho: atributos frequentemente usados em comparações da cláusula WHERE) CREATE [UNIQUE] INDEX nome_do_indice ON tabela [ USING metodo_de_acesso ] ( coluna [ nome_operador ] [,...] ) [ WHERE predicado ] UFU/FACOM Página 43
PostgreSql sintaxe de criação de índices CREATE [UNIQUE] INDEX nome_do_indice ON tabela [USING metodo_de_acesso ] (coluna [nome_operador] [,...] ) [WHERE predicado ] metodo_de_acesso: BTREE; RTREE; HASH; GIST; BTREE: para operadores <,<=,=,>=,> RTREE: para operadores espaciais, por exemplo, left of HASH: para operador de igualdade (=) GIST: operadores genéricos entre classes nome_operador: operador usado na comparação, por exemplo, valor absoluto em BTREE predicado: usado para índices parciais (seleção da tabela) UFU/FACOM Página 44
PostgreSql exemplos de criação de índices EXEMPLOS: CREATE INDEX ind_ename ON employee (fname, minit, lname) CREATE UNIQUE INDEX ind_pname ON project (pname) OBS: antes de implementar um BD em nosso SGBD, vamos discutir alguns detalhes do servidor PostgreSQL UFU/FACOM Página 45
PostgreSql - Arquitetura Cliente/Servidor Servidor - processo postmaster acessa arquivos aceita conexões cria canal direto cliente/servidor Cliente ferramente textual, por exemplo, psql aplicação gráfica, por exemplo, pgadmin servidor web, por exemplo, apache rodando phpadmin UFU/FACOM Página 46
PostgreSql Criando o Ambiente no Servidor Superusuário, geralmente o postgres Criando um Cluster de BD: [postgres]$ initdb -D <diretório> Configurando: postgresql.conf : geral, como número de conexões pg_hba.conf : métodos de autenticação de conexões pg_ident.conf : mapeamento de ids de usuários do SO Colocando o SGBD, que gerencia um Cluster de BD, no ar [postgres]$ pg_ctl start -l <arquivo_log> -D <diretório> UFU/FACOM Página 47
PostgreSql Criando um usuário Criando um usuário CREATE USER nome [ [ WITH ] opções [... ] ] Conexão via psql: [postgres]$ psql template1 Exemplo: template1 => CREATE USER estgx template1 => PASSWORD ******* ; UFU/FACOM Página 48
PostgreSql Criando um banco de dados Exemplo de um banco de dados criado para um usuário: template1 => CREATE DATABASE estbx template1 => OWNER estgx; UFU/FACOM Página 49
PostgreSql Controle de acesso - Grant GRANT lista_privilegios ON tipo_objeto lista_objetos TO lista_usuarios Exemplo: GRANT SELECT, DELETE ON employee TO joao UFU/FACOM Página 50
PostgreSql Concedendo Privilégios Privilégios de acordo com o objeto: TABLE: { { SELECT INSERT UPDATE DELETE RULE REFERENCES TRIGGER } [,...] ALL [PRIVILEGES] } DATABASE: { { CREATE TEMPORARY TEMP } [,...] ALL [ PRIVILEGES] } FUNCTION: { EXECUTE ALL [PRIVILEGES] } LANGUAGE: { USAGE ALL [ PRIVILEGES ] } SCHEMA: {{CREATE USAGE} [,...] ALL [PRIVILEGES] } UFU/FACOM Página 51
Bibliografia/Exercícios Ver roteiros de aulas de laboratório [EN] Capítulo 4, 5 [RG] Capítulo 5 [SK] Capítulo 4, 5 e 6 Sugestão de leitura: Lima, A L G, Padrão SQL e sua Evolução, http://www.ic.unicamp.br/~geovane/mo410-091/ch05-padraosql-art.pdf, acesso em setembro/2016 Sugestão de consulta: Manuais do PostgreSQL UFU/FACOM Página 52
FIM SQL DDL e PostgreSQL FIM SQL DDL e PostgreSQL UFU/FACOM Página 53