Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реализация бизнес логики в БД / 25 сообщений из 42, страница 1 из 2
22.11.2007, 03:50
    #34956984
mr. Garry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
Пишу информационную систему на C++ Builder + MS SQL. Двухзвенка.

Ситуация:

В базу данных необходимо сохранить документ (медицинскую выписку). Информация сохраняется в две таблицы:

1. в первую таблицу вносится 1 строка - Id_выписки (primary key), Id_пациента, Ходе_лечения, Врач, ...);
2. во вторую таблицу пишется список назначенных препаратов - Id_выписки (foreign key), Id_препарата, Дозировка, ...


При сохранении данных необходимо выполнять ряд проверок. Например, что пациент назначен хотя бы один препарат. Как это сделать?


Вижу три выхода из сложившейся ситуации:


1. Проверка на клиенте.
Данный вариант не устраивает из-за возможности изменения данных в обход клиента. (Просьба не флудить здесь на тему того, что пользователю можно запретить пользовать БД в обход клиента)

2. Переписать приложение на трехзвенку и выполнять проверки подобного рода на сервере приложений.
Недостаток - отсутствие опыта реализации подобных систем.

3. Выполнять сохранение данных через хранимку, которая в качестве параметров принимает значения полей для первой таблицы + курсор для временной таблицы со списком назначаемых препаратов.
Данный пугает своей непривычностью.



Можно ли данный вопрос решить как-нибудь иначе?
И если нет, то какое из решений предпочесть при условии, что в БД понадобится реализовать еще некоторое количество таких проверок.
...
Рейтинг: 0 / 0
22.11.2007, 05:19
    #34956996
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
А чем второй и третий варианты надёжнее первого? Тут мы точно так же можем поменять данные вобход сервера приложений или хранимой процедуры.

Я бы предпочёл завязаться на статус документа. Если статус "в разработке", то достаточно соблюдения обычных для отношений master-detail декларативных ограничений целостности. Когда мы меняем статус на "готов", то проверку бизнес правила не сложно реализовать в триггере, не сложно создать и триггер, который будет запрещать изменение "готовых" документов.
...
Рейтинг: 0 / 0
22.11.2007, 08:43
    #34957129
mr. Garry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
mcureenabА чем второй и третий варианты надёжнее первого?
Во втором случае у пользователя вообще не будет своей учетной записи на SQL-сервере.
В третьем случае у пользователя не будет доступа к таблицам напрямую. Создание / редактирование записей в таблицах возможно только через ХП.

mcureenabЯ бы предпочёл завязаться на статус документа.
Хм... интересный вариант. Т.е. пользователь пишет в обе таблицы все, что хочет, при этом остальным пользователям его "творчество" не видно до тех пор, пока он не вызывает ХП "публикации" документа, в которой и выполняются все необходимые проверки.
...
Рейтинг: 0 / 0
22.11.2007, 11:44
    #34957641
sqllex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
Возможна ли ситуация, когда сохраняется пустой документ (без препаратов)?

А почему бы не делать сохранение (хранимками, чтобы не было доступа пользователей к таблицам напрямую) в одной транзакции, управляемой с клиента? Проверка остается на клиенте.

Заводить 3-е звено не вижу смысла, если на него будет возложена только лишь эта (и другие подобные) задача. СУБД прекрасно справится с этим сама, если решите делать логику на сервере.
...
Рейтинг: 0 / 0
22.11.2007, 11:54
    #34957682
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
sqllex wrote:
> А почему бы не делать сохранение (хранимками, чтобы не было доступа
> пользователей к таблицам напрямую) в одной транзакции, управляемой с
> клиента? Проверка остается на клиенте.
Ф топку. Транзакции с клиента, т.е.

Статус в документе - весьма разумно, легко реализуется, много плюсов.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.11.2007, 12:02
    #34957724
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
mr. Garry mcureenabА чем второй и третий варианты надёжнее первого?
Во втором случае у пользователя вообще не будет своей учетной записи на SQL-сервере.
В третьем случае у пользователя не будет доступа к таблицам напрямую. Создание / редактирование записей в таблицах возможно только через ХП.


