• Nenhum resultado encontrado

GBC043 - Sistemas de Banco de Dados SQL/DDL e Implementação no PostgreSQL

N/A
N/A
Protected

Academic year: 2021

Share "GBC043 - Sistemas de Banco de Dados SQL/DDL e Implementação no PostgreSQL"

Copied!
53
0
0

Texto

(1)

GBC043 - Sistemas 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/GBC043

MS Teams: SBD.GBC043.2020/1

(2)

Página 2

SBD

Visão Panorâmica do Programa Teórico

Introdução a SBD, Modelos de Dados e Projeto de BDManipulação de Dados

PL/pgSQL, Transações e Controle de Concorrência

(3)

Página 3

SBD

Projeto e Implementação de SBD

Linguagem SQL/DDL

Comandos de criação e eliminação de tabelas

Especificação de restrições em bancos de dados

Evolução de esquemas de banco de dados

Linguagem SQL/DML

Comandos de inserção de tuplas em tabelas

Comandos de alteração e supressão de tuplas

Comandos de consulta (simples e complexos)

Definição de visões

Álgebra RelacionalCálculo Relacional

(4)

UFU/FACOM Página 4

SQL - Definição

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.

(5)

UFU/FACOM Página 5

SQL – Breve Histórico

1970s → SEQUEL/SYSTEM R - IBM

SQL-86 → Padrão ANSI (SQL1)

SQL–92 → introdução de chave estrangeira (SQL2)SQL:1999 → gatilhos; características

objeto-relacional(tipo LOB-Large Object); consultas recursivas, etc. (SQL3)

SQL:2003 → mais recursos para tipos (OO); SQL/XML

SQL:2006 → XQUERY

SQL:2008: mais recursos para orientação a objetos

SQL:2011: bd temporal (system versioning)

(6)

UFU/FACOM Página 6

(7)

UFU/FACOM Página 7

SQL - Classes de Comandos

Duas classes principais de comandos SQL:

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

(8)

UFU/FACOM Página 8

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.

(9)

UFU/FACOM Página 9

SQL/ DDL Conceitos associados

Banco de dados e Catálogo EsquemaTabela LinhaColunaÍndice

(10)

UFU/FACOM Página 10

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

(11)

UFU/FACOM Página 11

SQL/ DDL Abrangência

Definição de tabelas

Definição de restrições de integridadeDefinição de índices

Definição de privilégios de acessoDefinição de visões

(12)

UFU/FACOM Página 12

O SGBD PostgreSQL

PostgreSQL

(13)

UFU/FACOM Página 13

PostgreSQL - Breve Histórico

1986-1993: Postgres / University of California at Berkeley1995: Postgres95 (Open source) / PostgreSQL 6;

2005: PostgreSQL 8 suporte nativo para Windows2010: PostgreSQL 9 replicação nativa

2017: PostgreSQL 10 melhorias no paralelismo

2018: PostgreSQL 11 melhorias em particionamento e transações embutidas em procedimentos armazenados2019: PostgreSQL 12 melhorias de desempenho

(14)

UFU/FACOM Página 14

PostgreSQL - Principais Características

implementa padrão SQLherançatipos de dadosfunçõesrestrições (constraints)gatilhos (triggers)regras(rules)integridade transacional

(15)

UFU/FACOM Página 15

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 sbdX

WITH OWNER bccX;

(16)

UFU/FACOM Página 16

PostgreSql - Sintaxe do manual/slides

Sintaxe completa: consultar manual PostgreSQL

http://www.postgresql.org/docs/8.4/static/sql -createtable.html 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.

[ ] (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

(17)

UFU/FACOM Página 17

PostgreSQL – Criação de Esquemas

CREATE SCHEMA schemaname [ AUTHORIZATION username ]

Exemplo:

(18)

UFU/FACOM Página 18

PostgreSQL – Criação de Tabela

CREATE TABLE tabela (

{coluna tipo [restricoes coluna] | restricoes tabela} [, ...]

)

(19)

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

(20)

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úsculaIdentificadores em minúsculo

UPDATE my_table SET a = 5;

Identificadores com aspas

Aceitam quaisquer caracteres

(21)

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:

(22)

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)

(23)

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

(24)

UFU/FACOM Página 24

(25)

UFU/FACOM Página 25

(26)

UFU/FACOM Página 26

(27)

UFU/FACOM Página 27

(28)

UFU/FACOM Página 28

(29)

UFU/FACOM Página 29

PostgreSQL – Outros Tipos

Existem outros tipos de dados além dos

apresentados anteriormente. Consulte o manual do

PostgreSQL:

(30)

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:

(31)

UFU/FACOM Página 31

(32)

UFU/FACOM Página 32

PostgreSQL – CREATE DOMAIN

CREATE DOMAIN name [ AS ] data_type [ DEFAULT expression ]

[ constraint [ ... ] ] onde constraint é:

[ CONSTRAINT constraint_name ]

(33)

UFU/FACOM Página 33

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

(34)

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)

(35)

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));

(36)

UFU/FACOM Página 36

PostgreSQL – CREATE TABLE

Sintaxe completa: consultar manual PostgreSQL

(37)

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,

(38)

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));

(39)

UFU/FACOM Página 39

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 */

(40)

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 ]

(41)

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);

(42)

UFU/FACOM Página 42

PostgreSQL–Company Database–Alter table2

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

(43)

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 ]

(44)

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

(45)

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

(46)

UFU/FACOM Página 46

PostgreSQL - Arquitetura Cliente/Servidor

Servidor - processo postmaster

acessa arquivosaceita 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

(47)

UFU/FACOM Página 47

PostgreSQL – Criando o Ambiente no

Servidor

Superusuário, geralmente o postgresCriando um Cluster de BD:

[postgres]$ initdb -D <diretório>

Configurando:

postgresql.conf : geral, como número de conexõespg_hba.conf : métodos de autenticação de conexõespg_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>

(48)

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 uuuuuuuu

template1 => PASSWORD ‘pwpwpwpw’;

(49)

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 dbdbdbdb template1 => OWNER uuuuuuuu;

(50)

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

(51)

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] }

(52)

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

(53)

UFU/FACOM Página 53

Referências

Documentos relacionados

mori foi realizada a análise da infecção causada por um isolado geográfico do BmNPV no Estado do Paraná, Brasil, sendo a espécie viral identificada como Bombyx mori

(2012), o qual comparou a TCC com exercícios de controle motor, mostrando que exercícios de controle motor e TCC têm efeitos semelhantes na redução da dor e

O paciente tem pelo menos 02 (dois) dos seguintes sinais e sintomas, sem nenhuma outra causa:. - febre (temperatura axilar &gt; 37,8 o C)

Proponha Proponha uma uma função função chamada chamada inicializa() inicializa() que receba um vetor de inteiros, seu que receba um vetor de inteiros, seu tamanho,

A variação é explicada principalmente pela estratégia da Companhia de reduzir o nível de financiamento com fornecedores (pela redução o prazo médio de pagamento) que,

Da Silva et al (2020) estudaram a variabilidade espacial do fator k em áreas comerciais de cana-de-açúcar, causadas pelas estruturas multivariadas de perdas de carbono em

Cláudia Alexandra Gomes Martins Pinto ADMITIDO(A) Cláudia Sofia Barbosa da Costa Ribeiro ADMITIDO(A) Constança dos Santos Elias Pereira Graça ADMITIDO(A). Cristiana da Silva Aveiro

A Prefeitura de nossa cidade está vivendo bom momento economica- mente, mesmo tendo gastos com a pandemia, ainda assim, o vereador Marcos Nem (PSD) disse que no perí- odo de chuva