Итак, у нас есть продукты, которые обычно состоят из одной единицы, и рецепты, которые состоят из различного количества разных продуктов.
Мы хотим отследить несколько основных вещей, таких как цена и информация о питании.
Как бы мы разработали схему РСУБД для этого?
Итак, вот, пожалуй, наиболее очевидное решение:
[Foods] : ID, Name, Carbs, Protein, Fat, Price
[RecipeIngredients] : ID, FoodID, RecipeID, AmountOfFood
[Recipes] : ID, Name
Однако, поскольку рецепт выполняет почти все те же действия, что и продукты, мне нужно создать много дублирующего кода для поддержки обоих.
Вот другой подход:
[Foods] : ID, Name, Carbs, Protein, Fat, Price, IsRecipe
[RecipeFoods] : ID, FoodID, RecipeID (which points to another Food), AmountOfFood
Теперь все действия работают одинаково для обоих. Однако добавление полей, относящихся только к продукту или рецепту, создает пустые столбцы для другого объекта.
Как бы вы решили это? Какой из них вы предпочитаете? Есть ли лучший способ?