Vinculando tabelas em bancos de dados
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 ao fato de que o banco de dados começa a ocupar muito mais espaço.
Em segundo lugar, é bastante inconveniente executar operações com cidades. Por exemplo, queremos exibir na tela uma lista de todas as cidades. Simplesmente não será possível fazer isso de forma fácil. Teremos que obter todos os usuários junto com suas cidades, depois remover as duplicatas das cidades obtidas e só então obteremos essa lista.
E agora imagine que o banco de dados tenha 10000
usuários de 10
cidades - para obter essas 10
cidades, teremos que extrair a tabela inteira
com uma enorme quantidade de linhas - resultará em
uma operação muito lenta com um desperdício sem sentido
de recursos.
Solução para o problema
Precisamos dividir nossa tabela em duas: em uma
serão armazenadas as cidades, e na segunda - os usuários.
Neste caso, na tabela de usuários haverá uma coluna
city_id, que fará referência
à 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 |
Suponha que você precise armazenar produtos (nome, preço, quantidade) e as categorias desses produtos. Descreva a estrutura de armazenamento.
Suponha que você precise armazenar rios e os mares nos quais esses rios deságuam. Descreva a estrutura de armazenamento.
Suponha que você precise armazenar cidades e os países em que elas estão localizadas. Descreva a estrutura de armazenamento.