説明なしの質問:
とにかく、常に1が値を必要とする2つのnull値の制約を持つことはありますか?たとえば、2つの日付列はどちらもnullですが、値が必要な1 つ以上の列があります。
問題の説明:
Expenseというテーブルがあるとします
そして2つの日付があります:
prevision_expense_expiration_date DATE NULLABLEense_payment_date DATE NULLABLE
これら2つの列のロジックは次のとおりです。
私は何かを購入しましたが、電話代のような日付で支払う必要があることはわかっています。私はこれをexpense_payment_dateとともに費用として入力します。この日付は支払い予定日ですが、請求書の有効期限のような実際の支払い日ではありません。
他の状況では、あるサービスのギフトカードを販売しています。私があり、サービスが私のクライアントに転送私のプロバイダに購入の費用を持っているだけで、クライアントはカードを引き換える場合。したがって、ギフトカードには有効期限があります。ギフトカードが有効な期間の費用として挿入せずに、その「費用」を予測します。ギフトカードの有効期限が切れた場合、その「費用」はアカウントに入力しないでくださいシステム。
prevision_expenseとconfirm_expenseと呼ばれる2つの同等のテーブルを使用できることはわかっていますが、適切に聞こえないため、同じテーブルに2つの日付があり、nullを指定できますが、常に必要になるように制約または何かしたいです。
別の可能な戦略があります:
payment_date DATE NOT NULL is_prevision_date BOOL NOT NULL
したがって、この場合、日付がプロビジョニングの場合、ブール値は1になります。それ以外の場合は、0になります。null値はなく、すべて良好です。ただし、最初に予測日があり、THEN(2日後と言います)にその費用の確認日があるときに両方の値を保存するオプションが必要な場合を除きます。この場合、戦略2では、そのオプションはありません。
私はデータベース設計ですべてを間違っていますか?:D
CHECK
制約を使用してこれを行うこともできます。永続化された列は必要ありません。