powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / late-удаление. Как? Подскажите.
4 сообщений из 4, страница 1 из 1
late-удаление. Как? Подскажите.
    #33430603
Girgory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Думаю над следующей вещью и не могу сообразить.

Есть две таблицы следующего вида:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE items
(id INT PRIMARY KEY,
 id_foreign INT REFERENCES another_table (id) -- foreign key
)

CREATE TABLE items_values
(id_item INT REFERENCES items (id), -- foreign key
 id_value INT REFERENCES types_of_values (id), -- foreign key
 value DOUBLE PRECISION,
 PRIMARY KEY (id_item, id_value)
)

Чего хочется:

1) По таблице items_values, а именно по полю value, пользователь должен искать нужные ему items.
2) Items - это пользовательские объекты и пользователь может их удалять, имея на то права. Но администратор ресурса, использующего данную БД, не хочет, чтобы items удалялись навсегда, то есть посредством вызова DELETE.
3) Я, как программист, подумал хорошо бы сделать late-удаление, что по своей идее совпадает с идеей администратора. Это значит что надо метить items, как deleted, а потом в batch-режиме (скажем ночью) удалять их. Или по запросу администратора.
Я подумал, что это должно снять нагрузку с БД, когда (то есть днем) у нее хватает забот и без удаления.

Проблема:
Если я добавлю в таблицу items поле deleted BOOL, то при поиске по полю value таблиы items_values придется делать join, чтобы отбрасывать values удаленных items. Чтобы не делать join можно добавить поле deleted в таблицу items_values. Но тогда при удалении item'a придется запускать UPDATE не только на items, но и на items_values. Но тогда возникает резонный вопрос: толку от late-уаления, если все равно выполняются такое же количество UPDATE'ов, сколько выполнялось бы DELETE'ов.

Отсюда возникли вопросы:
Где тут выиграть?
1) Если не брать в счет администратора и удалять items сразу же, тогда получается, что при поиске не надо писать никаких join'ов.
2) Если же реализовывать late-удаление, то как?Cgfcv,
3) И вообще, нормально ли это - использовать при поиске такие вот join'ы, типа проверки на удаленные элементы. Мне кажется не очень.

Подскажите. Может я просто не о том думаю?
Спасибо!
...
Рейтинг: 0 / 0
late-удаление. Как? Подскажите.
    #33431802
Фотография neal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что Вас смущает по поводу поля Deleted?

Сделаете поле Deleted только лучше не BOOL а дату удаления, повесте индекс по нему. Сделайте вьюшки или хранимки которые будут возвращать
SELECT * FROM items WHERE (Deleted is null)
и работайте только с ними, а не с таблицами напрямую.

Тогда данные можно будет быстро восстановить, а если еще одно поле добавить DeletedWho и прописывать например в триггере кто удалил...

А если иметь еще поле DeletedWhy и требовать у пользователя причину удаления, то вообще жизнь Ваших данных будет песней.

Grigory2) Если же реализовывать late-удаление, то как?Cgfcv,
Это что какое-то новое ругательство?

-------------------------------------------------------
Люди делятся на 2 категории - те, которые делают бэкапы, и те, которые будут делать бэкапы. (c)Шкшыр скуфь
...
Рейтинг: 0 / 0
late-удаление. Как? Подскажите.
    #33433255
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"преждевременная оптимизация корень всех бед". Может, в данном случае, это и не так :)
...
Рейтинг: 0 / 0
late-удаление. Как? Подскажите.
    #33436694
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GirgoryЕсли я добавлю в таблицу items поле deleted BOOL, то при поиске по полю value таблиы items_values придется делать join, чтобы отбрасывать values удаленных items.

Не обязательно. Отсеиш их потом, когда будешь показывать эти items.

Girgory
Чтобы не делать join можно добавить поле deleted в таблицу items_values.

абсолютно лишнее. Даже если JOIN придется делать. Ничего страшного.

Girgory
Отсюда возникли вопросы:
Где тут выиграть?

Меньше парица.

Girgory
3) И вообще, нормально ли это - использовать при поиске такие вот join'ы, типа проверки на удаленные элементы. Мне кажется не очень.


Нормально.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / late-удаление. Как? Подскажите.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]