|
|
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
locky sqllex wrote: > Т.е. аргументов у вас нет? :) (очень медленно и спокойно). Аргументация такова: приложение, разработанное в кустарных (или приближенных к ним) условиях, не прошедшее достаточного тестирования (как обычно и бывает с доморощенными приложениями), используемое достаточно ограниченным количество "домашних" пользователей - как правило, значительно более глючное, чем сервер БД, разработанный (хочется надеятся) в "некустарных условиях" и прошедший (опять-таки - хочется надеятся) всесторонне тестирование. Если добавить к этом огромную армию "обизян" (девелоперов/конечных пользователей) , которые юзают сервер БД в хвост и гриву (сиречь - тестируют его) - можно предположить, что, вообще говоря - сервер БД значительно надёжнее практически любого клиентского приложения. Сойдёт за аргумент?А что - хранимую процедуру, которая реализует бизнес логику - вам прям с сервером поставляют? Или, всетаки, Вася-програмист-доморощенный-гений их пишет (как и клиентскую программу)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 12:29 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
Bely wrote: > А что - хранимую процедуру, которая реализует бизнес логику - вам прям с > сервером поставляют? Нет. > Или, всетаки, Вася-програмист-доморощенный-гений их пишет (как и > клиентскую программу)? Да. И я предпочитаю иметь только одно "слабое звено" в виде ХП вместо двух: ХМ и клиента. Чем проще клиент - тем меньше шансов поймать глюк. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 14:14 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mr. GarryНе устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ). А кто кроме Вас это будет делать, или Вы за себя не отвечаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 16:54 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
iscrafm mr. GarryНе устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ). А кто кроме Вас это будет делать, или Вы за себя не отвечаете?Злоумышленнег. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 17:09 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
lockyИ я предпочитаю иметь только одно "слабое звено" в виде ХП вместо двух: ХМ и клиента. Чем проще клиент - тем меньше шансов поймать глюк.Вы путаете - в данном случае слабое звено - это програмист, а не клиентское ПО и ХП. Здесь еще действует другое правило - чем тоньше клиент - тем больше шансов поймать глюк в другом месте :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 18:14 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mr. Garry iscrafm mr. GarryНе устраивает тем, что проверка на клиенте. Т.е. в обход клиента с базой при таком подходе можно сделать что-нибудь нехорошее (например сохранить выписку без назначения препаратов =) ). А кто кроме Вас это будет делать, или Вы за себя не отвечаете?Злоумышленнег. Он Ваш "тригер" отключит и сделает то, что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 18:21 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
Bely wrote: > Здесь еще действует другое правило - чем тоньше клиент - тем больше > шансов поймать глюк в другом месте :) Угу. Давайте все глюки ловить на клиенте. Дайошь! Толстово клиента! Желательно - на самописном интерпретаторе. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 18:45 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
iscrafm Он Ваш "тригер" отключит и сделает то, что нужно. Надо понимать, что бизнес правила, в отличии от декларативных ограничений целостности, не гарантируют соответствие всех данных установленным требованиям. Т.е. бизнес правило применяется только в рамках определённого класса транзакций при определённых условиях, которые необязательно зависят от БД (например правило может применяться только ночью), тогда как декларативные ограничения целостности применяются всегда и ко всем данным. Короче, приложения БД должны быть готовы к тому, что бизнес правило может быть отменено или применяться не всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 19:11 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
lockyСойдёт за аргумент? С рассуждениями согласен, но как аргумент не воспринимаю. Вы искуственно создали (описали) условия, в которых выделили "слабое звено". Я могу точно так же сделать, построив цепочку от обратного и прийду к противоположным выводам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2007, 01:48 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
locky у мну никогда в текущем коннекте не висит открытая транзакция (разве что - в результате ошибки). С клиента транзакция не открывается, не подтверждается и не откатывается. Транзакция может быть открыта сугубо ХП, внутри ХП и для ХП. Перед выходом из ХП "верхнего уровня" (которая, как правило и открывает транзакцию) транзакция должна быть или подтверждена (если всё ок) или откачена (если всё пльохо). Вы используете одну из моделей управления транзакциями. Но это не значит, что остальные модели неправильные. Об этом четко написано в БОЛ: они равнозначны (с точки зрения свойств: atomicity, consistency, isolation, durability) и имеют свои сферы использования. В нашем случае нет разницы, какой вид управления транзакциями использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2007, 01:58 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mr. Garry Авторизация - встроенная в SQL сервер. Какие действия с какими объектами - долго писать. Сейчас все действия реализованы через ХП. Вот. В принципе, этого достаточно. Если пользователи у вас имеют права на ХП (реализующие бизнес-логику в части изменений данных), но не имеют прав на непосредственный доступ к таблицам (и при этом не имеют доступа к таблицам напрямую через тот же QA или MS), то разницы нет, где делать проверку. Если же доступ (см. в скобках выше) есть, то вам вынесение логики в ХП не поможет в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2007, 02:05 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mcureenab iscrafm Он Ваш "тригер" отключит и сделает то, что нужно. Надо понимать, что бизнес правила, в отличии от декларативных ограничений целостности, не гарантируют соответствие всех данных установленным требованиям. Т.е. бизнес правило применяется только в рамках определённого класса транзакций при определённых условиях, которые необязательно зависят от БД (например правило может применяться только ночью), тогда как декларативные ограничения целостности применяются всегда и ко всем данным. Короче, приложения БД должны быть готовы к тому, что бизнес правило может быть отменено или применяться не всегда. это понятно. А в связи с чем это сказано, т.е. в продолжение или в противовес чему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2007, 15:07 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
sqllex mr. Garry Авторизация - встроенная в SQL сервер. Какие действия с какими объектами - долго писать. Сейчас все действия реализованы через ХП. Вот. В принципе, этого достаточно. Если пользователи у вас имеют права на ХП (реализующие бизнес-логику в части изменений данных), но не имеют прав на непосредственный доступ к таблицам (и при этом не имеют доступа к таблицам напрямую через тот же QA или MS), то разницы нет, где делать проверку. Если же доступ (см. в скобках выше) есть, то вам вынесение логики в ХП не поможет в принципе. Повторюсь: mrGarry1. в первую таблицу вносится 1 строка - Id_выписки (primary key), Id_пациента, Ходе_лечения, Врач, ...); 2. во вторую таблицу пишется список назначенных препаратов - Id_выписки (foreign key), Id_препарата, Дозировка, ... В данном случае это одна операция создания объекта - выписки (а не несколько операций создания выписки и нескольких назначений). И одной хранимкой тут обойтись не получается, если, конечно, не передавать все данные в виде XML и не парсить их внутри ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 10:15 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
iscrafmОн Ваш "тригер" отключит и сделает то, что нужно. А как можно отключить триггер из-под ограниченной учетной записи??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 10:18 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mr. Garry Повторюсь: Не надо. Почитайте лучше о транзакциях в БОЛ. И, в частности, ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/052c6ef6-8854-4d26-b6b5-0d4ccf6d1018.htm Запускайте хоть 10 ХП в одной транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 10:24 |
|
||
|
Реализация бизнес логики в БД
|
|||
|---|---|---|---|
|
#18+
mr. GarryВ данном случае это одна операция создания объекта - выписки (а не несколько операций создания выписки и нескольких назначений). И одной хранимкой тут обойтись не получается, если, конечно, не передавать все данные в виде XML и не парсить их внутри ХП. Можно и в виде XML можно и ещё как нибудь. ИМХО, в зрелых СУБД оформить системную транзакцию одной процедурой вполне реально. Супротив системных транзакций бизнес транзакции могут длиться очень долго, управление в них может многократно переходить от сервера к клиенту и пользователю. Бизнес транзакции обычно не могут быть выполнены одним вызовом ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 16:46 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1544166]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 455ms |

| 0 / 0 |
