16 - introdução às bases de dados16 - introdução às bases
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