Skip to content

Latest commit

 

History

History
190 lines (128 loc) · 11.2 KB

File metadata and controls

190 lines (128 loc) · 11.2 KB

Trabalhar com Dados: Bases de Dados Relacionais

 Sketchnote por (@sketchthedocs)
Trabalhar com Dados: Bases de Dados Relacionais - Sketchnote por @nitya

É provável que já tenha usado uma folha de cálculo no passado para armazenar informação. Tinha um conjunto de linhas e colunas, onde as linhas continham a informação (ou dados), e as colunas descreviam a informação (por vezes chamadas metadados). Uma base de dados relacional é construída sobre este princípio fundamental de colunas e linhas em tabelas, permitindo que tenha informação distribuída por várias tabelas. Isto permite trabalhar com dados mais complexos, evitar duplicação e ter flexibilidade na forma como explora os dados. Vamos explorar os conceitos de uma base de dados relacional.

Tudo começa com tabelas

Uma base de dados relacional tem no seu núcleo tabelas. Tal como numa folha de cálculo, uma tabela é uma coleção de colunas e linhas. A linha contém os dados ou informação com que queremos trabalhar, como o nome de uma cidade ou a quantidade de precipitação. As colunas descrevem os dados que armazenam.

Vamos começar a nossa exploração criando uma tabela para armazenar informação sobre cidades. Podemos começar com o seu nome e país. Poderia armazenar isto numa tabela da seguinte forma:

Cidade País
Tóquio Japão
Atlanta Estados Unidos
Auckland Nova Zelândia

Repare que os nomes das colunas cidade, país e população descrevem os dados armazenados, e cada linha tem informação sobre uma cidade.

As limitações de uma abordagem com uma única tabela

É provável que a tabela acima lhe pareça relativamente familiar. Vamos começar a adicionar alguns dados adicionais à nossa base de dados em crescimento - precipitação anual (em milímetros). Vamos focar-nos nos anos 2018, 2019 e 2020. Se adicionássemos para Tóquio, poderia ficar algo assim:

Cidade País Ano Quantidade
Tóquio Japão 2020 1690
Tóquio Japão 2019 1874
Tóquio Japão 2018 1445

O que nota sobre a nossa tabela? Pode notar que estamos a duplicar o nome e o país da cidade repetidamente. Isso pode ocupar bastante espaço de armazenamento, e é largamente desnecessário ter múltiplas cópias. Afinal, Tóquio tem apenas um nome que nos interessa.

OK, vamos tentar outra coisa. Vamos adicionar novas colunas para cada ano:

Cidade País 2018 2019 2020
Tóquio Japão 1445 1874 1690
Atlanta Estados Unidos 1779 1111 1683
Auckland Nova Zelândia 1386 942 1176

Embora isto evite a duplicação das linhas, adiciona alguns outros desafios. Teríamos de modificar a estrutura da nossa tabela cada vez que há um novo ano. Além disso, à medida que os nossos dados crescem, ter os anos como colunas torna mais difícil recuperar e calcular valores.

É por isso que precisamos de múltiplas tabelas e relações. Ao dividir os nossos dados podemos evitar duplicação e ter mais flexibilidade na forma como trabalhamos com os dados.

Os conceitos de relações

Vamos voltar aos nossos dados e determinar como queremos dividir as coisas. Sabemos que queremos armazenar o nome e país das nossas cidades, por isso isto provavelmente funcionará melhor numa tabela.

Cidade País
Tóquio Japão
Atlanta Estados Unidos
Auckland Nova Zelândia

Mas antes de criarmos a próxima tabela, precisamos de descobrir como referenciar cada cidade. Precisamos de alguma forma de identificador, ID ou (em termos técnicos de base de dados) uma chave primária. Uma chave primária é um valor usado para identificar uma linha específica numa tabela. Embora isto possa basear-se num valor em si (poderíamos usar o nome da cidade, por exemplo), deve quase sempre ser um número ou outro identificador. Não queremos que o id mude alguma vez pois isso quebraria a relação. Na maioria dos casos, a chave primária ou id será um número auto-gerado.

✅ Chave primária é frequentemente abreviada como PK

cidades

city_id Cidade País
1 Tóquio Japão
2 Atlanta Estados Unidos
3 Auckland Nova Zelândia

✅ Vai notar que usamos os termos "id" e "chave primária" de forma intercambiável durante esta lição. Os conceitos aqui aplicam-se a DataFrames, que irá explorar mais tarde. DataFrames não usam a terminologia de "chave primária", no entanto vai notar que se comportam de forma muito semelhante.

Com a nossa tabela de cidades criada, vamos armazenar a precipitação. Em vez de duplicar a informação completa sobre a cidade, podemos usar o id. Também devemos garantir que a tabela recém-criada tem uma coluna id, pois todas as tabelas devem ter um id ou chave primária.

