Есть ли объект триггера, который я могу записать, чтобы убедиться, что внешний ключ, который был оставлен недействительным при его записи, заполнен?

#database #triggers

Вопрос:

У меня есть таблица заказов базы данных с внешним ключом, который ссылается на идентификатор клиента в другой таблице. таблица клиент и заказы представляет собой отношение «один ко многим». В таблице заказы есть несколько заказов, у которых нет идентификатора клиента (внешнего ключа), включенного в таблицу заказы, поскольку столбец внешний ключ был оставлен недействительным:

 create table orders1 
(
orderID int,
customerID int,
customerLName varchar(50),
customerFName varchar(50),
orderTotal float,
 primary key (orderID),
 foreign key (customerID) references customer1(customerID)   -- left nullable
 );
 

Я не могу вернуться и исправить записи, к которым не прикреплены идентификаторы клиентов, но есть ли объект-триггер, который я могу создать, который предупредит пользователя, если он не заполнит значение идентификатора клиента в будущем?

Ответ №1:

Нет, вы не можете написать триггер/код, который сможет угадать, какому идентификатору клиента должен принадлежать случайный заказ, если вставка пропускает идентификатор клиента.

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

Один разумный способ исправить строки-создать фиктивную запись клиента и связать с ней потерянные заказы. Как только это будет сделано, и вы измените столбец на not null, вы остановите гниение и сможете просмотреть данные, чтобы попытаться выяснить, какому клиенту на самом деле принадлежат эти заказы. Вы можете найти ответ в журналах приложений или, возможно, в других объектах, таких как оплата и т. Д., Или, возможно, заказы настолько старые, что это никого не волнует.