У меня есть 2 похожих типа вещей, на которые я хочу указать в определенном поле в базе данных. Один из них представляет собой комбинацию 1 или более другого.
Как мне разработать базу данных в такой ситуации?
В моем текущем примере у меня есть (простые) пищевые ингредиенты и (комбинированные) пищевые блюда и я хочу, чтобы Либо Один , либо эти Вещи были бы записями в таблице питания / питания.
Таким образом, пользователь может съесть простую еду, такую как Apple ИЛИ сложный продукт, такой как Apple P ie, который состоит из 200 г яблок и 100 г муки и 30 г сахара и c. в какой-то момент времени в еде. Я думаю примерно так:
Ингредиенты | IID | | Имя | | Калории |
Блюда | DID | | Имя | (| Калории | ???)
Данные о еде | DID | | IID | | Сумма |
.
Пользователи | UID | | FirstName | | LastName | et c.
Питание | UID | | DID | | Дата / время | | Сумма |
Я нахожу это действительно раздражающим, поскольку каждый отдельный ингредиент должен иметь две (в основном идентичные) записи для начала: 1 в таблице ингредиентов и 1 в таблице блюд, чтобы их можно было объединить в пару в еде. Я что-то здесь упускаю? Есть ли способ обойти это?
Также я не знаю, должен ли Di sh включать калории в базу данных. Наличие калорий для Di sh в базе данных довольно избыточно, потому что его можно вычислить при создании запроса (суммируя и вычисляя его соответствующие ингредиенты). НО это кажется довольно неэффективным, так как это вычисление должно было бы быть сделано для каждого отдельного запроса di sh (и оно ухудшилось бы, добавляя такие вещи, как Macros / Nutrional Values / Price, которые я оставил здесь для ясности / простоты) .
Также, если у меня DO есть калории (и другие вещи, относящиеся к еде в целом) для Di sh, я мог бы просто иметь одну таблицу в этом сценарии, например:
Еда | FID | | Имя | | Калорийность | (| Простой [bool] |?)
Данные о продуктах питания | FID | | FID | | Сумма |
Казалось бы, в общем лучше. Простое поле будет различать guish между простыми ингредиентами или Di sh, которые, я думаю, стоит добавить, чтобы вам не приходилось искать в данных по продуктам каждый элемент.
НО, если я хочу представить Specifi c Di sh -Только данные, тогда я хотел бы сделать некоторые другие таблицы, такие как:
DI SH DATA | FID | | TimetoCook | | Презентация | и др c. (что кажется мне довольно странным / не интуитивным)
.
Итак, вопрос в том, что такое ЛУЧШАЯ общая практика в этом сценарии ?
Как правило, лучше выполнять дополнительные вычисления при запросах, чем иметь избыточные данные в подобных ситуациях? Я что-то упускаю, что могло бы сделать это проще / лучше в целом?