Vinculando tabelas em bancos de dados em Python
Suponha que temos uma tabela com os nomes dos usuários e as cidades onde eles moram:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
A desvantagem desta tabela é que a mesma cidade se repete várias vezes para diferentes usuários. Isso leva a alguns problemas.
Em primeiro lugar, a repetição constante leva a que a base de dados comece a ocupar muito mais espaço.
Em segundo lugar, é bastante inconveniente executar operações com cidades. Por exemplo, queremos exibir na tela a lista de todas as cidades. Simplesmente não será possível fazer isso de forma direta. Teremos que obter todos os usuários junto com suas cidades, depois remover duplicatas das cidades obtidas e só então obteremos esta lista.
E agora imagine que na base há 10000
usuários de 10 cidades - para obter estas
10 cidades, teremos que extrair a tabela inteira
com uma enorme quantidade de linhas -
resultará numa operação muito lenta com
um desperdício sem sentido de recursos.
Solução do problema
É necessário dividir nossa tabela em duas: numa
serão armazenadas as cidades, e na segunda - os usuários.
Além disso, na tabela de usuários haverá uma coluna
city_id, que irá referenciar
à cidade do usuário.
Então, vamos criar duas tabelas. A tabela com cidades:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
A tabela com usuários:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Tarefas práticas
Suponha que você precise armazenar produtos (nome, preço, quantidade) e categorias desses produtos. Descreva a estrutura de armazenamento.
Suponha que você precise armazenar rios e mares nos quais esses rios deságuam. Descreva a estrutura de armazenamento.
Suponha que você precise armazenar cidades e países nos quais elas estão localizadas. Descreva a estrutura de armazenamento.