Pourquoi la contrainte est-elle appliquée dans la base de données? Ne sera-t-il pas plus flexible de le mettre dans le code?
Je lis un livre pour débutants sur la mise en œuvre de bases de données, donc je pose la question en tant que débutant. Disons que j'ai conçu une base de données, y compris ce modèle d'entité:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Contraintes actuelles:
- Une personne inscrite sur le système ne peut être qu'un étudiant ou un employé.
- L'entité personne requiert l'unicité du numéro social, que nous supposons que chaque personne n'en détient qu'une seule unique (aka, une clé primaire suffisamment bonne ). (voir # 1)
Plus tard, nous décidons de supprimer le numéro 1: si un jour le collège décide que le Teacher
(le Employee
sous-type) peut également l'être Student
, en prenant des cours pendant leur temps libre, il est beaucoup plus difficile de changer la conception de la base de données qui pourrait avoir des milliers, des millions, des milliards, des millions d'entrées plutôt que de simplement changer la logique dans le code: juste la partie qui ne permettait pas à une personne d'être inscrite à la fois comme étudiant et comme employé.
(C'est très improbable mais je ne peux penser à rien d'autre pour le moment. Apparemment, c'est possible).
Pourquoi nous soucions-nous des règles métier dans la conception des bases de données plutôt que dans le code?
# 1: Une note 7 ans plus tard, un exemple concret:
j'ai vu un gouvernement où en raison d'une erreur, les SSN émis étaient dupliqués: plusieurs personnes, même SSN. Les concepteurs de la base de données d'origine ont définitivement commis cette erreur en n'appliquant pas cette contrainte d'unicité dans la base de données. (et plus tard un bogue dans l'application d'origine? plusieurs applications utilisant la base de données partagée et ne convenant pas où mettre, vérifier et appliquer la contrainte? ...).
Ce bogue continuera à vivre dans le système et tout le système développé après quoi s'appuiera sur la base de données de ce système d'origine, pendant de nombreuses années à venir. En lisant les réponses ici, j'ai appris à appliquer toutes les contraintes, autant que possible, à bon escient (pas aveuglément) dans la base de données pour représenter le monde physique réel là-bas aussi bien que possible.