-1 голос
 
1143 просмотра
6.01.2020 / 00:49  Витаминыч

Проектирование базы данных

Проектирую небольшую базу. Имеется следующий набор данных: НазваниеБлюда, Категория, Калорийность, Стоимость, НазваниеПродукта, ЕдиницаИзмерения, Жиры, Белки, Углеводы, Витамины, Цена, Поставщик, Количество, Состояние.

Если привести к форме, то уже есть две таблицы:
  1. 1) Поставщики
  2. - *КодПоставщика
  3. - Поставщик
  4. 2) ЕдиницыИзмерения
  5. - *КодЕдиницы
  6. - ЕдинИзмер

Далее, получается таблица с продуктами:
  1. - *КодПродукта
  2. - НазваниеПродукта
  3. + КодЕдиницы
  4. - Количество
  5. - Жиры
  6. - Белки
  7. - Углеводы
  8. - Витамины
  9. - Цена
  10. + КодПоставщика
  11. - Состояние

Теперь мне интересно, как будет выглядеть основная таблица? Если блюдо может состоять из нескольких продуктов.
Изм. Витаминыч от 6.01.2020 / 00:51
Ответы
 
2 голоса
 
# 6.01.2020 / 02:05  vlavolk
таблица `блюдо`
код блюда
название

таблица `состав блюда`
код блюда
код продукта
количество продукта

и в этой таблице содержание типа
код блюда | код продукта | кол
1 | 2 | 10
1 | 4 | 2
5 | 4 | 5

ну или использовать массивы или сериализовать список продуктов в строку/жсон и добавить в таблицу `блюдо` колонку `состав`
6.01.2020 / 05:01  Витаминыч
Я пока тоже к промежуточной таблице пришел. Потом только джойнить остается при выборке.

Последнее не подходит, пока используются возможности среды. А так-то я хотел найти аналог json array :gg:
6.01.2020 / 19:44  Arigato
Только через таблицу связей и никак иначе (ибо связь многие-ко-многим). У хранения сериализованного массива есть пара проблем: 1) он не поддерживает механизмы обеспечения целостности данных, 2) не все СУБД умеют работать с XML/JSON (разбирать документы и делать запросы по ним).
7.01.2020 / 13:23  vlavolk
Витаминыч, массив json можно хранить как строку, просто каждый раз тогда придется дополнительно сериализовать и десериализовать. Немного неудобно
7.01.2020 / 19:00  Витаминыч
aRiGaTo, соглы
 
0 голосов
 
# 18.01.2020 / 18:37  Витаминыч
Итого, что получается, после проставления связи и изменения всех таблиц:
https://annimon.com/qa/a775/%D1%80%D0%B8%D1%818.PNG
Изм. Витаминыч от 18.01.2020 / 18:37

рис8.PNG (15.89 кб.)
 
-2 голоса
 
# 7.01.2020 / 12:37  Vlad_jonson
Привет, есть идея не знаю подойдет ли, если в таблице указать тип записи set для текста или enum для чисел, и искать запросом:
  1. SELECT * FROM `dish` WHERE products LIKE 'product_name'
  2. SELECT * FROM `dish` WHERE products LIKE 'product_name,product_name2'
7.01.2020 / 19:03  Витаминыч
Это непонятно откуда, я пока вообще ничего не использую, кроме средств базы данных libre office. Вся информация будет отображаться в местных формах. Клиент-серверное приложение позже будет, наверное
Всего: 3

Реклама

Мы в соцсетях

tw tg yt gt