powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удалить значение из таблицы-справочника.
12 сообщений из 12, страница 1 из 1
Удалить значение из таблицы-справочника.
    #38594786
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Никак не соображу, как правильно поступать в случае, если в таблицу (справочник, например, должности, или номенклатура)
внесена позиция, а потом пользователь ее решает удалить.

Вот, если была грамматическая ошибка - можно дать возможность исправить, т.е. сделать update. Т.е. правильно делать
справочник с полем id и тогда update затронув исправление самого значения ни к чему 'плохому ' не приведет.

В случае с удалением, читал мнения, что правильно либо не давать такой функционал вообще, либо кидать в архив, т.е. как
бы условное удаление.

С таким условным удалением у меня получилось сделать, хотя возможно криво, но вопрос пока не в этом.

Можно ли как-то эффективно проверить задействовано ли значение справочника как FK в других таблицах базы. Чтоб, например,
если что-то в справочник внесли, но нигде не используется, можно было удалить.

Возможно смог бы в форме-представлении сразу отображать наличие такой возможности удаления для значения.
(например, + уже используется, а минус - можно удалить)
Думаю, для малых справочников, где количество значений не превысит 10-50 строк, такая операция не будет долгой.

Для больших справочников типа номенклатура, понятно, такое отображение делать быстро не получится, тогда просто при
попытке удаления конкретной записи клиент получит отбой с информацией, что значение используется…

Возможно я совсем не в теме.
Как в ситуации, когда пользователь внес по ошибке, или для теста-пробы значение в справочник, потом безболезненно его удалить ?

Спасибо.
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38594819
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Wong,

Если держать под контролем все таблицы, где может быть связь с исходным справочником, и делать селект count(знач) каждой

на предмет наличия FK, то обойдя все такие таблицы и получив нулевое значение суммы таких каунтов - повод 'безболезненно'

удалить значение справочника.

Это нормальная практика?
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38594941
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это надо реализовывать через свойство ON DELETE наложенных внешних ключей 5.3.5. Foreign Keys

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
category (
    id primary key,
    name text,

property (
    id primary key,
    category_id references category on delete cascade,
    name text,

model (
    id primary key,
    category_id references category on delete restrict,
    name text,


то есть при попытке удаления категории, удалить автоматически и все её свойства. однако, если в ней есть хотя бы один товар, удалить эту категорию не получится.
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38594960
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat,

спасибо за ответ, буду читать-изучать, пробовать.

Я правильно понял что с вашим советом можно пытаться получить правильный результат
в многопользовательском режиме базы. Т.к. если в монопольном я еще могу себе что-то
фантазировать, то какие грабли ждать в ином - не представляю...
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38594984
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Wong,

да, постгрес - клиент-серверная многопользовательская СУБД. :) граблей вроде не видно. выводите на клиенте ошибку удаления категории в понятном человеку виде, например "не получилось удалить категорию: она содержит товары. подсказка: сначала удалите их или перенесите в другую категрию." главное правильно выбрать тип ON DELETE для каждого внешнего ключа в БД.
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38594994
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat,

понял, спасибо.
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38595534
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Wong,

Чисто для информации.
Иногда в справочники добавляют колонку Enable/Disable. При этом записи не удаляются, а запрещаются для дальнейшего использования. Это бывает полезно когда запись удалить нельзя (есть ссылки на внешние таблицы) и не нужно больше использовать. Дополнительный плюс - отчеты по историческим данным будут работать корректно.

Иногда добавляют в справочники две колонки с датами. Дата действия "с" и "по". Смысл тот же.

Иногда добавляют и Enable/Disable и две даты одновременно.
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38595578
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

понятно, спасибо. Я это и имел в виду, когда писал в начале поста :

либо кидать в архив, т.е. как бы условное удаление.

возможно, неудачно выразился.
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38596646
big-trot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стоит подумать о такой ситуации, что делать с теми записями, которые привязаны к записи, ушедшей в архив. Эти зависимые записи тоже становятся автоматически архивными или нет? Это то же самое, когда вы выбираете политику поведения ON DELETE, только в этом случае сама база контролирует исполнение этой политики. А в вашем случае все надо писать самому.
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38597013
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-trot,
спасибо за участие.

В моем понимании, если есть запись в справочнике и она используется , то ее как раз ни в архив , ни тем более удалять
с концами , вообще нельзя.

Не вижу в этом никакого профита. Для больших справочников должны быть фильтры, чтобы редко используемая запись не
мозолила глаза.

Я опыта не имею. Пусть меня поправят знающие люди, и назовут ситуации, когда нужно иное.
Знаю, что тема избитая , но тем не менее ... есть пару вопросов, где затык …

Например, для простоты, справочник : должности. Там будет, однозначно, не много строк.
Справочник : номенклатура - там много и буду делать фильтры.

Исходно, мой вопрос касался случаев, когда в справочник внесли значение, которое не используется, и не будет
использоваться вообще, - однозначный мусор.

Тогда, вроде как, его нужно удалить. А сделав функционал (возможность) удаления в справочнике, есть риск что могут удалять
и нужную, используемую запись.

Вот здесь, наверное, как посоветовали, ON DELETE RESTRICT, - самое то.

Хотел узнать, какая нужна структура справочника и логика (о чем думать), чтобы выйти на приличный уровень функционала.
Не в ущерб производительности.

Еще вопрос.
Парюсь, как правильно сделать справочник персонала, ФИО :

вариант_1
pers_id ___PK
fio
prim

вариант_2
pers_id ___PK
date_birth __PK (дата рожд.)
fio __PK (Смирнова Елена Николаевна)
prim

Пользовал для себя вариант_1. Наслышан о проблемах двух разных людей с одной ФИО, напр., Смирнова Елена Николаена, еще
о том, что уволилась, через три года опять пришла и завели опять по новой, и еще о проблеме учета с переходом на фамилию мужа.
Типа все решать через справочник с составным ключем -- мой надуманный вариант_2.


Как правильно делать, может кто подскажет.
Спасибо.
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38597131
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_WongХотел узнать, какая нужна структура справочника и логика (о чем думать), чтобы выйти на приличный уровень функционала.
Не в ущерб производительности.маленькое замечание, чтобы быстро работали проверки ON DELETE на больших таблицах, нужно вручную создать индекс на ссылающееся поле, то есть в моем примере по property(category_id) и model(category_id)

5.3.5. Foreign Keys

Since a DELETE of a row from the referenced table or an UPDATE of a referenced column will require a scan of the referencing table for rows matching the old value, it is often a good idea to index the referencing columns too. Because this is not always needed, and there are many choices available on how to index, declaration of a foreign key constraint does not automatically create an index on the referencing columns.
...
Рейтинг: 0 / 0
Удалить значение из таблицы-справочника.
    #38597942
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat,

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


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