Дизайн таблицы SQL с условными ограничениями - PullRequest
0 голосов
/ 11 мая 2011

У меня есть проблема дизайна стола, для которой мне нужно хитрое решение.

Допустим, у меня есть две таблицы со связями:

Contract 1---N Payment

Теперь, допустим, у меня есть устаревшие данные, которые нужно поместить в эти таблицы. Проблема, однако, заключается в том, что многие из предыдущих записей об оплате агрегированы по нескольким контрактам

Таким образом, мы могли бы действительно рассматривать это как:

Новое:

SomethingAboveContract 1---N Contract 1---N Payment

Legacy:

SomethingAboveContract 1---N Payment

Теперь я могу обойти это, создав отношения M-N между Контрактом и Платежом.

Contract 1---N ContractPayment N---1 Payment

(я смогу определить все договоры, связанные с агрегированным платежом)

Это хорошо для устаревших данных, но на самом деле я хочу, чтобы в будущем соотношение 1-N между Договором и Платежом было обязательным. Итак, используя мою очень неуклюжую каракули для иллюстрации, я хотел бы сделать это:

enter image description here

т.е. если платеж агрегирован, ContractID будет НЕДЕЙСТВИТЕЛЕН, в противном случае он не должен быть нулевым. Другими словами, мне нужно найти способ применить следующие непредвиденные обстоятельства в таблице платежей:

  1. ContractID обнуляется, если в ContractPayment появляется PaymentID
  2. ContractID не обнуляется, если PaymentID не отображается в ContractPayment

Хотя я не знаю, как это сделать.

Даже если это возможно, это кажется немного уродливым (что неизменно является устаревшим преобразованием данных). Так что, если у кого-то есть более элегантное решение, это было бы замечательно. В противном случае все, что работает!

Спасибо
Karl

1 Ответ

3 голосов
/ 11 мая 2011

Используйте две (наборы) таблиц, одну для «наследства» и одну для дальнейшего развития.Вы должны иметь возможность определять бизнес-правила просто и без необходимости обнулять столбцы (логика трех значений SQL - это катастрофа).Привилегии могут быть отозваны в «прежних» таблицах, чтобы не допустить их дальнейшего использования.

...