この例では、共通のデータベース設計チャレンジを調査します。単一のテーブルが他の複数のテーブルから一次キーを参照する必要がある外部キー関係を作成する。 具体的なシナリオには、 demutions
tableが必要なテーブルが含まれます。
問題とその解決策
問題は、
控除の外部鍵は、
の両方のプライマリキーを直接参照できるかどうかです。 答えは、標準のリレーショナルデータベースで直接ではありません。 単一の外部キーは、単一の主キーのみを参照できます。
提案されたソリューションは、これを解決するために十分に構造化された継承モデルを活用します。
継承ベースのアプローチ
テーブル
、
employes_ceは相続階層を表します。 従業員
はベーステーブルであり、 employees_ce
および employees_sn
がそれから継承する専門のテーブルとして。
データベース構造:
従業員(id intプライマリキー、名前Varchar(255))
employes_ce(id int primary key、ce_spicific_attribute varchar(255)、employee_id int、foreign key(employee_id)参照従業員(ID))
employes_sn(id intプライマリキー、SN_SPIFIC_ATTRIBUTE VARCHAR(255)、Employee_Id int、外部キー(従業員_ID)参照従業員(ID))
解決:
employees (id INT PRIMARY KEY, name VARCHAR(255))
employees_ce (id INT PRIMARY KEY, ce_specific_attribute VARCHAR(255), employee_id INT, FOREIGN KEY (employee_id) REFERENCES employees(id))
employees_sn (id INT PRIMARY KEY, sn_specific_attribute VARCHAR(255), employee_id INT, FOREIGN KEY (employee_id) REFERENCES employees(id))
employes_sn の両方への直接リンクの代わりに、控除テーブルは共通の親のテーブルを参照する必要があります。
控除(id int primary key、employee_id int、decuction_amount decimal(10,2)、...、foreign key(employee_id)参照従業員(id))
このアプローチは、参照の完全性を保証し、冗長性を回避します。
employee_id in
decutions in speellose _ce
または emplosines_sn
の追加情報があるかどうかに関係なく、
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3