Довольно экстремальнй подход. Проблема в том, что в обеих случаях придётся дублировать функциональность уже встроенную в БД или в систему разработки - во втором случае создавать систему аутентификации, в третьем кучу CUD процедур. И то и другое не смертельно, но треубует дополнительных затрат.

mr. Garry mcureenabЯ бы предпочёл завязаться на статус документа.
Хм... интересный вариант. Т.е. пользователь пишет в обе таблицы все, что хочет, при этом остальным пользователям его "творчество" не видно до тех пор, пока он не вызывает ХП "публикации" документа, в которой и выполняются все необходимые проверки.

Ну да. Ещё один +, это возможность сохранения промежуточных результатов редактирования документа.
...
Рейтинг: 0 / 0
22.11.2007, 13:38
    #34958135
sqllex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
lockyФ топку. Транзакции с клиента, т.е.
И чем же по вашему транзакции с клиента хуже транзакций, которыми управляем на сервере?
...
Рейтинг: 0 / 0
22.11.2007, 14:03
    #34958259
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
mr. GarryНапример, что пациент назначен хотя бы один препарат
Бред. Рекомендации вида "перестаньте есть соленое" или "чаще гуляйте по лесу" невозможны?
...
Рейтинг: 0 / 0
22.11.2007, 14:12
    #34958299
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
sqllex wrote:
> И чем же по вашему транзакции с клиента хуже транзакций, которыми
> управляем на сервере?
Тем, к примеру, что априори клиент - гораздо более глючен, нежели сервер.
К тому же, "держи транзакции покороче" - а фиг его знает, чем клиент
будет занимацо?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.11.2007, 15:05
    #34958566
mr. Garry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
sqllexА почему бы не делать сохранение (хранимками, чтобы не было доступа пользователей к таблицам напрямую) в одной транзакции, управляемой с клиента? Проверка остается на клиенте.


Не устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ).
...
Рейтинг: 0 / 0
22.11.2007, 15:07
    #34958589
mr. Garry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
mcureenab mr. Garry mcureenabА чем второй и третий варианты надёжнее первого?
Во втором случае у пользователя вообще не будет своей учетной записи на SQL-сервере.
В третьем случае у пользователя не будет доступа к таблицам напрямую. Создание / редактирование записей в таблицах возможно только через ХП.


Довольно экстремальнй подход. Проблема в том, что в обеих случаях придётся дублировать функциональность уже встроенную в БД или в систему разработки - во втором случае создавать систему аутентификации, в третьем кучу CUD процедур. И то и другое не смертельно, но треубует дополнительных затрат.
Согласен.
mcureenab mr. Garry mcureenabЯ бы предпочёл завязаться на статус документа.
Хм... интересный вариант. Т.е. пользователь пишет в обе таблицы все, что хочет, при этом остальным пользователям его "творчество" не видно до тех пор, пока он не вызывает ХП "публикации" документа, в которой и выполняются все необходимые проверки.

Ну да. Ещё один +, это возможность сохранения промежуточных результатов редактирования документа.
Согласен.
...
Рейтинг: 0 / 0
22.11.2007, 15:21
    #34958672
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
mr. Garry sqllexА почему бы не делать сохранение (хранимками, чтобы не было доступа пользователей к таблицам напрямую) в одной транзакции, управляемой с клиента? Проверка остается на клиенте.


Не устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ).

В этом вопросе полагаться только на технические средства не очень разумно, ибо на каждую хитрую ж..у всегда найдётся болт с тонкой левой резьбой. Ошибка DBA или технический сбой могут привести к нарушению ограничения. Конечно, обстоятельства могут быть разными, но я бы задумался о причине, по которой возникло такое бизнес правило. Вполне возможно, устранив причину, систему можно сделать проще и понятнее. Кроме того, это правило может не стоить того, чтобы его соблюдали.
...
Рейтинг: 0 / 0
22.11.2007, 16:30
    #34959038
