|
|
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
Пишу информационную систему на C++ Builder + MS SQL. Двухзвенка. Ситуация: В базу данных необходимо сохранить документ (медицинскую выписку). Информация сохраняется в две таблицы: 1. в первую таблицу вносится 1 строка - Id_выписки (primary key), Id_пациента, Ходе_лечения, Врач, ...); 2. во вторую таблицу пишется список назначенных препаратов - Id_выписки (foreign key), Id_препарата, Дозировка, ... При сохранении данных необходимо выполнять ряд проверок. Например, что пациент назначен хотя бы один препарат. Как это сделать? Вижу три выхода из сложившейся ситуации: 1. Проверка на клиенте. Данный вариант не устраивает из-за возможности изменения данных в обход клиента. (Просьба не флудить здесь на тему того, что пользователю можно запретить пользовать БД в обход клиента) 2. Переписать приложение на трехзвенку и выполнять проверки подобного рода на сервере приложений. Недостаток - отсутствие опыта реализации подобных систем. 3. Выполнять сохранение данных через хранимку, которая в качестве параметров принимает значения полей для первой таблицы + курсор для временной таблицы со списком назначаемых препаратов. Данный пугает своей непривычностью. Можно ли данный вопрос решить как-нибудь иначе? И если нет, то какое из решений предпочесть при условии, что в БД понадобится реализовать еще некоторое количество таких проверок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 03:50 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
А чем второй и третий варианты надёжнее первого? Тут мы точно так же можем поменять данные вобход сервера приложений или хранимой процедуры. Я бы предпочёл завязаться на статус документа. Если статус "в разработке", то достаточно соблюдения обычных для отношений master-detail декларативных ограничений целостности. Когда мы меняем статус на "готов", то проверку бизнес правила не сложно реализовать в триггере, не сложно создать и триггер, который будет запрещать изменение "готовых" документов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 05:19 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mcureenabА чем второй и третий варианты надёжнее первого? Во втором случае у пользователя вообще не будет своей учетной записи на SQL-сервере. В третьем случае у пользователя не будет доступа к таблицам напрямую. Создание / редактирование записей в таблицах возможно только через ХП. mcureenabЯ бы предпочёл завязаться на статус документа. Хм... интересный вариант. Т.е. пользователь пишет в обе таблицы все, что хочет, при этом остальным пользователям его "творчество" не видно до тех пор, пока он не вызывает ХП "публикации" документа, в которой и выполняются все необходимые проверки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 08:43 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
Возможна ли ситуация, когда сохраняется пустой документ (без препаратов)? А почему бы не делать сохранение (хранимками, чтобы не было доступа пользователей к таблицам напрямую) в одной транзакции, управляемой с клиента? Проверка остается на клиенте. Заводить 3-е звено не вижу смысла, если на него будет возложена только лишь эта (и другие подобные) задача. СУБД прекрасно справится с этим сама, если решите делать логику на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 11:44 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllex wrote: > А почему бы не делать сохранение (хранимками, чтобы не было доступа > пользователей к таблицам напрямую) в одной транзакции, управляемой с > клиента? Проверка остается на клиенте. Ф топку. Транзакции с клиента, т.е. Статус в документе - весьма разумно, легко реализуется, много плюсов. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 11:54 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mr. Garry mcureenabА чем второй и третий варианты надёжнее первого? Во втором случае у пользователя вообще не будет своей учетной записи на SQL-сервере. В третьем случае у пользователя не будет доступа к таблицам напрямую. Создание / редактирование записей в таблицах возможно только через ХП. Довольно экстремальнй подход. Проблема в том, что в обеих случаях придётся дублировать функциональность уже встроенную в БД или в систему разработки - во втором случае создавать систему аутентификации, в третьем кучу CUD процедур. И то и другое не смертельно, но треубует дополнительных затрат. mr. Garry mcureenabЯ бы предпочёл завязаться на статус документа. Хм... интересный вариант. Т.е. пользователь пишет в обе таблицы все, что хочет, при этом остальным пользователям его "творчество" не видно до тех пор, пока он не вызывает ХП "публикации" документа, в которой и выполняются все необходимые проверки. Ну да. Ещё один +, это возможность сохранения промежуточных результатов редактирования документа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 12:02 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
lockyФ топку. Транзакции с клиента, т.е. И чем же по вашему транзакции с клиента хуже транзакций, которыми управляем на сервере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 13:38 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mr. GarryНапример, что пациент назначен хотя бы один препарат Бред. Рекомендации вида "перестаньте есть соленое" или "чаще гуляйте по лесу" невозможны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 14:03 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllex wrote: > И чем же по вашему транзакции с клиента хуже транзакций, которыми > управляем на сервере? Тем, к примеру, что априори клиент - гораздо более глючен, нежели сервер. К тому же, "держи транзакции покороче" - а фиг его знает, чем клиент будет занимацо? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 14:12 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllexА почему бы не делать сохранение (хранимками, чтобы не было доступа пользователей к таблицам напрямую) в одной транзакции, управляемой с клиента? Проверка остается на клиенте. Не устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 15:05 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mcureenab mr. Garry mcureenabА чем второй и третий варианты надёжнее первого? Во втором случае у пользователя вообще не будет своей учетной записи на SQL-сервере. В третьем случае у пользователя не будет доступа к таблицам напрямую. Создание / редактирование записей в таблицах возможно только через ХП. Довольно экстремальнй подход. Проблема в том, что в обеих случаях придётся дублировать функциональность уже встроенную в БД или в систему разработки - во втором случае создавать систему аутентификации, в третьем кучу CUD процедур. И то и другое не смертельно, но треубует дополнительных затрат. Согласен. mcureenab mr. Garry mcureenabЯ бы предпочёл завязаться на статус документа. Хм... интересный вариант. Т.е. пользователь пишет в обе таблицы все, что хочет, при этом остальным пользователям его "творчество" не видно до тех пор, пока он не вызывает ХП "публикации" документа, в которой и выполняются все необходимые проверки. Ну да. Ещё один +, это возможность сохранения промежуточных результатов редактирования документа. Согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 15:07 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mr. Garry sqllexА почему бы не делать сохранение (хранимками, чтобы не было доступа пользователей к таблицам напрямую) в одной транзакции, управляемой с клиента? Проверка остается на клиенте. Не устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ). В этом вопросе полагаться только на технические средства не очень разумно, ибо на каждую хитрую ж..у всегда найдётся болт с тонкой левой резьбой. Ошибка DBA или технический сбой могут привести к нарушению ограничения. Конечно, обстоятельства могут быть разными, но я бы задумался о причине, по которой возникло такое бизнес правило. Вполне возможно, устранив причину, систему можно сделать проще и понятнее. Кроме того, это правило может не стоить того, чтобы его соблюдали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 15:21 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mcureenabВ этом вопросе полагаться только на технические средства не очень разумно...Хм... а что Вы подразумеваете под "нетехническими" средствами? Ошибка DBA или технический сбой конечно однозначно привести к нарушению ограничения, но мне не кажется, что отказ от реализации ее (бизнес логики) в БД решит вопросы с хитрыми ж..., сбоями в БД и косяками админов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 16:30 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mr. Garry mcureenabВ этом вопросе полагаться только на технические средства не очень разумно...Хм... а что Вы подразумеваете под "нетехническими" средствами? Ошибка DBA или технический сбой конечно однозначно привести к нарушению ограничения, но мне не кажется, что отказ от реализации ее (бизнес логики) в БД решит вопросы с хитрыми ж..., сбоями в БД и косяками админов. Не решит. Просто ситема должна быть сбалансированной. Что толку возводить неприступный фасад, если задний ход остаётся открытым. А нетехнические средства, это ответственность операторов, например. Работает лучше технических средств и работе не мешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 16:39 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
locky sqllex wrote: > И чем же по вашему транзакции с клиента хуже транзакций, которыми > управляем на сервере? Тем, к примеру, что априори клиент - гораздо более глючен, нежели сервер. К тому же, "держи транзакции покороче" - а фиг его знает, чем клиент будет занимацо? По поводу глючности сами придумали или ссылку дать можете? По поводу длительности транзакций: а вы что же, при открытии документа открываете транзакцию, а закрываете только при закрытии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 19:12 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mr. GarryНе устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ). Здрасте, я ваша тетя! Из первого совсем не выплывает второе. Как у вас авторизация происходит и какие действия с какими объектами БД пользователю доступны? Можно подумать, ваши пользователя все поголовно пользуются программой, которая может запускать скрипты (вызовы процедур) и все поголовно знают структуру БД и бизнес-логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 19:18 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllex wrote: > По поводу глючности сами придумали или ссылку дать можете? Ссылку на что? На то, что "сваляное на коленке поделие" (сиречь - клиентское приложение) глючнее сервера? так - поверить сложно? > По поводу длительности транзакций: а вы что же, при открытии документа > открываете транзакцию, а закрываете только при закрытии? Мну вообще не управляет транзакциями с клиента. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 20:17 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllex wrote: > Можно подумать, ваши пользователя все поголовно пользуются программой, > которая может запускать скрипты (вызовы процедур) и все поголовно знают > структуру БД и бизнес-логику. Достаточно одного чела, имеющего, скажем, QA, и знающего update Для того чтобы завалить базу - нет необходимости в глубоких познаниях структуры и бизнес-логики. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 20:19 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
locky Ссылку на что? На то, что "сваляное на коленке поделие" (сиречь - клиентское приложение) глючнее сервера? так - поверить сложно? Т.е. аргументов у вас нет? :) locky > По поводу длительности транзакций: а вы что же, при открытии документа > открываете транзакцию, а закрываете только при закрытии? Мну вообще не управляет транзакциями с клиента. А я и не ограничивал свой вопрос управлением транзакцией с клиента. Он остается актуален для любой explicit транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 00:57 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
locky Достаточно одного чела, имеющего, скажем, QA, и знающего update Для того чтобы завалить базу - нет необходимости в глубоких познаниях структуры и бизнес-логики. Этого чела достаточно в любом случае. Но это административная проблема, а техническая. Я все же хочу дождаться ответа на этот вопрос от автора топика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 00:59 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllex locky Достаточно одного чела, имеющего, скажем, QA, и знающего update Для того чтобы завалить базу - нет необходимости в глубоких познаниях структуры и бизнес-логики. Этого чела достаточно в любом случае. Но это административная проблема, а техническая. Техническая проблема, чтобы всё многообразие приложений БД работало с ней по одним и тем же правилам, а это может быть не так просто сделать. Взять хотя бы клиент-серверную и web версии приложения. Положим, первая на Delphi, вторая на Java, вот и добейся, чтобы они работали одинаково! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 10:23 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllex wrote: > Т.е. аргументов у вас нет? :) (очень медленно и спокойно). Аргументация такова: приложение, разработанное в кустарных (или приближенных к ним) условиях, не прошедшее достаточного тестирования (как обычно и бывает с доморощенными приложениями), используемое достаточно ограниченным количество "домашних" пользователей - как правило, значительно более глючное, чем сервер БД, разработанный (хочется надеятся) в "некустарных условиях" и прошедший (опять-таки - хочется надеятся) всесторонне тестирование. Если добавить к этом огромную армию "обизян" (девелоперов/конечных пользователей) , которые юзают сервер БД в хвост и гриву (сиречь - тестируют его) - можно предположить, что, вообще говоря - сервер БД значительно надёжнее практически любого клиентского приложения. Сойдёт за аргумент? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 12:03 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllex wrote: > А я и не ограничивал свой вопрос управлением транзакцией с клиента. Он > остается актуален для любой explicit транзакции. Ниасилил, но это неважно. у мну никогда в текущем коннекте не висит открытая транзакция (разве что - в результате ошибки). С клиента транзакция не открывается, не подтверждается и не откатывается. Транзакция может быть открыта сугубо ХП, внутри ХП и для ХП. Перед выходом из ХП "верхнего уровня" (которая, как правило и открывает транзакцию) транзакция должна быть или подтверждена (если всё ок) или откачена (если всё пльохо). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 12:07 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllex mr. GarryНе устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ). Здрасте, я ваша тетя! Из первого совсем не выплывает второе. Как у вас авторизация происходит и какие действия с какими объектами БД пользователю доступны? Можно подумать, ваши пользователя все поголовно пользуются программой, которая может запускать скрипты (вызовы процедур) и все поголовно знают структуру БД и бизнес-логику. Авторизация - встроенная в SQL сервер. Какие действия с какими объектами - долго писать. Сейчас все действия реализованы через ХП. sqllexЯ все же хочу дождаться ответа на этот вопрос от автора топика. mcureenab и locky в принципе обрисовали ситуацию. Цена восстановления/утери информации может оказаться выше чем стоимость разработки адекватного (надежного) интерфейса БД. У нас есть и резервное копирование и политики безопасности, запрещающие пользователям запускать любые программы, кроме разрешенных. Только существует Access и VB, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 12:12 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllexЭтого чела достаточно в любом случае. Но это административная проблема, а техническая. Не все административные проблемы можно на 100% решить административными методами =) Вот например запрет ехать на красный свет - административное решение. Однако я частенько вижу как кто-то нарушает это правило. А вот, предположим, было бы такое техническое решение, что вместо красного сигнала на дороге появлялась бы непробиваемая стена - техническое решение. Уже никто бы не ездил =)))) Ну это так... просто абстрактный пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 12:24 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34958259&tid=1544166]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 514ms |

| 0 / 0 |
