Translated README of module 2; Starting translation of class 05 - relational databases

pull/361/head
joaoDossena 4 years ago
parent d5cbbeb458
commit baaf0ea2eb

@ -0,0 +1,181 @@
# Trabalhando com dados: Bases de dados relacionais
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/05-RelationalData.png)|
|:---:|
| Trabalhando Com Dados: Bases de dados Relacionais - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Você provavelmente já usou uma planilha para guardar informações. Você tinha um conjunto de linhas e colunas, onde as linhas continham a informação (ou dados), e as colunas descreviam a informação (às vezes chamada de metadados). Uma base de dados relacional expande esse princípio de linhas e colunas em tabelas, lhe permitindo ter informações espalhadas por múltiplas tabelas. Isso lhe permite trabalhar com dados mais complexos, evitar duplicação, e ter flexibilidade na maneira de explorar os dados. Vamos explorar os conceitos de uma base de dados relacional
## [Quiz pré-aula](https://red-water-0103e7a0f.azurestaticapps.net/quiz/8)
## Tudo começa com tabelas
Uma base de dados relacional tem por princípio as tabelas. Da mesma forma que uma planilha, uma tabela é um conjunto de linhas e colunas. As colunas contém os dados ou as informações com as quais queremos trabalhas, como o nome de uma cidade ou a quantidade de chuva. As colunas descrevem os dados que elas guardam.
Vamos começar a nossa exploração iniciando uma tabela para guardar informação sobre cidades. Nós podemos começar com os seus nomes e países. Você pode guardá-los numa tabela da seguinte forma:
| Cidade | País |
| -------- | ------------- |
| Tóquio | Japão |
| Atlanta | Estados Unidos |
| Auckland | Nova Zelândia |
Perceba que os nomes das colunas de **cidade**, **país** e **população** descrevem os dados que são guardados, e cada coluna tem informações sobre uma cidade
## Os problemas de se ter uma única tabela
A tabela acima provavelmente parece relativamente familiar para você. Vamos começar a preencher dados adicionais para nossa base de dados: precipitação anual (em milímetros). Focaremos nos anos de 2018, 2019 e 2020. Se fôssemos adicioná-los a Tóquio, ficaria mais ou menos 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 dá para perceber na nossa tabela? Você pode notar que estamos duplicando o nome e o país da cidade diversas vezes. Isso pode usar espaço demais desnecessariamente. Afinal, Tóquio só tem um nome que nos interessa.
OK, vamos tentar algo diferente. 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 |
Enquanto isso nos permite evitar duplicação de linhas, nós temos alguns outros desafios. Nós precisaríamos modificar a estrutura da nossa tabela cada vez que temos um novo ano. Além disso, conforme nossos dados aumentam, ter os anos como colunas pode fazer com que consultar e calcular valores seja mais difícil.
Por isso nós precisamos de várias tabelas e de relações. Dividindo nossos dados nós conseguimos evitar duplicações e então temos mais flexibilidade para trabalhar com eles.
## Os conceitos de relações
Vamos voltar para os nossos dados e vamos determinar como queremos separar as coisas. Sabemos que nós queremos guardar o nome e o país de nossas cidades, então isso provavelmente vai ser melhor se ficar em uma tabela.
| Cidade | País |
| -------- | ------------- |
| Tokyo | Japão |
| Atlanta | Estados Unidos |
| Auckland | Nova Zelândia |
Mas antes de criarmos a próxima tabela, precisamos descobrir como referenciar cada cidade. Precisamos de algum tipo de identificador, ID, ou (em termos de bases de dados) uma chave primária. Uma chave primária é um valor usado para identificar uma linha específica numa tabela. Enquanto essa chave pode ser baseada num valor mesmo (poderíamos usar o nome da cidade, por exemplo), ela deverá ser quase sempre um número ou outro identificador. Não queremos que o id mude nunca, já que estragaria a relação. Você vai ver que na maioria dos casos a chave primária ou id vai ser um número gerado automaticamente.
> ✅ Chave primária geralmente se abrevia com PK (do inglês "Primary Key")
### cidades
| cidade_id | Cidade | País |
| ------- | -------- | ------------- |
| 1 | Tóquio | Japão |
| 2 | Atlanta | Estados Unidos |
| 3 | Auckland | Nova Zelândia |
> ✅ Você pode perceber que nós usamos os termos "id" e "chave primária" como termos iguais durante essa aula. Os conceitos aqui se aplicam a DataFrames, que você vai explorar mais além. DataFrames não usam a terminologia de "chave primária", mas se comportam de uma maneira bem parecida.
Com nossa tabela de cidades criada, vamos guardar a precipitação. Em vez de duplicar a informação sobre a cidade, podemos usar o id. Também devemos nos certificar de que a tabela criada também tem uma coluna *id*, já que todas as tabelas devem ter um id ou chave primária.
### precipitacao
| precipitacao_id | cidade_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 |
Perceba a coluna **cidade_id** na tabela **precipitacao** recém criada. Essa coluna contém valores que referenciam os IDs na tabela **cidades**. Em termos técnicos relacionais, isso se chama **chave externa** ou **chave estrangeira**; é uma chave primária de outra tabela. Você pode imaginar que é apenas uma referência ou ponteiro. O **cidade_id** 1 faz referência a Tóquio.
> [!NOTE] Chave Estrangeira é abreviada como FK ("Foreign Key" em inglês)
## Buscando dados
With our data separated into two tables, you may be wondering how we retrieve it. If we are using a relational database such as MySQL, SQL Server or Oracle, we can use a language called Structured Query Language or SQL. SQL (sometimes pronounced sequel) is a standard language used to retrieve and modify data in a relational database.
To retrieve data you use the command `SELECT`. At its core, you **select** the columns you want to see **from** the table they're contained in. If you wanted to display just the names of the cities, you could use the following:
```sql
SELECT cidade
FROM cities;
-- Output:
-- Tóquio
-- Atlanta
-- Auckland
```
`SELECT` is where you list the columns, and `FROM` is where you list the tables.
> [NOTE] SQL syntax is case-insensitive, meaning `select` and `SELECT` mean the same thing. However, depending on the type of database you are using the columns and tables might be case sensitive. As a result, it's a best practice to always treat everything in programming like it's case sensitive. When writing SQL queries common convention is to put the keywords in all upper-case letters.
The query above will display all cities. Let's imagine we only wanted to display cities in Nova Zelândia. We need some form of a filter. The SQL keyword for this is `WHERE`, or "where something is true".
```sql
SELECT cidade
FROM cities
WHERE country = 'Nova Zelândia';
-- Output:
-- Auckland
```
## Joining data
Until now we've retrieved data from a single table. Now we want to bring the data together from both **cities** and **rainfall**. This is done by *joining* them together. You will effectively create a seam between the two tables, and match up the values from a column from each table.
In our example, we will match the **cidade_id** column in **rainfall** with the **cidade_id** column in **cities**. This will match the rainfall value with its respective cidade. The type of join we will perform is what's called an *inner* join, meaning if any rows don't match with anything from the other table they won't be displayed. In our case every cidade has rainfall, so everything will be displayed.
Let's retrieve the rainfall for 2019 for all our cities.
We're going to do this in steps. The first step is to join the data together by indicating the columns for the seam - **cidade_id** as highlighted before.
```sql
SELECT cities.cidade
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.cidade_id = rainfall.cidade_id
```
We have highlighted the two columns we want, and the fact we want to join the tables together by the **cidade_id**. Now we can add the `WHERE` statement to filter out only year 2019.
```sql
SELECT cities.cidade
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.cidade_id = rainfall.cidade_id
WHERE rainfall.year = 2019
-- Output
-- cidade | amount
-- -------- | ------
-- Tóquio | 1874
-- Atlanta | 1111
-- Auckland | 942
```
## Summary
Relational databases are centered around dividing information between multiple tables which is then brought back together for display and analysis. This provides a high degree of flexibility to perform calculations and otherwise manipulate data. You have seen the core concepts of a relational database, and how to perform a join between two tables.
## 🚀 Challenge
There are numerous relational databases available on the internet. You can explore the data by using the skills you've learned above.
## Post-Lecture Quiz
## [Post-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/9)
## Review & Self Study
There are several resources available on [Microsoft Learn](https://docs.microsoft.com/learn?WT.mc_id=academic-40229-cxa) for you to continue your exploration of SQL and relational database concepts
- [Describe concepts of relational data](https://docs.microsoft.com//learn/modules/describe-concepts-of-relational-data?WT.mc_id=academic-40229-cxa)
- [Get Started Querying with Transact-SQL](https://docs.microsoft.com//learn/paths/get-started-querying-with-transact-sql?WT.mc_id=academic-40229-cxa) (Transact-SQL is a version of SQL)
- [SQL content on Microsoft Learn](https://docs.microsoft.com/learn/browse/?products=azure-sql-database%2Csql-server&expanded=azure&WT.mc_id=academic-40229-cxa)
## Assignment
[Assignment Title](assignment.md)

@ -0,0 +1,16 @@
# Trabalhando com Dados
![amor aos dados](images/data-love.jpg)
> Foto de <a href="https://unsplash.com/@swimstaralex?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Alexander Sinn</a> em <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
Nessas aulas você aprenderá algumas maneiras de administrar, manipular e usar dados em aplicações. Você aprenderá sobre bases de dados relacionais e não-relacionais, e aprenderá a guardar dados nas mesmas. Você vai aprender os fundamentos de como trabalhar com Python para administrar dados, e você vai descobrir algumas das muitas maneiras de se trabalhar com Python para minerar dados.
### Tópicos
1. [Bases de dados relacionais](05-relational-databases/README.md)
2. [Bases de dados não-relacionais](06-non-relational/README.md)
3. [Trabalhando com Python](07-python/README.md)
4. [Preparando dados](08-data-preparation/README.md)
### Créditos
Essas aulas foram feitas com o ❤️ por [Christopher Harrison](https://twitter.com/geektrainer), [Dmitry Soshnikov](https://twitter.com/shwars) e [Jasmine Greenaway](https://twitter.com/paladique)
Loading…
Cancel
Save