Ca dépend si tu fais de la gestion d'erreur "early bounding" ou "late bounding".
Pour faire une application dont on est sûr du déroulement en tout point, il faut impérativement faire du "early bounding", c'est à dire détecter les erreurs possible avant qu'elles ne se produisent.
Ceci dit, je ne renie aucunement le late bounding : je fais généralement un mix entre les deux, c'est à dire que pour les erreurs courrantes (saisir un code produit inexistant dans une commande, etc.) je fais du early bounding, c'est à dire qu'avant de tenter tout INSERT, je vérifie l'existance du produit, et pourquoi pas d'autres infos qu'une PK ne permet pas de vérifier, genre si le produit est en stock, mais pour des problèmes plus "système", genre perte de connection entre l'appli et le serveur web, je laisse le système faire ses erreurs, que je ne cherche généralement pas à trapper : ce sont des cas logiquement "impossibles", et de toute façon "irrécupérables".