Я разрабатываю систему, которая позволит пользователям брать данные из одной системы и отправлять в другие системы. Одна из систем назначения имеет сложную SOA (веб-службы), а другая - мэйнфрейм, который принимает плоские файлы для ввода.
Я создал базу данных, в которой есть таблица PublishEvent и таблица PublishEventType. Существуют также нормализованные таблицы, которые относятся к типу публикуемого события.
У меня также есть таблица «interface», которая представляет собой выпуклую версию нормализованных таблиц данных. У конечного пользователя есть процесс, который помещает данные в интерфейсную таблицу. Я не уверен в точном процессе - я думаю, что это какое-то приложение для составления отчетов, которое может экспортировать результаты в таблицу SQL. Затем я использую пакет служб SSIS, чтобы извлечь данные из интерфейсной таблицы, поместить их в нормализованную структуру данных и создать новые строки в таблице PublishEvent. Я использую плоский стол, потому что когда я впервые показывал им реляционные таблицы, они казались очень запутанными.
У меня есть служба Windows, которая отслеживает новые строки в таблице PublishEvent. Служба Windows расширена за счет плагинов (с использованием инфраструктуры MEF). Выбор подключаемого модуля зависит от значения поля PublishEventTypeID в строке PublishEvent.
PublishEventTypeID 1 вызывает подключаемый модуль, который считывает данные из одного набора таблиц и вызывает веб-службу SOA. PublishEventTypeID 2 вызывает подключаемый модуль, который считывает данные из другого набора таблиц и создает плоский файл для отправки на мэйнфрейм.
Похоже, я внедряю анти-шаблон "База данных как IPC". Должен ли я изменить свой дизайн, чтобы использовать систему, основанную на обмене сообщениями? Является ли процесс помещения данных в плоскую таблицу в нормализованные таблицы излишним?
РЕДАКТИРОВАТЬ: Это разрабатывается в .NET 3.5