私は、次のモデル(主キーIDのに焦点を当て、他のすべてのフィールドを残して簡素化)を持っている:SQLモデル/スキーマ設計、チェック制約、FKまたはテーブル再設計?
[invoice]
invoice_id
customer_id
invoice_description
[customer]
customer_id
company_id
customer_name
[company]
company_id
company_name
[strategy]
strategy_id
strategy_descripton
同社は順番にその顧客に属する多くの請求書を持つことができ、多くの顧客が含まれています。
上記には記載されていませんが、私はまた、企業(および1つの会社のみ)に属する戦略のリストを持ちたいと考えています。
私は、顧客、請求書、会社が、自分が所属する会社の戦略を参照する「デフォルト戦略」を定義できるようにしたいと考えています。
私はstrategy_idという別のFKフィールドを各テーブル(請求書、顧客、会社)に入れることができますが、変更が行われた場合(誰かが別の会社に戦略を移そうとする)別の会社の戦略リストに属する戦略を指しているインボイスや顧客で終わることはありませんか?
どのように私はこれに対処する必要がありますか?これをビジネスロジックでチェックするか、チェック制約を使用する必要がありますか、これはテーブルの再設計と外部キーを使って達成できますか?
事前に多くのおかげで、
クリス
感謝を。 はい、誰かが使用中に別の会社に戦略を変更しようとした場合、これは許可されないことが重要です。 上記のことを達成するためのSQL制約条件/コードのリンクがあれば、通常はビジネスロジックレベルでしかチェックしていませんが、最近では、アプリケーションが奇妙な状態データベースでは有効ですが、エンティティモデルでは無効です。 あなたは私の質問に上記に感謝しました、ありがとうございます。 – g18c
私は助けてくれると嬉しかったです。これ以上質問があれば。 :) – Kyra
最終的な1つの明確化/質問、ビジネスロジックレイヤーでもこれらの制約をチェックするのは正しいですか(SQLバックエンドでEntityFrameworkを使用しています)、または処理するデータベースのままにしておきますか?私は仕事の複製や、さまざまな場所でのルールの実装を避けたいと考えています。 – g18c