mr. Garry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
mcureenabВ этом вопросе полагаться только на технические средства не очень разумно...Хм... а что Вы подразумеваете под "нетехническими" средствами?

Ошибка DBA или технический сбой конечно однозначно привести к нарушению ограничения, но мне не кажется, что отказ от реализации ее (бизнес логики) в БД решит вопросы с хитрыми ж..., сбоями в БД и косяками админов.
...
Рейтинг: 0 / 0
22.11.2007, 16:39
    #34959068
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
mr. Garry mcureenabВ этом вопросе полагаться только на технические средства не очень разумно...Хм... а что Вы подразумеваете под "нетехническими" средствами?

Ошибка DBA или технический сбой конечно однозначно привести к нарушению ограничения, но мне не кажется, что отказ от реализации ее (бизнес логики) в БД решит вопросы с хитрыми ж..., сбоями в БД и косяками админов.

Не решит. Просто ситема должна быть сбалансированной. Что толку возводить неприступный фасад, если задний ход остаётся открытым.

А нетехнические средства, это ответственность операторов, например. Работает лучше технических средств и работе не мешает.
...
Рейтинг: 0 / 0
22.11.2007, 19:12
    #34959588
sqllex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
locky
sqllex wrote:
> И чем же по вашему транзакции с клиента хуже транзакций, которыми
> управляем на сервере?
Тем, к примеру, что априори клиент - гораздо более глючен, нежели сервер.
К тому же, "держи транзакции покороче" - а фиг его знает, чем клиент
будет занимацо?
По поводу глючности сами придумали или ссылку дать можете?
По поводу длительности транзакций: а вы что же, при открытии документа открываете транзакцию, а закрываете только при закрытии?
...
Рейтинг: 0 / 0
22.11.2007, 19:18
    #34959602
sqllex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
mr. GarryНе устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ).
Здрасте, я ваша тетя!
Из первого совсем не выплывает второе. Как у вас авторизация происходит и какие действия с какими объектами БД пользователю доступны?

Можно подумать, ваши пользователя все поголовно пользуются программой, которая может запускать скрипты (вызовы процедур) и все поголовно знают структуру БД и бизнес-логику.
...
Рейтинг: 0 / 0
22.11.2007, 20:17
    #34959690
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
sqllex wrote:
> По поводу глючности сами придумали или ссылку дать можете?
Ссылку на что? На то, что "сваляное на коленке поделие" (сиречь -
клиентское приложение) глючнее сервера?
так - поверить сложно?

> По поводу длительности транзакций: а вы что же, при открытии документа
> открываете транзакцию, а закрываете только при закрытии?
Мну вообще не управляет транзакциями с клиента.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.11.2007, 20:19
    #34959693
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
sqllex wrote:
> Можно подумать, ваши пользователя все поголовно пользуются программой,
> которая может запускать скрипты (вызовы процедур) и все поголовно знают
> структуру БД и бизнес-логику.
Достаточно одного чела, имеющего, скажем, QA, и знающего update
Для того чтобы завалить базу - нет необходимости в глубоких познаниях
структуры и бизнес-логики.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.11.2007, 00:57
    #34959928
sqllex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
locky
Ссылку на что? На то, что "сваляное на коленке поделие" (сиречь -
клиентское приложение) глючнее сервера?
так - поверить сложно?

Т.е. аргументов у вас нет? :)

locky
> По поводу длительности транзакций: а вы что же, при открытии документа
> открываете транзакцию, а закрываете только при закрытии?
Мну вообще не управляет транзакциями с клиента.
А я и не ограничивал свой вопрос управлением транзакцией с клиента. Он остается актуален для любой explicit транзакции.
...
Рейтинг: 0 / 0
23.11.2007, 00:59
    #34959929
sqllex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
locky
Достаточно одного чела, имеющего, скажем, QA, и знающего update
Для того чтобы завалить базу - нет необходимости в глубоких познаниях
структуры и бизнес-логики.
Этого чела достаточно в любом случае. Но это административная проблема, а техническая.

