View
218
Download
0
Category
Preview:
Citation preview
GES013 - Sistema de Banco de DadosSQL DDL e Implementação no PostgreSQL
Ilmério Reis da Silvailmerio arroba ufu.brwww.facom.ufu.br/~ilmerio/sbdUFU/FACOM/BCC
UFU/FACOM Página 2
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 3
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 objeto-
relacional(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 5
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 6
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 7
SQL/ DDL Conceitos associados
• Banco de dados e Catálogo
• Esquema
• Tabela • Linha• Coluna• Índice
UFU/FACOM Página 8
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 9
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 11
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 12
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 13
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 14
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 chaves. Somente um dos itens pode ser escolhido.
UFU/FACOM Página 15
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 16
PostgreSql - Sintaxe
Sintaxe completa: consultar manual PostgreSQL
www.postgresql.org/docs/8.4/static/sql-createdatabase.html
UFU/FACOM Página 17
PostgreSql – Criação de Esquemas
CREATE SCHEMA schemaname
[ AUTHORIZATION username ]
Exemplo:
CREATE SCHEMA company
UFU/FACOM Página 18
PostgreSql – Criação de Tabela
CREATE TABLE tabela (
{coluna tipo [restricoes coluna] | restricoes tabela}
[, ...]
)
[ INHERITS (tabela pai [, ...])]
UFU/FACOM Página 19
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 20
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 case-sensite
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 21
PostgreSql – regras para identificadores cont. Ao colocar aspas em um identificador ele torna-se case-sensitive
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 22
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 23
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 29
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 30
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 32
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 33
PostgreSql –CREATE DOMAIN- Exemplos
CREATE DOMAIN sexo AS char(1)DEFAULT 'M'NOT NULLCHECK ( VALUE IN ('M', 'F'));
CREATE DOMAIN data_evento AS dateCONSTRAINT 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 34
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 35
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 36
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 37
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 38
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 39
PostgreSql – DROP TABLEDROP 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 40
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 41
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 42
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 43
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 44
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 45
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 46
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 47
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 48
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 49
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 50
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 51
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 52
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
Recommended