16 - introdução às bases de dados16 - introdução às bases

32
ICE-B ICE-B ICE-B ICE-B ICE-B ICE-B ICE-B ICE-B ICE-B 16 - Introdução às Bases de Dados 16 - Introdução às Bases de Dados 16 - Introdução às Bases de Dados 16 - Introdução às Bases de Dados 16 - Introdução às Bases de Dados 16 - Introdução às Bases de Dados 16 - Introdução às Bases de Dados 16 - Introdução às Bases de Dados 16 - Introdução às Bases de Dados Ludwig Krippahl

Upload: others

Post on 08-Dec-2021

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 16 - Introdução às Bases de Dados16 - Introdução às Bases

ICE-BICE-BICE-BICE-BICE-BICE-BICE-BICE-BICE-B

16 - Introdução às Bases de Dados16 - Introdução às Bases de Dados16 - Introdução às Bases de Dados16 - Introdução às Bases de Dados16 - Introdução às Bases de Dados16 - Introdução às Bases de Dados16 - Introdução às Bases de Dados16 - Introdução às Bases de Dados16 - Introdução às Bases de Dados

Ludwig Krippahl

Page 2: 16 - Introdução às Bases de Dados16 - Introdução às Bases

1

Bases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de Dados

Resumo■ Introdução aos sistemas de bases de dados:• Modelo relacional

■ SQL (Structured Query Language)• Criar tabelas• Inserir dados• Consultar

■ Sqlite3: interpretador e SGBD

Page 3: 16 - Introdução às Bases de Dados16 - Introdução às Bases

2

Bases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de Dados

Bases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de Dados

Page 4: 16 - Introdução às Bases de Dados16 - Introdução às Bases

3

Bases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de Dados

Base de Dados: Conjunto estruturado de dados■ Vimos exemplos: Tabelas, dicionários, objectos, ...■ Permite guardar dados usados por diferentes programasSistema de Gestão de Bases de Dados (SGBD)■ (Database management system, DBMS)■ Combinação de software e dados:• Base de dados: ficheiros estruturados, com os dados.

• Motor de base de dados: software para consulta e modificação dos dados.

• Esquema de base de dados: especificação da organização lógica dos dados.

Page 5: 16 - Introdução às Bases de Dados16 - Introdução às Bases

4

SGBDSGBDSGBDSGBDSGBDSGBDSGBDSGBDSGBD

Modelo relacional■ Registo (objecto, entidade)• Conjunto de valores ordenados pelos atributos• Análogo a um tuplo, corresponde a uma linha na tabela

■ Campo (ou atributo)• Um dos atributos que todos os registos da tabela têm• Uma coluna na tabela

■ Tabela (relação)• Conjunto de registos• Análogo a uma lista de tuplos ou de dicionários (campo:valor)

■ Base de dados relacional• Conjunto de tabelas relacionadas

Page 6: 16 - Introdução às Bases de Dados16 - Introdução às Bases

5

Tabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e Chaves

Exemplo: tabela Filmes da base de dados DBVideos

■ Como identificar cada registo?

Page 7: 16 - Introdução às Bases de Dados16 - Introdução às Bases

6

Tabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e Chaves

■ A tabela tem quatro campos:■ Filme_id■ Titulo■ Tipo■ Classificacao

■ Chave primária• Conjunto de campos cuja combinação de valores não se repete• Permite identificar sem ambiguidade um registo (uma linha)• Neste caso é Filme_id

Page 8: 16 - Introdução às Bases de Dados16 - Introdução às Bases

7

Tabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e Chaves

Exemplo: tabela Clientes de DBVideos

■ Chave primária: Cliente_id

Page 9: 16 - Introdução às Bases de Dados16 - Introdução às Bases

8

Tabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e ChavesTabelas e Chaves

Como registar alugueres? Tabela Alugueres

■ Chave primária: Aluguer_id■ Chaves externas: Cliente_id e Filme_id■ As chaves externas permitem ligar uma tabela a outras• Desta forma registamos quem alugou qual filme, e quando

