Как спроектировать эту схему РСУБД? - PullRequest
0 голосов
/ 28 июня 2010

Итак, у нас есть продукты, которые обычно состоят из одной единицы, и рецепты, которые состоят из различного количества разных продуктов.

Мы хотим отследить несколько основных вещей, таких как цена и информация о питании.

Как бы мы разработали схему РСУБД для этого?

Итак, вот, пожалуй, наиболее очевидное решение:

[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

Теперь все действия работают одинаково для обоих. Однако добавление полей, относящихся только к продукту или рецепту, создает пустые столбцы для другого объекта.

Как бы вы решили это? Какой из них вы предпочитаете? Есть ли лучший способ?

Ответы [ 2 ]

2 голосов
/ 28 июня 2010

Храните вашу базу данных нормализовано .

A Recipe - это не Food, как вы уже заметили, поэтому они не должны совместно использовать таблицу.

Каждый объект должен иметь свою собственную таблицу в базе данных.

0 голосов
/ 28 июня 2010

Если у вас должна быть эта структура базы данных (от +1 до Одеда), убедитесь, что неиспользуемые столбцы имеют значение NULL и что ваш код обрабатывает это.

...