두 개의 객체 (예 : HotDog 및 Burger)를 구현 중이며 둘 다 Food의 하위 클래스입니다.PHP MySQL 테이블 상속
내가하고있는 시스템은 HotDog와 Burger, 다른 유형의 식품 인 을 만드는 데 사용되지만 일반 "음식"개체를 만드는 데 사용되지 않습니다.
식품
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를 가져와야하며, 식탁에서 하나씩 선택하면 심각한 성능 저하가 발생합니다. 당신이 볼 수있는
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 쿼리에서 매우 잘 작동하지만'Food '와'Burger'둘 다 자주 사용하는'Burger' POST 작업 또는 PUT 작업을해야하는 경우는 어떨까요? 매번 두 개의 테이블을 업데이트해야하므로 성능이 매우 떨어질까요? –