Я работаю над приложением Compact Framework, работающим на Windows Mobile.Он должен использоваться водителями доставки, чтобы сообщать им о своей следующей работе и отслеживать расходы и т. Д. У меня есть база данных SQL CE на мобильных устройствах и SQL Server на сервере.После борьбы с серьезными проблемами с производительностью и конфигурацией Sync Framework я написал свой собственный код синхронизации с использованием WCF.Это работает хорошо и намного быстрее, чем Sync Framework, но меня попросили ускорить его.Теперь мы углубимся в детали проблемы.Надеюсь, я могу объяснить это ясно.
Синхронизация работает по одной таблице за раз и является только односторонней.Обновления отправляются с сервера только на КПК.Передача данных обратно на сервер обрабатывается совершенно по-другому.Прежде всего я удаляю все записи на КПК, которые были удалены с сервера.Из-за ограничений базы данных я должен удалить из «дочерних» таблиц перед удалением из «родительских» таблиц, поэтому я работаю над иерархией снизу.Например, я удаляю записи из таблицы счетов-фактур перед удалением из таблицы продуктов.
Далее я добавляю новые записи на КПК, которые были добавлены на сервер.В этом случае мне нужно сначала обновить родительские таблицы, а затем выполнить иерархию, а потом обновить дочерние таблицы.
Проблема в том, что моему боссу не нравится тот факт, что мое приложение будет хранить большую таблицу, напримертаблица продуктов синхронизируется с сервером, когда драйверу доставки нужна только таблица invoiceProduct.Таблица invoiceProduct связывает таблицу счетов-фактур и продуктов вместе и содержит некоторую информацию о продукте.Я имею в виду, что их дизайн базы данных не нормализован, а название продукта было продублировано и сохранено в таблице invoiceProduct, а также в таблице продуктов.Конечно, мы все знаем, что это плохой дизайн, но кажется, что они сделали это, чтобы улучшить производительность в подобных ситуациях.
Очевидным решением является полное удаление таблицы продуктов из базы данных КПК.Однако я не могу этого сделать, потому что это иногда необходимо.Водители имеют возможность добавлять новый продукт в счет на лету.Мой начальник предполагает, что они могут просто время от времени синхронизировать большую таблицу продуктов или когда они пытаются добавить продукт и обнаруживают, что его там нет.Это не будет работать с текущим дизайном, потому что при загрузке счета-фактуры, содержащего новый продукт, который не находится на КПК, возникнет ошибка внешнего ключа базы данных.Надеюсь, это имеет смысл.Я не хочу снимать ограничения базы данных и портить мою красивую структуру данных: (