Оба ответа могут использоваться и могут работать.
Версия вашего коллеги повышает ответственность вашего приложения (или вашего администратора баз данных) при удалении: приложение (или администратор баз данных) сначала должно будет проверить наличие дочерних строк.и удалите их, а затем удалите родительскую строку.Это работает и не преподносит вам неожиданных сюрпризов.
Если вы добавите параметр ON DELETE CASCADE
в ограничение внешнего ключа (что должно быть возможно практически в любой серьезной системе реляционных баз данных), тогда поведениебыло бы так, как вы это описываете - это может иметь смысл с точки зрения бизнеса (например, удалить все позиции заказа для заказа), но в других случаях это может вообще не иметь никакого смысла (например, если вы удаляете заказ№ 1234, вы, как правило, не хотите удалить все продукты, на которые, вероятно, будут ссылаться позиции заказа для этого заказа.
Таким образом, существует два сценария - оба имеют смысл в определенных сценариях.и не так много в других.Это совсем не простой вопрос «или - или» / «правильно или неправильно».