【发布时间】:2017-11-24 02:28:30
【问题描述】:
我正在实现两个对象,比如 HotDog 和 Burger,它们都是 Food 的子类。
我正在开发的系统将用于创建热狗和汉堡,可能还有其他类型的食物,但绝不会用于创建通用的“食物”对象。
食物
class Food{
//some fields
protected $cooked_by;
protected $use_before_date;
}
热狗:
class HotDog extends Food{
//some fields specicifc to HotDog
private $sauage_type;
}
汉堡
class Burger extends Food{
//some fields specicifc to Burger
private $burger_type;
}
这些模型有一个对应的 DB Table,即 Food、HotDog 和 Burger。
如果我想选择某个酋长烹制的所有 HotDog,目前我必须像这样循环遍历 HotDog 的每一行:
SELECT food_id FROM hotdog
然后遍历整个结果集,为每一行做:
SELECT * FROM food WHERE food_id = x AND cooked_by=chief0001
我希望您了解我在这里尝试构建的结构。目前必须获取每个 HotDog 行的所有 food_id,然后从食物表中逐一选择是严重的性能损失。
如果能够这样做就好了:
SELECT * FROM hotdog WHERE cooked_by = chief0001
但是,如您所见,当前实现模型和表的方式不允许我这样做。当然,我可以在 HotDog 和 Burger 表中添加另一列,但是,如果我需要查询除cooked_by 之外的任何内容,我将不得不在这两个表中添加另一列。
最后,我将把 Food 表中的所有列添加到 HotDog 和 Burger 中。
这是进行表继承的正确方法吗?我觉得这里有些不对劲,应该有一个更清洁、更好的解决方案。然而,我正在努力想出一个克服这个问题的好方法。
【问题讨论】:
标签: php mysql inheritance