Питання без пояснень:
Чи є в будь-якому випадку обмеження з 2 нульових значень, яке завжди вимагає значення 1? Наприклад, два стовпці дати є нульовими, але мають принаймні 1, що вимагає значення
Опис проблеми:
Скажімо, у мене є таблиця під назвою "Витрати"
і мають 2 дати:
prevision_expense_expiration_date DATE NULLABLE cost_payment_date DATE NULLABLE
логіка цих 2 стовпців така:
Я щось придбав і знаю, що за це я повинен заплатити, за якусь дату, як за телефонний рахунок. Я введу це як витрату із коштом_платіж_датою. Ця дата є передбачуваною датою, яку я повинен заплатити, але не фактичною датою платежу, як дата закінчення терміну дії рахунку.
В іншій ситуації я продаю подарункову карту якогось провайдера за її послугу. Можливо , у мене виникне витрата на придбання у мого провайдера послуги, передану моєму клієнту, лише якщо клієнт викупить картку. Отже, подарункова картка має термін придатності, я хочу здійснити попередній платіж за цей "рахунок", не вставляючи як витрату на час дії подарункової картки, якщо термін дії подарункової картки закінчився, цей "рахунок" не повинен надходити на рахунок система.
Я знаю, що у мене можуть бути дві однакові таблиці, які називаються prevision_expense та підтверджені_expense, але це не звучить правильно, тому я маю в тій самій таблиці, 2 дати, незмінні, але я хочу обмежувати чи щось так, що завжди потрібна одна.
Є ще одна можлива стратегія:
payment_date DATE NOT NULL is_prevision_date BOOL NOT NULL
Так, у цьому випадку, якщо дата є попередньою, значення bool було б 1, інакше буде 0. Немає нульових значень, все добре. за винятком того, що я хочу можливість зберігати значення BOTH, коли спочатку у мене є дата попереднього перегляду, а ТОГО (дозволяє сказати два дні пізніше) мати підтверджену дату цього видатку, і в такому випадку для стратегії 2 у мене не буде цього варіанту.
Чи роблю все неправильно в дизайні бази даних? : D
CHECK
обмеженням. Не потрібно зберігати стовпчик.