Я все же хочу дождаться ответа на этот вопрос от автора топика.
...
Рейтинг: 0 / 0
23.11.2007, 10:23
    #34960324
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
sqllex locky
Достаточно одного чела, имеющего, скажем, QA, и знающего update
Для того чтобы завалить базу - нет необходимости в глубоких познаниях
структуры и бизнес-логики.
Этого чела достаточно в любом случае. Но это административная проблема, а техническая.



Техническая проблема, чтобы всё многообразие приложений БД работало с ней по одним и тем же правилам, а это может быть не так просто сделать. Взять хотя бы клиент-серверную и web версии приложения. Положим, первая на Delphi, вторая на Java, вот и добейся, чтобы они работали одинаково!
...
Рейтинг: 0 / 0
23.11.2007, 12:03
    #34960739
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
sqllex wrote:
> Т.е. аргументов у вас нет? :)

(очень медленно и спокойно).
Аргументация такова: приложение, разработанное в кустарных (или
приближенных к ним) условиях, не прошедшее достаточного тестирования
(как обычно и бывает с доморощенными приложениями), используемое
достаточно ограниченным количество "домашних" пользователей - как
правило, значительно более глючное, чем сервер БД, разработанный
(хочется надеятся) в "некустарных условиях" и прошедший (опять-таки -
хочется надеятся) всесторонне тестирование. Если добавить к этом
огромную армию "обизян" (девелоперов/конечных пользователей) , которые
юзают сервер БД в хвост и гриву (сиречь - тестируют его) - можно
предположить, что, вообще говоря - сервер БД значительно надёжнее
практически любого клиентского приложения.

Сойдёт за аргумент?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.11.2007, 12:07
    #34960758
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
sqllex wrote:
> А я и не ограничивал свой вопрос управлением транзакцией с клиента. Он
> остается актуален для любой explicit транзакции.
Ниасилил, но это неважно.
у мну никогда в текущем коннекте не висит открытая транзакция (разве что
- в результате ошибки). С клиента транзакция не открывается, не
подтверждается и не откатывается.
Транзакция может быть открыта сугубо ХП, внутри ХП и для ХП.
Перед выходом из ХП "верхнего уровня" (которая, как правило и открывает
транзакцию) транзакция должна быть или подтверждена (если всё ок) или
откачена (если всё пльохо).

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.11.2007, 12:12
    #34960784
mr. Garry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
sqllex mr. GarryНе устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ).
Здрасте, я ваша тетя!
Из первого совсем не выплывает второе. Как у вас авторизация происходит и какие действия с какими объектами БД пользователю доступны?

Можно подумать, ваши пользователя все поголовно пользуются программой, которая может запускать скрипты (вызовы процедур) и все поголовно знают структуру БД и бизнес-логику.
Авторизация - встроенная в SQL сервер. Какие действия с какими объектами - долго писать. Сейчас все действия реализованы через ХП.
sqllexЯ все же хочу дождаться ответа на этот вопрос от автора топика.
mcureenab и locky в принципе обрисовали ситуацию. Цена восстановления/утери информации может оказаться выше чем стоимость разработки адекватного (надежного) интерфейса БД.

У нас есть и резервное копирование и политики безопасности, запрещающие пользователям запускать любые программы, кроме разрешенных. Только существует Access и VB, например.
...
Рейтинг: 0 / 0
23.11.2007, 12:24
    #34960827
mr. Garry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация бизнес логики в БД
sqllexЭтого чела достаточно в любом случае. Но это административная проблема, а техническая.
Не все административные проблемы можно на 100% решить административными методами =) Вот например запрет ехать на красный свет - административное решение. Однако я частенько вижу как кто-то нарушает это правило. А вот, предположим, было бы такое техническое решение, что вместо красного сигнала на дороге появлялась бы непробиваемая стена - техническое решение. Уже никто бы не ездил =))))

Ну это так... просто абстрактный пример
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реализация бизнес логики в БД / 25 сообщений из 42, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]