Как обрабатывать удаление в реляционных базах данных?
Если реляционная база данных имеет, например, таблицу Suppliers
где значения Suppliers.ID
используются в столбцах других таблиц, таких как Invoice.Supplier
что должно произойти, если пользователь хочет "удалить поставщика 15 из системы"?
3 ответа
Если Supplier 15
имеет запись в Invoice
Таблица. Rdbms выдаст ошибку ссылочной целостности, так как Supplier 15
связан и имеет запись в других таблицах.
Обработка такого рода удаления будет зависеть от ваших бизнес-правил. Если вы сначала удалите связанные записи или вы можете запретить пользователю удалять записи, если они используются в других таблицах.
Чтобы уточнить комментарий @DanBracuk.
Добавьте столбец к вашей таблице InActive bit NOT NULL DEFAULT 0
,
Когда вы "удаляете" этого поставщика, установите для него значение 1 и больше не отображать его в вашем пользовательском интерфейсе, кроме как в основном списке поставщиков, чтобы его можно было снова включить.
Большинство коммерческих пакетов учета используют что-то вроде этого, в большинстве случаев, если вы знаете имя неактивного поставщика, вы можете ввести его в раскрывающемся списке (и оно будет принято), но оно не появится в раскрывающемся списке.
Это зависит от характера отношений между и Счетом и Поставщиком:
Может ли счет существовать без поставщика? Если это возможно, вы можете принять решение об аннулировании всех столбцов, которые ссылаются на удаленный Supplir. Если это невозможно, вы можете либо принять решение об удалении счетов-фактур, принадлежащих удаленному поставщику (если вы можете считать этот счет субобъектом объекта поставщика), либо вы можете предотвратить удаление поставщика до тех пор, пока поскольку есть любые счета, ссылающиеся на это.