|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.04.2010, 15:24 | #1 |
Пользователь
Регистрация: 18.03.2010
Сообщений: 88
|
"Культура" работы с БД
Добрый день!
Хотелось бы затронуть тему "правильности", "культурности" работы с данными базы данных. Я делаю следующим образом. Таблицу базы данных отображает на форме грид. Ниже на форме блок полей (всякие editы) для редактирования. При переходе по строкам грида - обновляю нижние поля. Редактирую данные таблицы через editы, при сохранении обновляю грид (adoquery). При добавлении новой записи, тоже самое, пишу insert в таблицу, потом обновляю грид. Но! При больших объемах информации эта схема тормозит. Подскажите, как нужно культурно строить архитектуру работы формы с таблицой базы данных. Научите. Спасибо! |
13.04.2010, 15:31 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ты сейчас говоришь об интерфейсе, он не имеет отношения к работе в СУБД.
А для ускорения нужно привести БД в третью нормальную форму, проиндексировать важные поля, по которым будут вестись основные операции поиска и отбора - это как минимум, тогда и тормоза исчезнут. Да и DB компонентами не рекомендую пользоваться - они тугие. Если получаешь какой либо набор - открыл сессию-получил-закрой сессию (подключение в смысле)
I'm learning to live...
|
13.04.2010, 15:33 | #3 | |
Пользователь
Регистрация: 18.03.2010
Сообщений: 88
|
Цитата:
В смысле, я открываю adoquery, при закрытии, ничего не будет ж отображаться. Или нужно всё грузить в adotable? |
|
13.04.2010, 15:47 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
База данных - хранилище информации + по желанию/возможности бизнес логика (чтобы невозможно было хранить здания с незаполненным адресом, студентов без ФИО, деканов без факультетов,...). Она проектируется исходя из удобства хранения этой самой информации. Не нужно тут оглядываться на то, что будет перед глазами пользователя.
Интерфейс стоит отдельно от БД. Проектируется исходя из удобства пользователя. Если ему удобнее редактировать в гриде, то делаем грид, если формочку нужно показывать, то показываем формочку. При всём этом нельзя тут оглядываться на структуру БД. Показывать нужно ту информацию, что нужна, а не ту, которую легче. Нужна пользователю средняя оценка студента - показываем, а не отмазываемся, что тут потребуется сложный медленный запрос и вообще это сложно реализовать. Схема в принципе обычная и в общем случае она используется практически везде. Тормозит на больших объемах я так понимаю из-за кучи записей, подгружаемых из БД в грид. Тут косяк интерфейса пользователя. Зачем показывать миллион записей, если пользователь их физически не в состоянии просмотреть и обработать. Если всё же хочется грид такой оставить, то нужно копать в сторону постраничной загрузки и подобных фич. В делфях по идее должны быть готовые гриды с этими возможностями. Если тормозит на стороне БД, то тут либо СУБД менять, либо индексы перестраивать, либо перепроектировать БД. ЗЫ. Если есть время и желание, то почитайте книгу Мартина Фаулера "Архитектура корпоративных программных приложений" (мог чуток наврать с названием). Сразу говорю: не прояснится как нужно делать, но зато узнаете кучу терминологии, по которой уже можно будет копать дальше в поисковиках. После этой книжки обычно вообще вопросов возникает еще больше, чем было до этого. Точнее не так. Вроде кажется всё элементарно, а как сунешься ручками реализовывать, встреваешь, т.к. детали все автором опущены и описаны решения расплывчато как-то. Последний раз редактировалось pu4koff; 13.04.2010 в 15:52. |
13.04.2010, 15:48 | #5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Я лично сделал так:
Имею класс, в котором описаны поля, а так же имею список (а-ля массив) обьектов этого класса. Далее: 1) Открыл набор 2) Создал экземпляр класса, вписал в него поля из БД 3) В цикле перешел на следующую запись и повторил 2) пока не конец таблицы 4) Закрыл набор, разорвал связь с базой Все теперь у меня данные сидят в массиве обьектов. Вот так это может выглядеть: Это класс с полями Код:
Код:
I'm learning to live...
|
13.04.2010, 17:07 | #6 |
Пользователь
Регистрация: 18.03.2010
Сообщений: 88
|
1) Открыл набор
2) Создал экземпляр класса, вписал в него поля из БД 3) В цикле перешел на следующую запись и повторил 2) пока не конец таблицы 4) Закрыл набор, разорвал связь с базой Все теперь у меня данные сидят в массиве обьектов. Теперь в "массиве" FAsm у меня записи из базы.[/QUOTE] а когда добавляю запись? То как? Добавить в таблицу а потом обновить массив? И как массив в гриде отобразить? |
13.04.2010, 17:44 | #7 | |
Форумчанин
Регистрация: 01.09.2007
Сообщений: 747
|
Цитата:
Никому не верьте.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа для работы с базой данных "Записная книжка" | ArtS | Помощь студентам | 6 | 27.07.2010 19:12 |
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. | Каравай | Microsoft Office Excel | 13 | 17.02.2010 09:53 |
Подскажите что написать в пункте "Описание работы программы" курсовой работы | Marsel737 | Свободное общение | 3 | 14.01.2010 12:44 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |