Ограничение на SELECT из таблицы

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
ILI4
Сообщения: 21
Зарегистрирован: 07 сен 2006, 15:21

Ограничение на SELECT из таблицы

Сообщение ILI4 » 07 сен 2006, 16:13

Здраствуйте!
Я столкнулся со следующей проблемой.
При разработке базы данных предполагалось обычное удаление записей из таблицы. Однако потом было принято решение записи из таблицы не удалять, а добавить интовое поле, которое будет будем флагом, указывающим, "удалена" запись или нет(если оно имеет значение 0,то не удалена, иначе удалена). Но это влечет за собой переделку огромного количества запросов на выборку в самой программе(а проект, мягко говоря, немаленький). В связи с чем возник вопрос: а нельзя ли каким - то образом средствами Interbase "повесить" ограничение на все запросы с участием этой таблицы, чтобы выбирались только записи с нулевым значением этого поля. Сразу оговорюсь, что метод переделки таблицы в представление не подходит, т. к. таблицу я удалить или переименовать не могу из - за большого числа внешних связей.
Очень надеюсь на помощь :roll:

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

Селектить - это полбеды. Слкдующий шаг - инсёртить-апдейтить чтоб не получать дубликатов и виоляции уникальных индексов. Такшта закатывай рукава. Имхо минимальный гемор в смысле быстроты доводки напильником (не факт что оптимальный в дальнейшей работе) - в существующей структуре таки удалять, а на делетных триггерах складывать удалённое в архивы-сателлитты сходной структуры. Тогда придётся доделать только работу с этими архивами.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 07 сен 2006, 16:42

Merlin +1

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 и обращаюсь к нему. Решили перелопатить код :)

Ответить