Page 10: 16 - Introdução às Bases de Dados16 - Introdução às Bases

9

Bases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de Dados

Structured Query Language (SQL)Structured Query Language (SQL)Structured Query Language (SQL)Structured Query Language (SQL)Structured Query Language (SQL)Structured Query Language (SQL)Structured Query Language (SQL)Structured Query Language (SQL)Structured Query Language (SQL)

Page 11: 16 - Introdução às Bases de Dados16 - Introdução às Bases

10

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Structured Query Language■ Linguagem para manipular e consultar BD relacionais• Query: pergunta (sobre os dados armazenados na base de dados)

■ Interpretada pelo motor do SBD• É uma linguagem independente (não é Python)

• Pode ser usada interativamente pelo utilizador, com o interpretador SQL

■ Permite:• Criar tabelas, descrevendo os seus campos (esquema).• Inserir, alterar e remover registos das tabelas.• Fazer perguntas (queries)

Page 12: 16 - Introdução às Bases de Dados16 - Introdução às Bases

11

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Structured Query Language■ Tabelas são criadas com a instrução CREATE

CREATE TABLE nome-tabela (Campo-1 tipo-1,Campo-2 tipo-2, ...);

■ Nome da tabela, nomes dos campos e respectivos tipos.■ Tipicamente os tipos utilizados são (Sqlite):• Números inteiros: INT, INTEGER• Números fraccionários: FLOAT, REAL• Texto: TEXT• Lógico (Booleano): BOOLEAN (0 ou 1)

■ Nota: isto para Sqlite; noutros sistemas há mais distinções

Page 13: 16 - Introdução às Bases de Dados16 - Introdução às Bases

12

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Structured Query Language■ Exemplo: Tabela de elementos químicos e massas atómicas.

CREATE TABLE Massas ( Simbolo TEXT, Massa FLOAT);

■ Em SQL as palavras-chave podem ser em maiúsculas ouminúsculas

• Mas é mais comum escrever-se em maiúsculas.

■ Em Sqlite os nomes dos campos e tabelas também podem sermaiúsculas ou minúsculas

■ Noutros sistemas depende• É melhor escrever de forma consistente

Page 14: 16 - Introdução às Bases de Dados16 - Introdução às Bases

13

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Chave Primária■ Na criação da tabelas deve-se especificar uma chave primária■ A chave primária é o campo (ou combinação de campos) que

identifica cada registo

CREATE TABLE Massas ( Simbolo TEXT, Massa FLOAT, PRIMARY KEY(Simbolo));

■ Impõe uma restrição de integridade:• Não é permitido inserir ou modificar registos de forma a repetir a chave primária

Page 15: 16 - Introdução às Bases de Dados16 - Introdução às Bases

14

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Criação da tabela Filmes

■ Nota: na consola do Sqlite3

sqlite> CREATE TABLE Filmes ( Filme_id INTEGER, Titulo TEXT, Tipo TEXT, ...> Classificacao TEXT, PRIMARY KEY(Filme_id) );

Page 16: 16 - Introdução às Bases de Dados16 - Introdução às Bases

15

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Criação da tabela Clientes

sqlite> CREATE TABLE Clientes ( Cliente_id INTEGER, Nome TEXT, Morada TEXT, ...> Numero_cartao_credito TEXT, ...> PRIMARY KEY(Cliente_id) );

Page 17: 16 - Introdução às Bases de Dados16 - Introdução às Bases

16

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Criação da tabela Alugueres

sqlite> CREATE TABLE Alugueres ( Aluguer_id INTEGER, Cliente_id INTEGER, ...> Filme_id INTEGER, Data_aluguer TEXT, ...> Data_entrega TEXT, PRIMARY KEY(Aluguer_id) );

Page 18: 16 - Introdução às Bases de Dados16 - Introdução às Bases

17

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Apagar uma tabela: DROP■ Se queremos eliminar uma tabela que não nos interessa,

CREATE TABLE Errada (Num INTEGER, Nome TEXT);

