Keine Erklärung Frage:
Gibt es überhaupt eine Beschränkung von 2 Nullwerten, für die immer 1 einen Wert haben muss? Zum Beispiel zwei Datumsspalten, beide null, aber mindestens 1, für die ein Wert erforderlich ist
Problembeschreibung:
Angenommen, ich habe eine Tabelle namens Expense
und habe 2 Termine:
prevision_expense_expiration_date DATE NULLABLE cost_payment_date DATE NULLABLE
Die Logik dieser beiden Spalten lautet wie folgt:
Ich habe etwas gekauft und weiß, dass ich es irgendwann bezahlen muss, wie eine Telefonrechnung. Ich werde dies als Aufwand mit einem Spesenzahlungsdatum eingeben. Dieses Datum ist das voraussichtliche Datum, an dem ich bezahlen soll, aber nicht das tatsächliche Datum der Zahlung, wie das Ablaufdatum der Rechnung.
In einer anderen Situation verkaufe ich eine Geschenkkarte eines Anbieters für deren Service. Ich kann die Kosten für den Kauf des an meinen Kunden übertragenen Dienstes nur dann an meinen Anbieter tragen, wenn der Kunde die Karte einlöst. Daher hat die Geschenkkarte ein Ablaufdatum. Ich möchte eine Voraussage für diese "Ausgabe" machen, ohne sie als Ausgabe für die Zeit einzufügen, in der die Geschenkkarte gültig ist. Wenn die Geschenkkarte abläuft, sollte diese "Ausgabe" nicht in das Konto eingehen System.
Ich weiß, dass ich 2 gleiche Tabellen mit den Namen prevision_expense und verify_expense haben kann, aber es klingt nicht richtig, also habe ich in derselben Tabelle 2 Daten, nullbar, aber ich möchte einschränken oder so, so dass immer eine erforderlich ist.
Es gibt noch eine andere mögliche Strategie:
payment_date DATE NOT NULL is_prevision_date BOOL NOT NULL
In diesem Fall wäre der Bool-Wert 1, wenn das Datum Vorrang ist, andernfalls 0. Keine Nullwerte, alles ist gut. mit der Ausnahme, dass ich die Option möchte, BEIDE Werte zu speichern, wenn ich zuerst ein Voraussetzungsdatum habe und DANN (sagen wir zwei Tage später) ein bestätigtes Datum für diese Ausgabe hat. In diesem Fall habe ich mit Strategie 2 diese Option nicht.
Mache ich beim Datenbankdesign alles falsch? : D.
quelle
CHECK
Einschränkung tun . Keine dauerhafte Spalte erforderlich.CREATE TABLE Test_Constraint2 ( A DateTime Null, B DateTime Null, CONSTRAINT A_or_B_Not_Null CHECK (CASE WHEN A IS Null AND B IS Null THEN 0 ELSE 1 END = 1) )
Ich fand einen Artikel , dass Aussehen , die gleiche Sache wie hier
quelle