私は2つのオブジェクト、例えばHotDogとBurgerを実装しています。それらは両方ともFoodのサブクラスです。PHP MySQLテーブルの継承
私が取り組んでいるシステムは、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テーブル、すなわち食品、ホットドッグとハンバーガーを持っています。
どのように私は特定のチーフで調理されたすべてのホットドッグを選択したい場合は、現在私はこのようなホットドッグのすべての単一の行をループする必要があります。
SELECT food_id FROM hotdog
そして、全体の結果セットをループし、それぞれの行がやって:
SELECT * FROM food WHERE food_id = x AND cooked_by=chief0001
私はあなたが私がここで構築しようとしています構造を理解してほしいです。現在、HotDogの行ごとにすべてのfood_idを取得しなければならず、食卓から1つ1つを選択すると、パフォーマンスが大幅に低下します。
それだけで行うことができるようにいいだろう:あなたが見ることができるよう
SELECT * FROM hotdog WHERE cooked_by = chief0001
をしかし、モデルとテーブルを実装する現在の方法は、私はこれを実行することはできません。もちろん、HotDogテーブルとBurgerテーブルに別の列を追加することはできますが、cooked_by以外のクエリを行う必要がある場合は、両方のテーブルに別の列を追加する必要があります。
最終的に、私はFoodテーブルのすべての列をHotDogとBurgerに追加します。
これは、テーブルの継承を行う正しい方法ですか?私はここに何かがないように感じています。よりクリーンでより良い解決策が必要です。しかし、私はこれを克服するための良い方法を考え出すために私の髪を引っ張っている。
ありがとうございました!今私はSQL JOIN LOLについて知らないばか者のように感じます。 JOINの操作は一般的に非常に遅いですか? – Gapton
JOINはSQLの不可欠な部分なので、良いSQLエンジンはこのために最適化されている必要があります。また、ON句で使用される両方のフィールド(この例ではf.idとh.food_id)でインデックスを持っていることを確認してください。これは非常にうまくいくはずです:) – Vadim
@VadimこのソリューションはSQLクエリではうまく動作しますが、 'Burger' POST操作や' Food'と 'Burger'の両方を含むPUT操作を頻繁に行う必要がある場合はどうでしょうか?毎回2つのテーブルを更新する必要があるため、パフォーマンスが非常に低下することはありませんか? –