■ Podemos usar o comando DROP

DROP TABLE Errada;

■ Atenção: isto é irreversível e elimina todos os registos

Page 19: 16 - Introdução às Bases de Dados16 - Introdução às Bases

18

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Inserir registos: INSERT■ Um registo pode ser inserido numa tabela com INSERT

INSERT INTO Tabela VALUES ( valor1, valor2, ..., valorN);

■ Os valores são dados na mesma ordem do CREATE TABLE

CREATE TABLE Filmes ( Filme_id INTEGER, Titulo TEXT, Tipo TEXT,

Classificacao TEXT, PRIMARY KEY(Filme_id) );

sqlite> INSERT INTO Filmes VALUES (101, 'Sexto Sentido', 'suspense drama', ...> 'maiores de 12'); sqlite> INSERT INTO Filmes VALUES (102, 'Regresso ao Futuro', ...> 'comedia aventura', 'maiores de 6');

Page 20: 16 - Introdução às Bases de Dados16 - Introdução às Bases

19

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Selecionar registos: SELECT■ Registos podem ser selecionados de tabela(s) com SELECT

SELECT lista-campos

FROM lista-tabelas

WHERE condição

ORDER BY campo;

■ Os registos são filtrados pela condição WHERE■ Podem ser ordenados incluindo a opção ORDER BY.

Page 21: 16 - Introdução às Bases de Dados16 - Introdução às Bases

20

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Selecionar registos: SELECT■ Exemplos (Sqlite)

sqlite> SELECT * FROM Filmes; 101|Sexto Sentido|suspense|maiores de 12 102|Regresso ao Futuro|comedia aventura|maiores de 6 103|Monstros e Cia.|animacao|maiores de 4 104|Alien|ficcao-cientifica terror|maiores de 16 ... sqlite> SELECT Titulo FROM Filmes WHERE Tipo = "animacao"; Monstros e Cia. Idade do Gelo sqlite> SELECT Titulo, Tipo FROM Filmes ...> WHERE Classificacao = "maiores de 12" ORDER BY Titulo; Dia da Independencia|ficcao-cientifica acao Elizabeth|drama historico Sexto Sentido|suspense X-Men|ficcao-cientifica acao

Page 22: 16 - Introdução às Bases de Dados16 - Introdução às Bases

21

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Alterar registos: UPDATE■ O UPDATE altera os valores dos campos dos registos selecionados

UPDATE tabela SET campo = valor WHERE condição;

■ Exemplo:

sqlite> UPDATE Filmes SET Tipo = "drama" WHERE Titulo = "Elizabeth"; sqlite> SELECT * FROM Filmes WHERE Titulo = "Elizabeth"; 106|Elizabeth|drama|maiores de 12

Page 23: 16 - Introdução às Bases de Dados16 - Introdução às Bases

22

SQLSQLSQLSQLSQLSQLSQLSQLSQL

Apagar registos: DELETE■ O DELETE apaga os registos selecionados

DELETE FROM tabela WHERE condição;

■ Exemplo:

sqlite> DELETE FROM Filmes WHERE Classificacao = "maiores de 12"; sqlite> SELECT * FROM Filmes; 102|Regresso ao Futuro|comedia aventura|maiores de 6 103|Monstros e Cia.|animacao|maiores de 4 104|Alien|ficcao-cientifica terror|maiores de 16 108|Platoon|acao drama guerra|maiores de 16 109|Idade do Gelo|animacao|maiores de 4 110|Impacto Profundo|suspense policial|maiores de 16

Page 24: 16 - Introdução às Bases de Dados16 - Introdução às Bases

23

Bases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de Dados

Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3

Page 25: 16 - Introdução às Bases de Dados16 - Introdução às Bases

24

Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3

Sqlite3 é um motor gratuito de bases de dados■ Podemos usá-lo como interpretador de linha de comando• Interpreta SQL e gere a base de dados

■ Pode-se obter em https://sqlite.org/download.html• Na secção que diz "Precompiled binaries for Windows" (ou Mac, etc)

