Я реализую два объекта, например HotDog и Burger, и они оба являются подклассами Food.
Система, над которой я работаю, будет использоваться для создания HotDog и Burger, потенциально других типов Food, но никогда не будет использоваться для создания универсального объекта "Еда".
Еда
class Food{
//some fields
protected $cooked_by;
protected $use_before_date;
}
HotDog:
class HotDog extends Food{
//some fields specicifc to HotDog
private $sauage_type;
}
Бургер
class Burger extends Food{
//some fields specicifc to Burger
private $burger_type;
}
Эти модели имеют соответствующую таблицу БД, а именно Food, HotDog и Burger.
Как, если я хочу выбрать все HotDog, приготовленные определенным начальником, в настоящее время я должен проходить через каждыйстрока HotDog выглядит следующим образом:
SELECT food_id FROM hotdog
Затем переберите весь набор результатов для каждой строки:
SELECT * FROM food WHERE food_id = x AND cooked_by=chief0001
Я надеюсьВы понимаете структуру, которую я пытаюсь построить здесь.В настоящее время получение всех food_id для каждой строки HotDog, а затем выбор из таблицы продуктов питания один за другим является серьезным ударом по производительности.
Было бы неплохо иметь возможность просто выполнить:
SELECT * FROM hotdog WHERE cooked_by = chief0001
Однако, как вы можете видеть, текущий способ реализации моделей и таблиц не позволяет мне это делать.Конечно, я могу добавить еще один столбец в таблицы HotDog и Burger, однако, если мне нужно будет запросить что-либо, кроме cooked_by, мне придется добавить еще один столбец в обе таблицы.
В конце концов, я просто добавлю всестолбцы в таблице Food в HotDog и Burger.
Это правильный способ наследования таблиц?Я чувствую, что здесь что-то не так, и должно быть более чистое и лучшее решение.Однако я дергаю себя за волосы, пытаясь придумать хороший способ преодолеть это.