#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, вы остановите гниение и сможете просмотреть данные, чтобы попытаться выяснить, какому клиенту на самом деле принадлежат эти заказы. Вы можете найти ответ в журналах приложений или, возможно, в других объектах, таких как оплата и т. Д., Или, возможно, заказы настолько старые, что это никого не волнует.