![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Приемы работы с БД, поделитесь опытом.
Kolan © (2006-10-25 10:00:00)Здравствуйте,
Хочу побыстрее пройти начальный этап обучения работы с БД. :)
Представьте, что есть база(MSDE) из 1 таблицы - "Пользователи" и мне надо уметь "Добавить", "Удалить", "Редактировать" пользователя. Как это можно сделать:
1. Кинуть на формуADOQuery, DataSourse, DBGRid, DBNavigator. Настроить и работать..
2. Кинуть тоже самое, но без Навигатора. Написть 3 запроса наSQLи подставлять их вADOQuery.
3. То к чему я склоняюсь, но нехочу наделать кучу ошибок.
Сделать класс"доступа к БД". В нем же создать все компоненты работы с БД. Сделать функции типа:
"Добавить пользоватея","Вывести пользователей(TDBGRid)"ну и тд.
Как делаете это вы?
Petr V.Abramov (2006-10-27 01:17:00) [1]> ANB © (25.10.06 10:51) [5]
ты со своими банками - нормальный у него объем :))))
MsGuns (2006-10-26 23:25:00) [2]При проектировании БД надо итти не от "компонент", "серверов", "таблиц" и т.д., а от "сущностей". Т.е. от того, ЧТО должна описыватьинформация, хранимая в БД. Начать надо с описания этих сущностей НА БУМАГЕ, попытаться нарисовать связи между ними (зависимости), выделить общие характеристики и способы поведения "в жизни", выяснить в подробностях вид, состав и характер входной информации и ожидаемых результатов. Иными словами - построить модель объекта автоматизации. И только потом заморачиваться на тему, писать ли библиотку классов или использовать "быструю", но менее унифицированную технологию программирования.
dr Gonzo (2006-10-26 15:00:00) [3]
А компоненты доступа к БД ты в класс(например в общий придок) инкапсулируешь?
Не всегда. Обычно они создаются в теле метода. Для классов типа список кодов, значений с частыми перемещениями по нему можно держать постоянно открытым.
Еще советую сделать класс, который будет сразу отдавать настроенный и готовый к работе компонент доступа к данным (ADOStoredProcedure, ADOQuery, ADOCommand). Паттерн даж вроде есть на этот счёт :)
Kolan (2006-10-25 21:30:00) [4]Решил так:
Сделаю менеджер базы, там будуут все компоненты для связи и выполнения запросов.
Сделаю по менеджеру для каждой таблицы(даже наверно сущности, те менеждер и с несколькими таблицами работать может). А комммады будут типа таких:
function AddNewOperator(SurName, Name, PatronymicName: string; BaseManager: TBaseManager): boolean;
Те для выполнения команды нужен менеджер базы.
Все мелкие менеджеры потом объединю с пом. еще одного менеджера...
Ну как?
Kolan (2006-10-25 20:27:00) [5]> И последний шаг - выкинуть ADOQuery и заменить его на AdoDataset.
> И наиболее серьезная ошибка, а где AdoConnection?
Done.
dr Gonzo © (25.10.06 11:29)
А компоненты доступа к БД ты в класс(например в общий придок) инкапсулируешь?
Kolan (2006-10-25 19:44:00) [6]> И последний шаг - выкинуть ADOQuery и заменить его на AdoDataset.
> И наиболее серьезная ошибка, а где AdoConnection?
Понятно, надо с ADO еще поразбираться. Благодарю за совет.
> Все изменения - только через хранимки. Гранты только на
> селекты выполнение хранимок. В хранимках уточнять права
> конкретного пользователя на изменение именно этой строчки.
Пока ниасилю :) Но буду иметь в виду..
> [8] Sergey13 © (25.10.06 11:07)
Пользователь в Базе не для разграничения доступа к базе, а для сохранения кто работал, когда итд..
> dr Gonzo © (25.10.06 11:29)
Вот вот я об этом и думал.. Наверно так и сделаю..
Всех благодарю..
Sergey13 (2006-10-25 13:05:00) [7]> [12] Anatoly Podgoretsky © (25.10.06 12:14)
Потому я и сомневался, и как видно не зря.
Сомнения его не обманули. (с) мультфильм
Anatoly Podgoretsky (2006-10-25 12:14:00) [8]
> MSDE - а там что, нет встроенного механизма регламентации
> доступа?
Есть, это же полноценный MS SQL Server, на который наложены искуственные ограничения, маркетингового характера.
Anatoly Podgoretsky (2006-10-25 12:10:00) [9]
> 2. Кинуть тоже самое, но без Навигатора. Написть
Если сделаешь сразу без нафигатора, то идешь правильным путем.
И последний шаг - выкинуть ADOQuery и заменить его на AdoDataset.
И наиболее серьезная ошибка, а где AdoConnection?
ANB (2006-10-25 12:10:00) [10]
> Все изменения только через классы.
Все изменения - только через хранимки. Гранты только на селекты выполнение хранимок. В хранимках уточнять права конкретного пользователя на изменение именно этой строчки.
dr Gonzo (2006-10-25 11:29:00) [11]Я пользуюсь правилом БД контролы только для ПРОСМОТРАданнык.
Все изменения только через классы. Т.е. по логике должен быть класс :
TUser = Class (TXXXXX)
public
function Load():...;
function Save():...;
function Delete():...;
end;
Из такиех классов легко сформировать как раз движок о чем, собственно пункт 3.
Sergey13 (2006-10-25 11:07:00) [12]> [7] Kolan © (25.10.06 10:56)
MSDE - а там что, нет встроенного механизма регламентации доступа? Сомневаюсь я что-то в этом. Скорее всего есть, и желательно хорошенько разобраться в нем, чтобы не изобретать велосипед.
Сложные выборки с анализом по 6-7 таблицам, как и наличие ДБНафигатора на форме, не имеют никакого отношенияк наличию класса "доступа к БД".
Я не пишу подобные классы и полагаюсь на систему аутентификации серверов БД - мне этого хватает.
Kolan (2006-10-25 10:56:00) [13]> Я к тому, что понятие "средний масштаб" очень у всех разное.
Ну таблиц всего 6-7, но задачи серьёзные надо решать. Анализ там итд.. Выборки сложные.
> Если это разовая задачка в первой разрабатываемой системе
> - заморачиваться на это не имеет смысла, ИМХО.
Как бы первая и не разовая. И делать хочется качественно..
Ну расскажите как вы делаете, а.. :)
Sergey13 (2006-10-25 10:52:00) [14]> Средние масштабы.
Кому и кобыла невеста. (с) 12 стульев
Я к тому, что понятие "средний масштаб" очень у всех разное.
Если подзадача "доступ в БД" входит в несколько подсистем одной системы, и тем более, если она входит в несколько систем практически без изменения, то наверное целесообразно сделать класс. Если это разовая задачка в первой разрабатываемой системе - заморачиваться на это не имеет смысла, ИМХО.
ANB (2006-10-25 10:51:00) [15]
> Надо будет переделаю..
Сначала напиши то, что потом переделывать будешь :)
Kolan (2006-10-25 10:50:00) [16]> [3] ANB © (25.10.06 10:36)
>
> >
> > Средние масштабы.
> >
> > Дело в том, что это моя первая работа с БД.
>
> Хреново стыкуется. Начни с оооочень маленьких масштабов.
> Иначе запорешь проект.
Пусть так, все в моих руках. Надо будет переделаю..
ANB (2006-10-25 10:36:00) [17]
>
> Средние масштабы.
>
> Дело в том, что это моя первая работа с БД.
Хреново стыкуется. Начни с оооочень маленьких масштабов. Иначе запорешь проект.
Kolan (2006-10-25 10:35:00) [18]> ИМХО, все зависит от масштабов создаваемой системы.
Средние масштабы.
Дело в том, что это моя первая работа с БД. И я нехочу ошибко наделать... :)
Sergey13 (2006-10-25 10:18:00) [19]ИМХО, все зависит от масштабов создаваемой системы.
Наличие на форме нафинатора никак не соотносится с наличием или отсутствием класса.