• Escolham a do vosso sistema operativo

• Descarreguem o sqlite-tools-....zip (o que tem "tools" no nome)

• Extraiam o ficheiro sqlite3 para a pasta de trabalho

■ Linux: provavelmente já está instalado, senão usar o gestor depacotes

Page 26: 16 - Introdução às Bases de Dados16 - Introdução às Bases

25

Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3

Executar o Sqlite3■ Windows: duplo-click no sqlite3.exe■ Linux: sqlite3 na consola do sistema operativo

SQLite version 3.30.0 2019-10-04 15:03:17 Enter ".help" for usage hints. Connected to a transient in-memory database. Use ".open FILENAME" to reopen on a persistent database. sqlite> .open teste.db

■ Se o ficheiro da BD (teste.db) não existe é criado.• Se existe é lido e temos acesso às tabelas lá criadas• O ficheiro de bases de dados é binário e gerido pelo Sqlite3

Page 27: 16 - Introdução às Bases de Dados16 - Introdução às Bases

26

Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3

Exemplo: tabela com massas dos elementossqlite> .open quimica.db sqlite> CREATE TABLE Elementos ( Simbolo TEXT, Nome TEXT, NumAtomico INTEGER, ...> Massa REAL, Grupo INTEGER, Periodo INTEGER, PRIMARY KEY (Simbolo)); sqlite> INSERT INTO Elementos VALUES ('H', 'Hydrogen', 1, 1.00794, 1, 1) sqlite> INSERT INTO Elementos VALUES ('He', 'Helium', 2, 4.002602, 18, 1) sqlite> SELECT * FROM Elementos; H|Hydrogen|1|1.00794|1|1 He|Helium|2|4.002602|18|1 sqlite> .quit

■ Comandos começados por . são do Sqlite e não SQL:.open

.quit (ou .exit)cria ou abre o ficheiro da BDsai do interpretador

Page 28: 16 - Introdução às Bases de Dados16 - Introdução às Bases

27

SqliteSqliteSqliteSqliteSqliteSqliteSqliteSqliteSqlite

Outros comandos do Sqlite (não são SQL):.help

.read nomeFicheiro

.schema

.prompt first cont

.tables

.separator sep

.import ficheiro tabela

lista comandos disponíveis no Sqliteexecuta script SQLlista esquemas das tabelasmuda prompt normal e e continuaçãolista as tabelasespecifica separador dos camposImporta ficheiro assumindo separadordefinido

Page 29: 16 - Introdução às Bases de Dados16 - Introdução às Bases

28

SqliteSqliteSqliteSqliteSqliteSqliteSqliteSqliteSqlite

Outros comandos do Sqlite (não são SQL):sqlite> .prompt 'db >> ' '-->> ' db >> .schema CREATE TABLE Elementos ( Simbolo TEXT, Nome TEXT, NumAtomico INTEGER, Massa REAL, Grupo INTEGER, Periodo INTEGER, PRIMARY KEY (Simbolo)); db >> .separator ' :: ' db >> SELECT * FROM Elementos; H :: Hydrogen :: 1 :: 1.00794 :: 1 :: 1 He :: Helium :: 2 :: 4.002602 :: 18 :: 1 db >> .tables Elementos

Page 30: 16 - Introdução às Bases de Dados16 - Introdução às Bases

29

Bases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de DadosBases de Dados

ResumoResumoResumoResumoResumoResumoResumoResumoResumo

Page 31: 16 - Introdução às Bases de Dados16 - Introdução às Bases

30

ResumoResumoResumoResumoResumoResumoResumoResumoResumo

Bases de Dados■ Sistemas de Bases de Dados■ SQL e Sqlite■ Criar tabelas, inserir dados e consultar■ Comandos do SqliteLeitura adicional:■ Recomendada: Capítulo 16 dos apontamentos■ Opcional: Tutorial Sqlite: https://www.tutorialspoint.com/sqlite

Page 32: 16 - Introdução às Bases de Dados16 - Introdução às Bases