|
|
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
Добрый день. Никак не соображу, как правильно поступать в случае, если в таблицу (справочник, например, должности, или номенклатура) внесена позиция, а потом пользователь ее решает удалить. Вот, если была грамматическая ошибка - можно дать возможность исправить, т.е. сделать update. Т.е. правильно делать справочник с полем id и тогда update затронув исправление самого значения ни к чему 'плохому ' не приведет. В случае с удалением, читал мнения, что правильно либо не давать такой функционал вообще, либо кидать в архив, т.е. как бы условное удаление. С таким условным удалением у меня получилось сделать, хотя возможно криво, но вопрос пока не в этом. Можно ли как-то эффективно проверить задействовано ли значение справочника как FK в других таблицах базы. Чтоб, например, если что-то в справочник внесли, но нигде не используется, можно было удалить. Возможно смог бы в форме-представлении сразу отображать наличие такой возможности удаления для значения. (например, + уже используется, а минус - можно удалить) Думаю, для малых справочников, где количество значений не превысит 10-50 строк, такая операция не будет долгой. Для больших справочников типа номенклатура, понятно, такое отображение делать быстро не получится, тогда просто при попытке удаления конкретной записи клиент получит отбой с информацией, что значение используется… Возможно я совсем не в теме. Как в ситуации, когда пользователь внес по ошибке, или для теста-пробы значение в справочник, потом безболезненно его удалить ? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 15:47:50 |
|
||
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
Alex_Wong, Если держать под контролем все таблицы, где может быть связь с исходным справочником, и делать селект count(знач) каждой на предмет наличия FK, то обойдя все такие таблицы и получив нулевое значение суммы таких каунтов - повод 'безболезненно' удалить значение справочника. Это нормальная практика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 16:12:21 |
|
||
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
это надо реализовывать через свойство ON DELETE наложенных внешних ключей 5.3.5. Foreign Keys Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. то есть при попытке удаления категории, удалить автоматически и все её свойства. однако, если в ней есть хотя бы один товар, удалить эту категорию не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 17:32:08 |
|
||
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, спасибо за ответ, буду читать-изучать, пробовать. Я правильно понял что с вашим советом можно пытаться получить правильный результат в многопользовательском режиме базы. Т.к. если в монопольном я еще могу себе что-то фантазировать, то какие грабли ждать в ином - не представляю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 17:48:00 |
|
||
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
Alex_Wong, да, постгрес - клиент-серверная многопользовательская СУБД. :) граблей вроде не видно. выводите на клиенте ошибку удаления категории в понятном человеку виде, например "не получилось удалить категорию: она содержит товары. подсказка: сначала удалите их или перенесите в другую категрию." главное правильно выбрать тип ON DELETE для каждого внешнего ключа в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 18:06:34 |
|
||
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, понял, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 18:13:16 |
|
||
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
Alex_Wong, Чисто для информации. Иногда в справочники добавляют колонку Enable/Disable. При этом записи не удаляются, а запрещаются для дальнейшего использования. Это бывает полезно когда запись удалить нельзя (есть ссылки на внешние таблицы) и не нужно больше использовать. Дополнительный плюс - отчеты по историческим данным будут работать корректно. Иногда добавляют в справочники две колонки с датами. Дата действия "с" и "по". Смысл тот же. Иногда добавляют и Enable/Disable и две даты одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 11:43:07 |
|
||
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
Павел Лузанов, понятно, спасибо. Я это и имел в виду, когда писал в начале поста : либо кидать в архив, т.е. как бы условное удаление. возможно, неудачно выразился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 12:24:20 |
|
||
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
Стоит подумать о такой ситуации, что делать с теми записями, которые привязаны к записи, ушедшей в архив. Эти зависимые записи тоже становятся автоматически архивными или нет? Это то же самое, когда вы выбираете политику поведения ON DELETE, только в этом случае сама база контролирует исполнение этой политики. А в вашем случае все надо писать самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 10:31:44 |
|
||
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
big-trot, спасибо за участие. В моем понимании, если есть запись в справочнике и она используется , то ее как раз ни в архив , ни тем более удалять с концами , вообще нельзя. Не вижу в этом никакого профита. Для больших справочников должны быть фильтры, чтобы редко используемая запись не мозолила глаза. Я опыта не имею. Пусть меня поправят знающие люди, и назовут ситуации, когда нужно иное. Знаю, что тема избитая , но тем не менее ... есть пару вопросов, где затык … Например, для простоты, справочник : должности. Там будет, однозначно, не много строк. Справочник : номенклатура - там много и буду делать фильтры. Исходно, мой вопрос касался случаев, когда в справочник внесли значение, которое не используется, и не будет использоваться вообще, - однозначный мусор. Тогда, вроде как, его нужно удалить. А сделав функционал (возможность) удаления в справочнике, есть риск что могут удалять и нужную, используемую запись. Вот здесь, наверное, как посоветовали, ON DELETE RESTRICT, - самое то. Хотел узнать, какая нужна структура справочника и логика (о чем думать), чтобы выйти на приличный уровень функционала. Не в ущерб производительности. Еще вопрос. Парюсь, как правильно сделать справочник персонала, ФИО : вариант_1 pers_id ___PK fio prim вариант_2 pers_id ___PK date_birth __PK (дата рожд.) fio __PK (Смирнова Елена Николаевна) prim Пользовал для себя вариант_1. Наслышан о проблемах двух разных людей с одной ФИО, напр., Смирнова Елена Николаена, еще о том, что уволилась, через три года опять пришла и завели опять по новой, и еще о проблеме учета с переходом на фамилию мужа. Типа все решать через справочник с составным ключем -- мой надуманный вариант_2. Как правильно делать, может кто подскажет. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 14:52:07 |
|
||
|
Удалить значение из таблицы-справочника.
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 16:02:50 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38597942&tid=1998775]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
202ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 519ms |

| 0 / 0 |
