Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Подскажите корректную архитектуру для программы, которая работает с бд

#c_sharp #sql #net #office #ms_access


Писал программу, которой на вход подаётся бд access  и выполняются различные преобразования
,и столкнулся с тем, что если поменяется что то во входной структуре бд, то придётся
жестко рефакторить код... Дело в том, что я работаю через интероп, в некоторых местах
делаю запросы на обновления, которые закодированы в коде, в другом месте, где требуется
мощь высокоуровневых языков я открываю recordset и произвожу обновления записей. Можно
грузить все в память и работать через datatable, но я побоялся больших баз и отказался
от этой затеи... Подскажите, лучше всего уйти от того, что есть к коду, который легко
редактировать если структура поменяется, сохраняя высокую скорость обработки. 
    


Ответы

Ответ 1



Создать в БД таблицу с конфигом базы. И сходя из этого формировать SQL-запросы. Например, создаём таблицу info описанием таблиц. CREATE TABLE info ( ID int identity (1, 1) primary key ,NameTable varchar(50) ,NameColumn varchar(50) ) При запуске приложения читаем эту таблицу, и формируем запросы для других таблиц. Например загружаем таблицу в DataTable c именем infoTable: string command = "SELECT [ID] "; foreach (DataRow row in infoTable.Rows) { command = command + ",[" + row[2].ToString() + "]"; } command = command + " FROM [" + row[1].ToString() + "]"; В итоге в command получается запрос типа: SELECT [ID], [NameColumn1], [NameColumn2] FROM [NameTable] И так далее... Меняется таблица в БД, меняем описание, запросы формируются иначе.

Ответ 2



Еще как вариант изменить программу таким образом чтобы она только выполняла внешние скрипты (в виде файликов 001_update_table1.sql), которые вы будите при необходимости редактировать. В таком случае: Вам не будет необходимости все время пересобирать и переписывать реализацию программы. Можно реализовать поддержку различные версии БД. Правки в одном месте (только в скриптах), не нужно выискивать переменные в DataSet'ах иди захардкоженых переменных.

Ответ 3



А может быть на входе подавать не только бд, а и пакет изменений. Структуру которая будет описывать такой список изменений можно уже разработать в зависимости от поставленных задач. Таким образом при изменении бд вам не нужно будет редактировать код, а только файл с необходимыми изменениями.

Комментариев нет:

Отправить комментарий