No es necesario que incluya el nombre del elemento en ambas tablas. Esto se llama una solución desnormalizada. Debe tenerlo solo en la tabla de elementos y solo referirse a la identificación, luego, si necesita el nombre, también puede unirse según la clave principal (identificación). De lo contrario, está totalmente bien en mi opinión.
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)
);
A veces, cuando el rendimiento es crítico, debe usar tablas desnormalizadas. Puede ser mucho más rápido.
La normalización es importante para evitar diferentes anomalías. Si tiene tablas en una forma normal de alto nivel, sus tablas no serán redundantes y no tendrán estas anomalías. Por ejemplo, si tiene algo almacenado en varias ubicaciones, debe cuidarlo para mantener actualizados todos los datos redundantes. Esto le da la oportunidad de hacer esto incorrectamente y terminar teniendo diferentes anomalías.
En su situación, tener una clave externa lo ayuda a mantener la integridad de los datos, pero sin una clave externa para el nombre, podría tener artículos con nombres en las compras que no están presentes en la tabla de artículos.
Este es un tipo de anomalía.
Hay muchos tipos de esto, es mejor evitarlos tanto como puedas.
En algunos casos hay que desnoramalizar. Así que almacene algunos datos de forma redundante debido a problemas de rendimiento. De esta manera puede ahorrar algunas operaciones de unión que podrían consumir mucho tiempo.
Los detalles de la normalización están cubiertos por temas de diferentes formas normales:NF0, NF1, NF2, NF3 y BCNF
Para obtener más detalles sobre los fundamentos matemáticos de la descomposición sin pérdidas a formas normales superiores, consulte "Dependencias funcionales". Esto lo ayudará a comprender por qué puede mantener las identificaciones "redundantes". Prácticamente son redundancia necesaria, ya que los necesita para poder reconstruir más tarde el conjunto de datos original. Esta va a ser la definición de las diferentes formas normales. ¿Qué nivel de esta redundancia se permite?