Вам, вероятно, нужно отменить поворот данных, чтобы их нормализовать, чтобы в итоге вы получили:
Doctor: DoctorID, DoctorDetails...
FeeSchedule: DoctorID, ScheduleID, EffectiveDate, OtherDetailAtThisLevel...
FeeScheduleDetail: ScheduleID, ProcedureCode, Fee, OtherDetailAtThisLevel...
Когда данные поступают для врача, они поворачиваются, создается новое расписание иСтроки подробностей создаются из непивотированных данных.
В службах SSIS есть компонент разворачивания, и это нормально - сначала нужно загрузить расписание, а затем детали.Если формат значительно отличается, вам может потребоваться пользовательский источник данных или просто избегать служб SSIS.
Эта система будет отслеживать новые расписания для врачей.Если расписание для врача идентично, вы просто не могли бы его вставить.
Если эта логика обширна, вы можете загрузить данные в промежуточные таблицы (SSIS или что-то еще) и сделать все это в SQL (T-SQL также имеет оператор UNPIVOT).Это может иметь преимущества в том, что код находится в одном месте и может выполнять все свои операции в наборах.
Что касается почтовых индексов, если у врача нет комиссии, это как обычная и обычная плата?Это может быть просто определено из почтового индекса строки доктора.В этом случае у вас есть несколько вариантов.Вы можете наложить график оплаты услуг врача на график оплаты по почтовому индексу:
ZipCodeSchedule: ZipScheduleID, ZipCode, EffectiveDate
ZipCodeScheduleDetail: ZipScheduleID, ProcedureCode, Fee
Или вы можете сохранить это в обычном графике оплаты (возможно, с каким-то флагом, который был установлен по умолчанию в UCR).*