Страница 1 из 1

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

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

Добавлено: 07 сен 2006, 16:33
WildSery
Отключаешь "внешние связи" суть зависимости методом комментария тела. Пеерименовываешь таблицу. Делаешь View. Убираешь комментарии из зависимых.

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

Добавлено: 07 сен 2006, 16:42
WildSery
Merlin +1

Добавлено: 07 сен 2006, 18:26
ILI4
Эээх, не то не то не устраивает :( , хотя все очень убедительно звучит. А Вы не знаете, как ФБ поступает с удаленным записями(хранит где - то, или можно сделать чтобы хранил?). Насчет архивов - сателитов идея хороша, но возникает ряд тонкостей по поводу связей.....

Добавлено: 07 сен 2006, 18:37
WildSery
Физически удалённые записи нигде ты уже не найдёшь.
Кроме предложенных вариантов и твоего собственного, с перелопачиванием всех использующих процедур, других не видать.
Вот к чему приводит непродуманное ТЗ.

Добавлено: 07 сен 2006, 18:43
ILI4
WildSery писал(а):Вот к чему приводит непродуманное ТЗ.
В точку.

Добавлено: 07 сен 2006, 19:42
kdv
Физически удалённые записи нигде ты уже не найдёшь.
в некоторых случаях их может восстановить IBUndelete :-)

http://www.ibundelete.com/features.html

но вообще - да. после commit о них можно забыть.
Насчет архивов - сателитов идея хороша, но возникает ряд тонкостей по поводу связей.....
не надо связей. по крайней мере на первом этапе. К тому же, связи можно всегда создать на ходу, по образу и подобию оригинальных таблиц. Присоединюсь к совету Мерлина по поводу доп. таблиц, заполняемых триггерами при удалении в основных.
У тебя, в общем-то, другого выхода нет. Он, конечно, есть - это перелопатить приложение. Но без тотальной переделки приложения - только так.

Добавлено: 08 сен 2006, 12:20
ILI4
Всем спасибо за креатив. Создал View и обращаюсь к нему. Решили перелопатить код :)