Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Известно, что, проектируя БД, можно заложить в нее много ограничений - и сделать ее данные тем самым консистентными. Но при этом можно так наограничивать, что практически любое незначительное изменение требований к БД приведет ее в полностью неработоспособное состояние. И исправить это будет очень сложно. И можно совсем почти не делать ограничений на уровне БД, перенести их на уровень процедур приложения - и этим развязать себе руки. Но тогда можно навводить столько несуразиц, что базой невозможно будет пользоваться из за неконсистентности хранящихся в ней данных. Изгадить, мусором наполнить, так, что концов не найдешь. Очевидно, что, с практической точки зрения, оба крайних варианта неприемлемы. Но есть некая золотая середина, наилучшее сочетание контроля и его отсутствия в самой БД. Понятно, что базы данных очень разные, и универсального решения нет. Будем делать поправку на каждую конкретную реализацию. Итак, ищем золотую середину. Господа практики, прошу высказываться, какие проверки каким образом вы реализовали, к чему это привело, хорошо это или плохо, что бы вы сделали по-другому, если бы разрабатывали такую же систему сейчас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2005, 01:10 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Если переносить ограничения целостности БД на уровень приложения, то это зависимость данных от приложения. Это слишко плохо в общем случае. Тут на форуме обсуждалась подобная проблема, которая заключалась в том, что Версант не может, со слов его представителя, поддерживать триггерных ограниченй целостности без отхода от принципов ООМД. Ничего хорошего в этом нет. Часть МД оказывается во внешней модели приложения. Должно еще прописываться во всех клиентах или серверных приложениях. Кроме того, есть админские клиенты, в которых код написан другими и исправить нельзя. Да и вообще. А если этих ограничений много, а нада писать нового клиента или серверное приложение. И в него многое втюхать, вместо того, чтобы это был в МД в БД. Так можно пойти и дальше. Части данных в виде массивово втюхивать в приложения. Я и такое видел. А потом поробовать написать запрос. Главная цель - максимально быстро и просто получить информацию. Она в БД вся. Полно приложений способных ее извлеч из БД, если это РМД. Ограничения целостности - лог правила, которым должны удовлетворять данные, ее неотъемлемая часть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2005, 16:34 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Я, в общем, согласен, но только до некоторой степени. Представьте себе очень большую БД, скажем, некоей ERP-системы. В которой по таблицам разложены тысячи сущностей. В которой - ради модульности, но и не только - да хотя бы потому, что ни один системный аналитик не в состоянии будет охватить столько сущностей и столько уровней ограничений для поддержания целостности сразу - сущности сгруппированы в отдельные кучки, а все, что есть между этими кучками,- это лишь связи внутренних интерфейсов, и только. Представили? Ну и как строить такие системы на одних только ограничениях целостности? Кстати, те ERP, которые я знаю, так и построены - не на одних только ограничениях БД, а и на API своем, т.е. в них многое из логики поддержания целостности перенесено в приложения. Наверное, не от хорошей жизни: API поддерживать муторно, да только вот строить большую систему на одних только ограничениях - совсем невозможно. ;-) Тема для обсуждения, несмотря на то, что я призываю откликнуться в первую очередь практиков, довольно академична и навеяна, как раз, моим общением с такими вот большими системами. Но выводы, к которым мы здесь можем придти, вполне вероятно, можно будет применить в собственных разработках. Итак, прошу вашей активности! Обсуждаем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2005, 17:55 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Как это делаю я. БД для приемной комиссии. Развивается мной уже скоро как 10 лет. То, что одними ограничениями целостности не обойтись я понял где-то на 4-5 год, когда с Клариона, потом Парадокса перешел на Интербейз. Связано с особенностями работы. Например, я не могу сделать обязательным поля, которые должны быть обязательными. Потому что в основном они должны быть введены обязательно к концу работы приемной комиссии, когда надо получать статистику. Тем более есть периоды, когда операторы должны быстро принимать документы, и в то же время должны что-то внести в запись о личном деле. И чем меньше обязательных полей на этом этапе, тем лучше. Потом они заполнят все, что надо, но когда на пороге кабинета двадцатиметровая очередь абитуриентов, надо сделать минимум ввода. Причем это в летний (официальный) период работы. Во время проведения весенних испытаний вообще не надо регистрировать процентов 70% информации. В итоге у меня родился блок проверки наличия ошибок. Например, каждый абитуриент должен указать как минимум один факультет. То есть для каждой записи в мастере должен быть как минимум одна запись в детайле. Как в IB/FB описать такой констрейнт? Тем более, что в часы пик личное дело жедательно сохранить как можно быстрее (надо получить номер абитуриента и поставить его на личном деле, пропуске и экзаменационном листе). С процедурой проверки ошибок такие записи определяются на раз. Второй пример - ЕГЭ. Абитуриент говорит, что математику и историю он будет засчитывать ЕГЭшную. Но номера свидетельства ЕГЭ еще нет, потому что экзамены он будет сдавать через месяц. О том, что экзамены будут ЕГЭшные мы пометим, но о том, что номера свидетельства до сих пор нет, кто-то должен напоминать. Третье - поля типа "Год окончания учебного заведения", "Тип учебного заведения", "Стаж работы по специальности" и пр. нужны после зачисления, когда готовятся министерские отчеты. Во время запарок совсем не до них. Но когда-то кто-то должен вывести список личных дел, в которые надо в конце концов заполнить все. Подобным и занимается блок проверки наличия ошибок. Сейчас посмотрел. Проверяется около 40 различных ситуаций. Для пользователей выглядит все очень просто: администратор периодически запускает процедуру поиска ошибок. Она занимает около 2 минут, поэтому запускается вручную. Обновляется список ошибок. Список из двух колонок: название ошибки и количество личных дел с этой ошибкой. Enter на строке с ошибкой раскрывает список косячных личных дел. Ищи личное дело и исправляй. В комментариях для некоторых отчетных форм написаны причины, по которым могут не сходиться цифры. Там делаются ссылки на блок проверки ошибок. Типа "не должно быть ошибки ХХХ, иначе сумма по колонке NNN будет меньше значения в ячейке MMM". Извинте за многословие. Это все пиво. Если одним предложением, то все просто: проверки постфактум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2005, 20:53 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Ограничения - это способ не допустить появления проблем в базе данных. Чем больше будет перекрыто возможных источников проблем, тем лучше качество разработки БД. К сожалению, любое повышение качества стоит денег. Поэтому, пределом для отработки сложной базы данных является только бюджет ее создания. С другой стороны есть и цена ошибки. Одно дело, если у вас одна небольшая система и вы сидите все время над ней. Можно выполнить диагностику, влезть в базу и средствами программиста ее устранить. Другое дело, когда система разошлась по клиентам, сделанная ошибка ввода сразу не была обнаружена, и за ней последовали неправильные сведения, например, в вышестоящие организации. Во-первых, вам потребуется объехать всех клиентов для устранения последствий, во-вторых - возникают разнокалиберные скандалы, которые также надо улаживать. Вот и сравните, где потратить время - программировать ограничения, или исправлять последствия ошибок. Перенос анализа целостности в клиентский модуль не решает проблему. Наоборот, найти и исправить ограничения становится сложнее. UrriНо при этом можно так наограничивать, что практически любое незначительное изменение требований к БД приведет ее в полностью неработоспособное состояние. И исправить это будет очень сложно.Как могут ограничения целостности привести к неработоспособности базы данных? Единственная неприятность – это снижение производительности. Вот здесь надо искать золотую середину между риском появления проблем и быстродействием. UrriВ которой - ради модульности, но и не только - да хотя бы потому, что ни один системный аналитик не в состоянии будет охватить столько сущностей и столько уровней ограничений для поддержания целостности сразу - сущности сгруппированы в отдельные кучки, а все, что есть между этими кучкамиНе смог разобрать это предложение. Так и база данных. Если она действительно построена по модульному принципу, то основная масса связей и ограничений находится в пределах одного модуля. Межмодульные связи сложнее по своей природе, но их значительно меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2005, 21:32 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Urri ни один системный аналитик не в состоянии будет охватить столько сущностей и столько уровней ограничений для поддержания целостности сразу - сущности сгруппированы в отдельные кучки, а все, что есть между этими кучками,- это лишь связи внутренних интерфейсов, и только. Представили? Представил. Не представляю только, что если системный аналитик не охватит столько сущностей, и столько уровней организации уровней ограничений, то кто их охватит, чтобы затолкать в проги. Или их стихийно будут туда пихать разработчики прог в ходе программирования по мере выяснения требований пользователя? И сущности мож тада туда пихнуть? Их ить тысячи. Хороший проект получится. Думаю, что это происходит када проггеры начинают командовать проектом, а не проектировщики БД. Или когда гонят проек по времени, и нет возможности отличить ограничения целостности от какой-то логики прроги для конкретного юзера. Это вообще опасно. Теперь их не видно в БД. Понять ее адекватно непросто. Со всеми вытекающими последствиями. Сопровождение такой системы выглядит пугающе. БД посмотреть просто, а вот лазить по исходникам прог уже другие затраты. Urri вот строить большую систему на одних только ограничениях - совсем невозможно Не понимаю фразы. Но догадываюсь, что имеется в виду - поддерживать адекватную ПО модель данных средствами СУБД не возможно. Смотря, что за СУБД. Оракл, к примеру, имеет много возможностей для этого. Ну, если как Вы описываете тысячи сущностей, может и возникнет какая-то проблема с производительностью и, возможно, перераспределение между сервером БД и сервером приложений что-то в каких-то случаях даст (если чего-то не доучли и средств уже не хватет). Но все-таки это использование средств не по назначению. Ошибки или экономия средств. Ф-ии СУБД должны быть у СУБД, и поддержка ограничений в них входит. С проектом что-то не так, если совсем не возможно поддерживать с помощью СУБД, то что должно поддерживаться именно СУБД в системе. Вы же не поручите пироги печь к сапожнику? Хотя он что-то и налабает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2005, 00:54 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
vadiminfoПредставил. Не представляю только, что если системный аналитик не охватит столько сущностей, и столько уровней организации уровней ограничений, то кто их охватит, чтобы затолкать в проги. Или их стихийно будут туда пихать разработчики прог в ходе программирования по мере выяснения требований пользователя? И сущности мож тада туда пихнуть? Их ить тысячи. Хороший проект получится.Я имел в виду принцип "разделяй и властвуй" - аналитики им тоже не брезгуют. А стихийно - что ж, наверное, и такое бывает. Но чаще чего-то не додумывается - и стреляет потом совсем не в тех местах, где закладывалось. Причем, стреляет чаще когда используются не ограничения, а процедуры. Но вот, например, Alexander A. Sak привел вполне жизненный пример их использования, так что для меня, по-прежнему, не все однозначно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2005, 10:57 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Alexander A. SakКак это делаю я. БД для приемной комиссии. Развивается мной уже скоро как 10 лет. То, что одними ограничениями целостности не обойтись я понял где-то на 4-5 год, когда с Клариона, потом Парадокса перешел на Интербейз. Связано с особенностями работы. Например, я не могу сделать обязательным поля, которые должны быть обязательными. Потому что в основном они должны быть введены обязательно к концу работы приемной комиссии, когда надо получать статистику. Тем более есть периоды, когда операторы должны быстро принимать документы, и в то же время должны что-то внести в запись о личном деле. И чем меньше обязательных полей на этом этапе, тем лучше. Потом они заполнят все, что надо, но когда на пороге кабинета двадцатиметровая очередь абитуриентов, надо сделать минимум ввода. Причем это в летний (официальный) период работы. Во время проведения весенних испытаний вообще не надо регистрировать процентов 70% информации. В итоге у меня родился блок проверки наличия ошибок. Например, каждый абитуриент должен указать как минимум один факультет. То есть для каждой записи в мастере должен быть как минимум одна запись в детайле. Как в IB/FB описать такой констрейнт? Тем более, что в часы пик личное дело жедательно сохранить как можно быстрее (надо получить номер абитуриента и поставить его на личном деле, пропуске и экзаменационном листе). С процедурой проверки ошибок такие записи определяются на раз. Второй пример - ЕГЭ. Абитуриент говорит, что математику и историю он будет засчитывать ЕГЭшную. Но номера свидетельства ЕГЭ еще нет, потому что экзамены он будет сдавать через месяц. О том, что экзамены будут ЕГЭшные мы пометим, но о том, что номера свидетельства до сих пор нет, кто-то должен напоминать. Третье - поля типа "Год окончания учебного заведения", "Тип учебного заведения", "Стаж работы по специальности" и пр. нужны после зачисления, когда готовятся министерские отчеты. Во время запарок совсем не до них. Но когда-то кто-то должен вывести список личных дел, в которые надо в конце концов заполнить все. Подобным и занимается блок проверки наличия ошибок. Сейчас посмотрел. Проверяется около 40 различных ситуаций. Для пользователей выглядит все очень просто: администратор периодически запускает процедуру поиска ошибок. Она занимает около 2 минут, поэтому запускается вручную. Обновляется список ошибок. Список из двух колонок: название ошибки и количество личных дел с этой ошибкой. Enter на строке с ошибкой раскрывает список косячных личных дел. Ищи личное дело и исправляй. В комментариях для некоторых отчетных форм написаны причины, по которым могут не сходиться цифры. Там делаются ссылки на блок проверки ошибок. Типа "не должно быть ошибки ХХХ, иначе сумма по колонке NNN будет меньше значения в ячейке MMM". Извинте за многословие. Это все пиво. Если одним предложением, то все просто: проверки постфактум. Не легче ли было бы разбить информацию на категории, где информация каждой категории может иметь статусы "Не ведена", "Не полностью ведена", "Полностью ведена" (ну и возможны другие варианты). Соответствующие триггеры по бизнес-правилам при добавлении и изменении информации вычисляют, к какому состоянию можно отнести текущую информацию и присваивают соотвествующей значение в поле "Статус". Таким образом получаются не нужным никакие блоки поиска и проверок ошибок, примитивным запросом всегда можно получить, что как и где еще не заполнено или не правильно заполнено. Плюс БД не зависит от внешних приложений - любая сессия, без разницы откуда вызванная, при наличии достаточных прав доступа, может наряду с операторами импортировать , добавлять и изменять данные в БД, не задумываясь насколько они полностью достоверны и полностью заполнены - опять же все будет контролировать БД. Я лично не вижу препятствий в реализации данной схемы на IB/FB - BEFORE триггера там есть, устанавливать значения полей во время вставки и правки записей в них можно, ХП вроде тоже как поддерживаются, так что смело можно на ХП реализовать блок вычисления статуса информации на основании представленных данных и вызывать из соотвествующих триггеров, занося результат в специально выделенное поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2005, 17:14 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Urri Я имел в виду принцип "разделяй и властвуй" - аналитики им тоже не брезгуют. Так и я имел в виду, в частности, и этот принцип. Вопрос в том как разделять. Этот принцип находит выражение в модульности в программных системах. Есть понятие связности модуля. Если в данном случае под модулями иметь в виду один модуль - сервер БД, другие - клиентские приложения, серевера приложений, то вынос функций по управлению БД, в другие модули выглядит как нарущение функциональной связности. Плата за это, например, те сложности сопровождения, о которых мы с Вами писали. Но разделять на модули можно и внутри сервера. Это как бы не отрицает принципа "разделяй и властвуй". Другое дело, что , возможно, не все СУБД удовлитворительно поддерживают это. В Оракле есть пакеты, но, по моему, они не всегда были. Када их не было, наверное серверная (мервер БД) часть приложения выглядела скорее всего как один модуль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2005, 20:06 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
ASCRUSЯ лично не вижу препятствий в реализации данной схемы на IB/FB - BEFORE триггера там есть, устанавливать значения полей во время вставки и правки записей в них можно, ХП вроде тоже как поддерживаются, так что смело можно на ХП реализовать блок вычисления статуса информации на основании представленных данных и вызывать из соотвествующих триггеров, занося результат в специально выделенное поле. Ну примерно так и есть. Все вычисляется в ХП. Только вызывается не триггером и ни в какое поле не заносится. Зачем? Кстати, эта ХП и получается блоком определения ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2005, 07:34 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Alexander A. Sak ASCRUSЯ лично не вижу препятствий в реализации данной схемы на IB/FB - BEFORE триггера там есть, устанавливать значения полей во время вставки и правки записей в них можно, ХП вроде тоже как поддерживаются, так что смело можно на ХП реализовать блок вычисления статуса информации на основании представленных данных и вызывать из соотвествующих триггеров, занося результат в специально выделенное поле. Ну примерно так и есть. Все вычисляется в ХП. Только вызывается не триггером и ни в какое поле не заносится. Зачем? Кстати, эта ХП и получается блоком определения ошибок. Легче один раз вычислить и запомнить, чем это делать каждый раз. Когда в БД помимо самой информации хранится флаг ее состояния (актуальности), очень легко писать запросы/отчеты/обработку на другие действия - например, в Вашем случае вывести график состояния заполнения информации, отчет о данных, подлежащих дальнейшему заполнению, реализовать на триггерах бизнес-логику контроля заполнения другой информации - например, запрещать, если статус информации не выставлен в полную готовность и т.д. В Вашем случае получается, что информация, хранимая в БД - это просто информация, которая ничего не может сказать о том, насколько она актуальна, и кто то должен вызвать чего то (в данном случае ХП), чтобы определить ее состояние. В моем варианте информация уже сама несет в себе знание о своем состоянии и соотвествующе уже готова к полноценному использованию как внутри БД, так и с клиентских/отчетных приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2005, 07:59 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Одно из типичных ограничений - "почти уникальный ключ" типа ИНН для организации или штрих-код товара. При вводе с терминала желательно предупреждать пользователя о дублях, но оставлять решение на его совести, при загрузке - формировать предупреждения в протоколе. Естественно это ограничение нельзя прописать в DDL. Далее - сомнительная однозначность. Например, товар по идее должен иметь единственный штрих-код, но ... В этом случае следует перейти к M:M связи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2005, 12:07 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
ModelR Одно из типичных ограничений - "почти уникальный ключ" типа ИНН для организации или штрих-код товара. При вводе с терминала желательно предупреждать пользователя о дублях, но оставлять решение на его совести, при загрузке - формировать предупреждения в протоколе. Естественно это ограничение нельзя прописать в DDL. Так это и не ограничение целостности раз данные не должны ему удовлетворять. Раз дубли допустимы в БД, то нет этого ограничения. Это логика приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2005, 13:54 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Я на досуге еще пораздумывал над темой данного топика и пришел к выводу, что все проблемы, которые помогает решать отсутствие ограничений в самой физической структуре БД, оно же само и порождает. ;-))) Таким образом, если всяким workflow и concurrent процессам, равно как и API, начинают поручать большее количество функций, чем следовало бы, и, в частности, передают функции поддержания целостности, которые должны бы отслеживаться самой базой данных, это плохо кончится. Потому что мы становимся заложниками кривых рук кодеров и нечеткой логики разработчиков. Как известно, всего не проконтролируешь. Неправильно работающая функция позволит занести в БД неправильные данные. Вычищать которые, само собой, труднее, чем не позволить им туда попасть. Но как это делать, понятно: datafix+codefix, выполненные в нужное время и в нужной последовательности, обычно приводят к желаемому результату. Один только нюанс остается мне малопонятен - аналитики БД ведь тоже небезгрешны, тоже могут с ограничениями или недобдеть, или перебдеть. Как потом действовать? Ну, наверное, аналогично: снимать лишние ограничения, делать datafix и накладывать нужные ограничения. Но при каком подходе исправление ошибок в итоге будет иметь меньшую цену? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2005, 23:53 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
за 10 лет работы с базами пришел к выводу - база должна быть просто хранилищем того что туда положат, никаких ограничений в ней не должно быть вся логика в среднем слое PS: просто мнение PPS: начал сомневаться в необходимости триггеров :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 09:55 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
unreger за 10 лет работы с базами пришел к выводу - база должна быть просто хранилищем того что туда положат, никаких ограничений в ней не должно быть вся логика в среднем слое Если так пойдет и дальше, то Вы можете разочароваться во всех плодах цивилизации. В том числе и в среднем слое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 10:50 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
unregerза 10 лет работы с базами пришел к выводу - база должна быть просто хранилищем того что туда положат, никаких ограничений в ней не должно быть вся логика в среднем слое PS: просто мнение PPS: начал сомневаться в необходимости триггеров :) НУ Вы хотя бы зарегестрировались, чтобы мы знали такого героя.... Видимо человек пошел по стопам MDA .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 11:35 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
unregerза 10 лет работы с базами пришел к выводу - база должна быть просто хранилищем того что туда положат, никаких ограничений в ней не должно быть вся логика в среднем слое PS: просто мнение PPS: начал сомневаться в необходимости триггеров :)Кажется, R/3 так устроена - голые таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 12:23 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
unregerза 10 лет работы с базами пришел к выводу - база должна быть просто хранилищем того что туда положат, никаких ограничений в ней не должно быть вся логика в среднем слое PS: просто мнение PPS: начал сомневаться в необходимости триггеров :) Да и универсальеый сервер БД тоже пережиток. Кричишь по сети - "у кого бананы по 25 р?". в ответ - "ара, иди суды!" А как он бананы хранит и где - его дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 13:03 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Кажется, R/3 так устроена - голые таблицы. Не только R/3. Думаю, что почти все западные системы. И даже многие отечественные. Почему ? Наверно ради портабельности между разными СУБД. Однако такой подход приводит к потере производительности и неиспользовании преимуществ конкретной СУБД. Топик многократно обсуждался. Понимание "Золотой середины" у каждого своё, поэтому и нет этой самой середины :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 13:51 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
Я бы разделил ограничения целостности как минимум на три разные типа ограничений. 1. Ограничения реального мира, моделируемого в системе. Например, если товар отгружен\списан со склада, то он должен быть снят с остатков. Т.е. те ограничения, которые наложены самой природой вещей и не могут меняться по воле программистов\заказчика. Такие ограничения - в ТРИГГЕРЫ. 2. Ограничения бизнес-логики и бизнес-процедур. Типа нельзя оформить заявку на клиента, если он не расплатился за предыдущую. Сюда же относятся изменения статысов документов и т.д. Такое - в ХП. 3. Ограничения ввода, обязательных\необязательных полей. Например, нельзя ввести дату отгрузки 2008 год. Такое - в КЛИЕНТА. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2005, 16:29 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
посмотрел на MDA - а мне понравилось, буду читать, много думать :) только вот я уже подсел на хибернейт и стратс (это джава) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2005, 19:27 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
GerrosЯ бы разделил ограничения целостности как минимум на три разные типа ограничений. 3. Ограничения ввода, обязательных\необязательных полей. Например, нельзя ввести дату отгрузки 2008 год. Такое - в КЛИЕНТА. У клиента гораздо больше шансов, нежели у сервера, иметь неправильную дату на компьютере. Получим документ с датой 2008 год. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2005, 20:52 |
|
||
|
В поисках золотой середины
|
|||
|---|---|---|---|
|
#18+
LSV Кажется, R/3 так устроена - голые таблицы. Не только R/3. Думаю, что почти все западные системы. И даже многие отечественные. Почему ? Наверно ради портабельности между разными СУБД. Действительно ради "переносимости" плюс практически все крупные системы позволяют автоматом создавать таблицы и поля при создании изменении документов. Т.е. что находится в поле X таблицы Y знает только сама система. В отличии от подхода когда сначала проектируется БД, а потом клиентская часть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2005, 09:53 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=151&tid=1545766]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 270ms |
| total: | 425ms |

| 0 / 0 |