precipitação

rainfall_id city_id Ano Quantidade
1 1 2018 1445
2 1 2019 1874
3 1 2020 1690
4 2 2018 1779
5 2 2019 1111
6 2 2020 1683
7 3 2018 1386
8 3 2019 942
9 3 2020 1176

Repare na coluna city_id dentro da tabela recém-criada precipitação. Esta coluna contém valores que referenciam os IDs na tabela cidades. Em termos técnicos de dados relacionais, isto chama-se uma chave estrangeira; é uma chave primária de outra tabela. Pode simplesmente pensar nela como uma referência ou um apontador. city_id 1 referencia Tóquio.

Note

Chave estrangeira é frequentemente abreviada como FK

Recuperar os dados

Com os nossos dados separados em duas tabelas, pode estar a perguntar-se como os recuperamos. Se estivermos a usar uma base de dados relacional como MySQL, SQL Server ou Oracle, podemos usar uma linguagem chamada Structured Query Language ou SQL. SQL (por vezes pronunciado sequel) é uma linguagem padrão usada para recuperar e modificar dados numa base de dados relacional.

Para recuperar dados usa o comando SELECT. Na sua essência, você seleciona as colunas que quer ver da tabela onde estão contidas. Se quisesse mostrar apenas os nomes das cidades, poderia usar o seguinte:

SELECT city
FROM cities;

-- Output:
-- Tokyo
-- Atlanta
-- Auckland

SELECT é onde lista as colunas, e FROM é onde lista as tabelas.

Note

A sintaxe SQL não diferencia maiúsculas de minúsculas, o que significa que select e SELECT significam o mesmo. No entanto, dependendo do tipo de base de dados que está a usar, as colunas e tabelas podem ser sensíveis a maiúsculas e minúsculas. Como resultado, é uma boa prática tratar tudo em programação como se fosse sensível a maiúsculas e minúsculas. Ao escrever consultas SQL, a convenção comum é colocar as palavras-chave em letras maiúsculas.

A consulta acima vai mostrar todas as cidades. Imagine que só queremos mostrar cidades na Nova Zelândia. Precisamos de algum tipo de filtro. A palavra-chave SQL para isto é WHERE, ou "onde algo é verdadeiro".

SELECT city
FROM cities
WHERE country = 'New Zealand';

-- Output:
-- Auckland

Juntar dados

Até agora recuperámos dados de uma única tabela. Agora queremos juntar os dados das tabelas cidades e precipitação. Isto é feito juntando as tabelas. Vai efetivamente criar uma ligação entre as duas tabelas, e associar os valores de uma coluna de cada tabela.

No nosso exemplo, vamos associar a coluna city_id em precipitação com a coluna city_id em cidades. Isto vai associar o valor da precipitação com a sua respetiva cidade. O tipo de junção que vamos fazer chama-se inner join, o que significa que se alguma linha não corresponder a nada da outra tabela, não será mostrada. No nosso caso, todas as cidades têm precipitação, por isso tudo será mostrado.

Vamos recuperar a precipitação de 2019 para todas as nossas cidades.

Vamos fazer isto em passos. O primeiro passo é juntar os dados indicando as colunas para a ligação - city_id como destacado antes.

SELECT cities.city
    rainfall.amount
FROM cities
    INNER JOIN rainfall ON cities.city_id = rainfall.city_id

Destacámos as duas colunas que queremos, e o facto de querermos juntar as tabelas pela city_id. Agora podemos adicionar a instrução WHERE para filtrar apenas o ano de 2019.

SELECT cities.city
    rainfall.amount
FROM cities
    INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019

-- Output

-- city     | amount
-- -------- | ------
-- Tokyo    | 1874
-- Atlanta  | 1111
-- Auckland |  942

Resumo

Bases de dados relacionais centram-se em dividir a informação entre múltiplas tabelas que depois são reunidas para exibição e análise. Isto proporciona um elevado grau de flexibilidade para realizar cálculos e manipular dados de outras formas. Viu os conceitos fundamentais de uma base de dados relacional, e como realizar uma junção entre duas tabelas.

🚀 Desafio

Existem inúmeras bases de dados relacionais disponíveis na internet. Pode explorar os dados usando as competências que aprendeu acima.

Questionário pós-aula

Revisão & Autoestudo

Existem vários recursos disponíveis em Microsoft Learn para continuar a sua exploração de SQL e conceitos de bases de dados relacionais

Tarefa

Exibir dados de aeroportos


Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução automática Co-op Translator. Embora nos esforcemos para garantir a precisão, por favor tenha em conta que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações erradas decorrentes do uso desta tradução.