Задача реализовать Бд в которой Продукт - пицца имеет одно название, но разную цену в зависимости от размера.
ВАРИАНТ РЕШЕНИЯ 1
Реализовал хранение основных данных, не изменяемые (название, image, описание) Таблица Goods.
Таблица goods_price хранит goods_id и три варианта (price, weight, size).
Структура таблицы Goods

Таблица
Goods

Таблица с ценами
Goods_price

Данные Goods_price

Связи в таблице Goods_price
При выборке получаю предупреждение из
таблицы Goods
В запросе хочу выбрать все товары из категория "Пицца" и имеют наименьший размер в 25 см (size_id = 1)
Запрос
`SELECT goods.id,
goods.name,
goods.url,
goods.image,
goods.description,
category.category,
promo.promo,
size.size,
goods_price.weight,
goods_price.price
FROM goods
JOIN
category
ON
goods.category_id = category.id
JOIN
promo
ON
goods.promo_id = promo.id
JOIN
goods_price
ON
goods.id = goods_price.goods_id
JOIN
size
ON
goods_price.size_id = size.id
WHERE goods.category_id = ?
AND size.category_id = ? AND goods_price.size_id = 1
ORDER BY goods.id ASC`;
Проект реализован на ExpressJs + mysql2
в ExpressJs
выводится результат

Но получаю предупреждение в консоли
1) Насколько правильна реализована логика работы в Бд?
2) Как исправить
Данное выделение не содержит уникального столбца
?
В таблице Goods поле Id - PrimaryKey
В таблице Goods_price поле Id - PrimaryKey, goods_id - вторичный ключ, связанный с таблицей Goods и полем id.
ВАРИАНТ РЕШЕНИЯ 2
Ранее что то подобное реализовал следующим образом
Пример на основе таблицы Orders и Orders_goods
Разбить запрос на два
1) Достать данные из таблицы Goods
2) Сформировать массив цен из таблицы Goods_products
//Показать товары пользователя
async getOrders(req, res){
const userId = req.userId;
try{
const [rows] = await connection.execute(`
SELECT orders.id,
orders.user_id,
orders.status_id,
orders.created_at,
orders.total_price,
orders_status.status
FROM orders
JOIN
orders_status
ON
orders.status_id = orders_status.id
WHERE orders.user_id = ?`
, [userId]);
//Формируем сборный объект даных о заказе
let obj = [];
for(let item of rows){
for(let key in item){
obj[key] = item[key];
}
const [goods] = await connection.execute(`
SELECT orders_goods.id, orders_goods.goods_id, goods.name, goods.image, orders_goods.count, orders_goods.price
FROM orders_goods
JOIN
goods
ON
orders_goods.goods_id = goods.id
WHERE orders_goods.orders_id = ?
`, [item.id]);
//Полный путь к изображению в категориях
for(let item of goods){
item.image = `${req.protocol}://${req.host}/${item.image}`;
}
item.goods = goods;
obj.push(item);
}
return res.json({status: 'Success', orders: obj});
}catch(error){
res.status(400).json({status: false, message: error.message || error.sqlMessage});
}
}
Результат

Ошибок при таком подходе не возникало не в БД, не со стороны NodeJs - ExpressJs.