問題タブ [table-per-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 前へ:PostgreSQLで識別子列を処理する最良の方法は何ですか?
大量のポリモーフィズム/継承/サブタイピングを含むデータベース スキーマがあります。コメント サブジェクトやパーミッション ターゲットなどの特定の外部キーは多数のテーブルを指し、グローバルに一意のコードなどの特定のプロパティは複数のテーブルで共有されます。
これを構造化する方法は、親テーブルと子テーブルが UUID プライマリ キーを共有する、クラスごとのテーブル継承によるものです。UUID が選択されたのは、衝突を心配することなく、ビジネス ニーズに合わせてテーブルをマージおよび分離できるようにするためです。
現在、親の型に関する明示的な識別子列はありませんが、いくつかの理由から追加したいと考えています。これにより、2 つの異なる具象サブタイプが誤って同じ親タイプを指す可能性が排除されます。多くの場合、子固有のデータは必要なく、特定の id に一致するサブタイプの知識のみが必要なため、結合も頻繁に保存されます。
いくつかの可能なアプローチを考えることができます:
具体的なサブタイプ テーブルの名前を格納するプレーン テキスト フィールドを使用するだけです。
上記と同じことを行いますが、可能なテーブルをリストするカスタム Enum タイプを使用します。
ルックアップ テーブルを指す「id」フィールドを使用します。
(2) は (1) よりも優れたオプションのように思えますが、移行の手間がかからずに Enum から値を削除できないというかなり大きな欠点があります。この識別子列が多くのテーブルに表示される場合、これは特に苦痛です。
(3)は「変更が必要な列挙型」によく使用されますが、サブタイプの外部キーを適切に処理するために、UUID/int id 値を DDL にハードコーディングする必要があります。 .
これは(1)に傾いていますが、より良いオプションがあるかどうか疑問に思っていました. おそらく、文字セットが非常に限られている、頻繁に繰り返される識別子用に最適化されたテキスト型でさえあります。