製品属性の単一テーブル継承 (潜在的に後のクラス テーブル継承) モデルを使用して製品データベースを実装しています。それはすべて正常に機能していますが、参照整合性を維持しながら製品のバリエーションを処理する最善の方法を見つけようとしています。
現在、メインの商品テーブルの簡略版は次のようになっています。
CREATE TABLE product (
id SERIAL NOT NULL,
name VARCHAR(100) NOT NULL,
brand VARCHAR(40) NOT NULL,
color VARCHAR(40)[] NOT NULL
)
(color は、任意の製品のすべての標準色をリストできる配列です)
バリエーションを処理するために、product_variant_theme と呼ばれるテーブルで製品が異なるプロパティを追跡することを検討しました。
CREATE TABLE product_variant_theme (
id SERIAL NOT NULL,
product_id INT NOT NULL,
attribute_name VARCHAR(40) NOT NULL
)
問題のproduct_idを含む行を挿入し、属性の列名をattribute_nameフィールドに追加します。たとえば、「color」です。
そもそもこれがまったくばかげた方法であるかどうか教えてください。ただし、attribute_name と実際の列名自体の間に制約がないことに懸念を抱いています。明らかに、製品テーブルを変更してその列を削除すると、それを参照する 2 番目のテーブルに行が残る可能性があります。私が探しているものと同等の機能は、テーブルを説明する information_schema ビューへの attribute_name の外部キーのようなものですが、それを直接行う方法はないと思います。ここでそのような機能を取得するための合理的な方法。
ありがとう。