Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
ILI4
- Сообщения: 21
- Зарегистрирован: 07 сен 2006, 15:21
Сообщение
ILI4 » 07 сен 2006, 16:13
Здраствуйте!
Я столкнулся со следующей проблемой.
При разработке базы данных предполагалось обычное удаление записей из таблицы. Однако потом было принято решение записи из таблицы не удалять, а добавить интовое поле, которое будет будем флагом, указывающим, "удалена" запись или нет(если оно имеет значение 0,то не удалена, иначе удалена). Но это влечет за собой переделку огромного количества запросов на выборку в самой программе(а проект, мягко говоря, немаленький). В связи с чем возник вопрос: а нельзя ли каким - то образом средствами Interbase "повесить" ограничение на все запросы с участием этой таблицы, чтобы выбирались только записи с нулевым значением этого поля. Сразу оговорюсь, что метод переделки таблицы в представление не подходит, т. к. таблицу я удалить или переименовать не могу из - за большого числа внешних связей.
Очень надеюсь на помощь

-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 07 сен 2006, 16:33
Отключаешь "внешние связи" суть зависимости методом комментария тела. Пеерименовываешь таблицу. Делаешь View. Убираешь комментарии из зависимых.
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 07 сен 2006, 16:38
Селектить - это полбеды. Слкдующий шаг - инсёртить-апдейтить чтоб не получать дубликатов и виоляции уникальных индексов. Такшта закатывай рукава. Имхо минимальный гемор в смысле быстроты доводки напильником (не факт что оптимальный в дальнейшей работе) - в существующей структуре таки удалять, а на делетных триггерах складывать удалённое в архивы-сателлитты сходной структуры. Тогда придётся доделать только работу с этими архивами.
-
ILI4
- Сообщения: 21
- Зарегистрирован: 07 сен 2006, 15:21
Сообщение
ILI4 » 07 сен 2006, 18:26
Эээх, не то не то не устраивает

, хотя все очень убедительно звучит. А Вы не знаете, как ФБ поступает с удаленным записями(хранит где - то, или можно сделать чтобы хранил?). Насчет архивов - сателитов идея хороша, но возникает ряд тонкостей по поводу связей.....
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 07 сен 2006, 18:37
Физически удалённые записи нигде ты уже не найдёшь.
Кроме предложенных вариантов и твоего собственного, с перелопачиванием всех использующих процедур, других не видать.
Вот к чему приводит непродуманное ТЗ.
-
ILI4
- Сообщения: 21
- Зарегистрирован: 07 сен 2006, 15:21
Сообщение
ILI4 » 07 сен 2006, 18:43
WildSery писал(а):Вот к чему приводит непродуманное ТЗ.
В точку.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 07 сен 2006, 19:42
Физически удалённые записи нигде ты уже не найдёшь.
в некоторых случаях их может восстановить IBUndelete
http://www.ibundelete.com/features.html
но вообще - да. после commit о них можно забыть.
Насчет архивов - сателитов идея хороша, но возникает ряд тонкостей по поводу связей.....
не надо связей. по крайней мере на первом этапе. К тому же, связи можно всегда создать на ходу, по образу и подобию оригинальных таблиц. Присоединюсь к совету Мерлина по поводу доп. таблиц, заполняемых триггерами при удалении в основных.
У тебя, в общем-то, другого выхода нет. Он, конечно, есть - это перелопатить приложение. Но без тотальной переделки приложения - только так.
-
ILI4
- Сообщения: 21
- Зарегистрирован: 07 сен 2006, 15:21
Сообщение
ILI4 » 08 сен 2006, 12:20
Всем спасибо за креатив. Создал View и обращаюсь к нему. Решили перелопатить код
