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

Post on 08-Dec-2021

14 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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.

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

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?

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

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

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

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)

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)

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

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

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

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

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

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

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

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

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.

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

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

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

23

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

Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3Sqlite3

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

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

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

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

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

29

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

ResumoResumoResumoResumoResumoResumoResumoResumoResumo

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

top related