使用されている例は、私が実際に解決しようとしているドメインではありません。それはちょうど例です。DBデザイン:テーブルの継承と階層
背景
私はtable inheritanceを定義しています。テーブルAPIパッケージ&ビューを使用して、必要なロジックを処理します。&プレゼンテーション
異種の属性を持つ複数の階層レベルの階層も定義する必要があります。
テーブル継承(場所>州、市)&階層(状態< - 市)を組み合わせることは、設計上の問題を抱えています。私は都市の名前を強制する一意のキーを定義したい
問題
は州内で一意であるが、[名前]フィールドの抽象化は、それを妨げています。必要に応じてPL/SQLで処理することができますが、可能であればSQLレベル(理想的には追加テーブルなし)で実行したいと思います。
制約
他のテーブルを総称階層(位置)の任意のレベルを参照できるようにする必要があります。
他のテーブルでも、階層の特定のレベルを参照できる必要があります。私は原因の関係のグラフの複雑さにsingle table inheritanceを行うことはできません
思考。
簡単に名前欄を複製することを考えましたが、通常のフォームに違反することはありません。
例
CREATE TABLE location
(id NUMBER ( 38) PRIMARY KEY
, name VARCHAR2(1000) NOT NULL
, type_id NUMBER ( 38) NOT NULL
--, other common/super attributes
);
CREATE TABLE state
(id NUMBER(38) PRIMARY KEY
REFERENCES location (id)
--, child attributes
);
CREATE TABLE city
(id NUMBER(38) PRIMARY KEY
REFERENCES location (id)
, state_id NUMBER(38) NOT NULL
REFERENCES state (id)
--, child attributes
);
ウィスコンシンには6つのスプリングフィールドがあります。テキサカーナはテキサス州とアーカンソー州の両方にあります –
州/都市は私の実際の問題のドメインではありません。私は例として使っているだけなので、重複した都市名の現実は懸念されません。 –