Você não precisa incluir o nome do item em ambas as tabelas. Isso é chamado de solução desnormalizada. Você deve tê-lo apenas na tabela de itens e se referir apenas ao id, então se você precisar do nome também poderá juntá-lo com base na chave primária (id). opinião.
CREATE TABLE user(
id INT(11) NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(20) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE items(
i_id INT(11) NOT NULL AUTO_INCREMENT,
name TINYTEXT NOT NULL,
price DECIMAL(8,2) NOT NULL,
PRIMARY KEY (i_id)
);
CREATE TABLE user_purchase(
i_id INT(11) NOT NULL,
name TINYTEXT NOT NULL,
id INT(11) NOT NULL,
FOREIGN KEY (i_id) REFERENCES items(i_id),
FOREIGN KEY (id) REFERENCES user(id)
);
Às vezes, quando o desempenho é crítico, você precisa usar tabelas desnormalizadas. Pode ser muito mais rápido.
A normalização é importante para evitar diferentes anomalias. Se você tiver tabelas em uma forma normal de alto nível, suas tabelas não serão redundantes e não terão essas anomalias. Por exemplo, se você tiver algo armazenado em vários locais, precisará cuidar para manter todos os dados redundantes atualizados. Isso lhe dá a chance de fazer isso incorretamente e acabar tendo diferentes anomalias.
Na sua situação, ter uma chave estrangeira ajuda a manter a integridade dos dados, mas sem uma chave estrangeira para o nome, você poderá ter itens com nomes nas compras que não estão presentes na tabela de itens.
Isso é uma espécie de anomalia.
Existem muitos tipos disso, é melhor evitá-los o máximo que puder.
Leia mais aqui sobre anomalias
Em alguns casos você deve desnormalizar. Portanto, armazene alguns dados de forma redundante devido a problemas de desempenho. Dessa forma, você pode salvar algumas operações de junção que podem consumir muito tempo.
Os detalhes da normalização são cobertos por tópicos de diferentes formas normais:NF0, NF1, NF2, NF3 e BCNF
Formulários normais em detalhes
Para mais detalhes sobre os fundamentos matemáticos da decomposição sem perdas para formas normais superiores, consulte "Dependências funcionais". Isso vai ajudá-lo a entender por que você pode manter os ids "redundantes". Praticamente são redundâncias necessárias, pois você precisa delas para poder reconstruir posteriormente o conjunto de dados original. Esta será a definição para as diferentes formas normais. Que nível desta redundância é permitido?
Dependências funcionais