PostgreSQLでこれを行う方法は次のとおりです。私は危険な (非初心者/高度な) ツールを使用していることに注意してください。落とし穴を理解する価値があります。
ここには多数のテーブルがあるため、問題は制約をどのように管理するかです。これは少し複雑ですが、ここで私がやることは次のとおりです。
CREATE TABLE file (...);
-- add your tables for tracking form data here....
CREATE TABLE file_to_form (
file_id int NOT NULL;
refkey int NOT NULL,
form_class char NOT NULL
CHECK NOINHERIT (file_id IS NULL)
); -- this table will never have anything in it.
CREATE TABLE file_to_form_a (
PRIMARY KEY (file_id, refkey, form_class)
FOREIGN KEY (refkey) REFERENCES file_a (form_id)
CHECK (form_class = 'a')
) INHERITS (file_to_form);
CREATE TABLE file_to_form_b (
PRIMARY KEY (file_id, refkey, form_class)
FOREIGN KEY (refkey) REFERENCES file_b (form_id)
CHECK (form_class = 'b')
) INHERITS (file_to_form);
-- etc
これで、どのフォームがファイルに関連付けられているかを表示するための一貫したインターフェイスが得られ、file_to_form テーブルを検索してそれらを見つけることができます (これは、それを継承するすべてのテーブルの読み取り専用ビューと同様に機能します)。これは、落とし穴を真剣に受け止め、それらの処理方法を考えれば、PostgreSQL のテーブル継承が本当に役立つケースの 1 つです。