Aqui está sua mesa.
Shirt
id product color size stock
---------------------------------------------
1 Nike Shirt black M 5
2 Nike Shirt white L 10
3 Nike Shirt blue M 2
4 Nike Shirt blue XL 3
....
Você vê como duplicou o nome do produto "Camisa Nike" e a cor "azul". Em um banco de dados relacional normalizado, não queremos duplicar nenhuma informação. O que você acha que aconteceria se alguém acidentalmente trocasse "Camisa Nike" por "Saia Nike" na linha 4?
Então, vamos normalizar sua mesa.
Começaremos com uma tabela Product.
Product
id product
------ ------------
0 Nike Shirt
Geralmente, os números de identificação do banco de dados começam com zero, não com um.
Em seguida, vamos criar uma tabela de cores.
Color
id color
------ -------
0 black
1 white
2 blue
Em seguida, vamos criar uma tabela de Tamanho.
Size
id size
------ -----
0 XS
1 S
2 M
3 L
4 XL
5 XXL
Ok, agora temos 3 tabelas de objetos separadas. Como podemos juntá-los para que possamos ver o que está em estoque?
Você teve a ideia certa com sua mesa original.
Stock
id product color size stock
---------------------------------------------
0 0 0 2 5
1 0 1 3 10
2 0 2 2 2
3 0 2 4 3
Os números de produto, cor e tamanho são chaves estrangeiras para as tabelas Produto, Cor e Tamanho. A razão pela qual fazemos isso é eliminar a duplicação das informações. Você pode ver que qualquer informação é armazenada em um lugar e apenas um lugar.
O id não é necessário na tabela Stock. O produto, a cor e o tamanho devem ser exclusivos, para que esses 3 campos possam formar uma chave composta para a tabela Stock.
Em uma loja de varejo real, um produto pode ter muitos atributos diferentes. Os atributos provavelmente seriam armazenados em uma tabela de chave/valor . Para sua tabela simples, podemos dividir a tabela em tabelas relacionais normalizadas.