У меня есть проблема дизайна стола, для которой мне нужно хитрое решение.
Допустим, у меня есть две таблицы со связями:
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 между Договором и Платежом было обязательным. Итак, используя мою очень неуклюжую каракули для иллюстрации, я хотел бы сделать это:
т.е. если платеж агрегирован, ContractID будет НЕДЕЙСТВИТЕЛЕН, в противном случае он не должен быть нулевым. Другими словами, мне нужно найти способ применить следующие непредвиденные обстоятельства в таблице платежей:
- ContractID обнуляется, если в ContractPayment появляется PaymentID
- ContractID не обнуляется, если PaymentID не отображается в ContractPayment
Хотя я не знаю, как это сделать.
Даже если это возможно, это кажется немного уродливым (что неизменно является устаревшим преобразованием данных). Так что, если у кого-то есть более элегантное решение, это было бы замечательно. В противном случае все, что работает!
Спасибо
Karl