私のMySQLデータベースには、次products
の行に沿ったテーブルがあります
id | type | name | weight | base_price | [...]
はid
主キーで、type
はENUM('personal','industrial')
です。個人用製品と工業用製品の両方に、いくつかの追加情報がproducts_personal
およびproducts_industrial
テーブルに格納されています。どちらも形です
pid | additional info [...]
wherepid
は で外部キー化されproducts.id
、追加情報は と で異なりproducts_personal
ますproducts_industrial
。私のテーブルには、2 つの関数 ( ~CREATE FUNCTION
) と がPRICE_PERSONAL(...)
ありPRICE_INDUSTRIAL(...)
ます。これらの関数は、base_price
および一部の追加情報を使用して最終価格を計算します。
id | type | name | [...] | price
すべての製品のビューを作成したいと考えています。私の今の候補は
CREATE VIEW foo AS
SELECT id, type, name, [...], PRICE_PERSONAL(params) AS price
FROM products
INNER JOIN products_personal ON products.id = products_personal.pid
UNION
SELECT id, type, name, [...], PRICE_INDUSTRIAL(params) AS price
FROM products
INNER JOIN products_industrial ON products.id = products_industrial.pid
ただし、これはかさばり、ORDER BY
パフォーマンスが低下するようです (インデックス化されていない結果を並べ替える必要があるためUNION
)。
このタイプのクエリを実行するためのよりクリーンなテーブルまたはクエリ構造はありますか?