Адъ баз данных
Aug. 23rd, 2010 12:50 pmСофт1: написан почти целиком мной, заказной: 186 таблиц, 169 хранимых процедур
Софт2: написан мной и ребе белнетмоном, коробочный: 74 таблицы, 40 хранимых процедур
Софт2: написан мной и ребе белнетмоном, коробочный: 74 таблицы, 40 хранимых процедур
no subject
Date: 2010-08-23 09:23 pm (UTC)no subject
Date: 2010-08-23 09:28 pm (UTC)no subject
Date: 2010-08-23 09:47 pm (UTC)no subject
Date: 2010-08-23 10:06 pm (UTC)Да и базу можно на лету перекурочить как угодно. В случае Оракла, по крайней мере.
no subject
Date: 2010-08-23 10:16 pm (UTC)я не врублюсь все равно: вот придет завтра на мое место человек, и я скажу ему: - "вот код. смотри." и все. больше не нужно ему ничего. все в коде есть. все.
а в вашем случае вы скажете: "вот код. посмотрел? а теперь я покажу тебе базу..."
no subject
Date: 2010-08-27 08:39 am (UTC)Меньше таскать данных по сетке. Иногда имеет значение.
Можно давать права на процедуры но не на таблицы.
Рефакторинг. Засовываешь логику в процедуру - место с логикой одно, из какого софта бы не коннектился. Если прога работающая с базой не одна - то это удобно.
Контроль за рукоблудством. В процедуре можно проконтролировать вводимые данные.
И прочее, прочее, прочее...
Отсутствие SP в СУБД а равно неиспользование имеющейся возможности сделать SP как правило говорит от недостаточном владении инструментом.
no subject
Date: 2010-08-27 08:48 am (UTC)А вообще это модно счас делать на серверах приложений, которые или там же где СУБД или рядом по гигабитной сетке соединены. На базу никаких доступов - только веб-сервисы и тому подобное.
Вот что в этом печально, так это то, что логика выражаемая трехстрочным sql запросом в обычном языке часто вырождается в адскую хрень.
no subject
Date: 2010-08-27 09:12 am (UTC)>>логика выражаемая трехстрочным sql запросом в обычном языке часто вырождается в адскую хрень.
Именно поэтому такую логику удобно засовывать в SP.
no subject
Date: 2010-08-27 09:14 am (UTC)no subject
Date: 2010-08-27 09:27 am (UTC)Можно примерчик а то не догоняю про что конкретно речь?
no subject
Date: 2010-08-27 09:42 am (UTC)Т.е. у нас например есть автоматизация предприятия, состоящего из десятка филиалов. Все записи в БД помечаются кодом филиала (Dept). Например есть три таблицы Clients(Dept int,...), Payments(Dept int,...), Sales(Dept int, ...). С точки зрения типизации это означает что все три сущности реализуют один и тот же интерфейс или тайпкласс Dept a where dept :: a -> int
Пользователи системы тоже относятся к филиалам, т.е. есть таблица UserDepts(user,dept) И мне нужно, чтобы пользователи видели только записи своего филиала. Сейчас это реализуется созданием для каждой из таблиц соответствующего view (или selectable хранимой процедуры) и фильтрацией в нем, причем код проверки везде дублируется типа (where exists(select 1 from UserDepts where UserDepts.user=current_user and UserDepts.dept=SomeTableName.dept))
Могут быть и более сложные условия, например чтобы пользователь видел только записи по относящемуся к нему клиенту, итд.
И вот эту копипасту было было желательно выпилить в отдельную функцию и проверять все в ней единообразно, а не дублировать.
no subject
Date: 2010-08-27 10:04 am (UTC)Но конечно это не объектность обычных языков программирования, да.
В моей системе пока не так много таблиц что бы подобная копипаста радикально напрягала.
no subject
Date: 2010-08-27 10:10 am (UTC)На подопытные таблицы сделать вьюхи с условием что exists в доп. таблице.
Конечно не факт что от этого не будет нести крышу у оптимизатора, но зато проверка в одном месте :)
no subject
Date: 2010-08-27 10:13 am (UTC)Печаль начинается, если для проверки информации о подразделении недостаточно - например если информация о клиенте есть только в части связанных таблиц, начинается страшенное вуду.
В общем, язык SP не дотягивает даже до минимальных ООП языков, не говоря уже о функциональных.
no subject
Date: 2010-08-27 08:42 am (UTC)Структуру таблиц все равно менять приходится. Поменять/добавить SP - ничуть не сложнее.
Вместе с прогой высылается скрипт который производит изменения в базе.
А вот если ты exe новый выслал а заменили не на всех местах - то в случае если в exe зашита логика могут быть расхождения по функционированию.
Забыл, может самое главное :)
Date: 2010-08-28 01:01 pm (UTC)Поэтому манипуляции намного лаконичнее.