私の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)。
このタイプのクエリを実行するためのよりクリーンなテーブルまたはクエリ構造はありますか?