为什么在数据库中应用约束?将其放入代码中是否会更加灵活?
我正在阅读有关实现数据库的初学者书籍,所以我想作为初学者阅读。假设我已经设计了一个数据库,其中包括以下实体模型:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
当前限制:
- 系统上的注册人只能是学生或雇员。
- 人物实体需要社会号码的唯一性,我们假定每个人仅拥有一个唯一的唯一号码(又称足够好的主键)。(请参阅#1)
后来我们决定删除数字1:如果大学决定某天Teacher
(Employee
子类型)也可以Student
在空闲时间上课,那么更改数据库设计就变得更加困难,因为数据库设计可能有成千上万,数百万,数十亿,成千上万的条目,而不仅仅是改变代码的逻辑:只是不允许某人同时注册为学生和雇员的部分。
(这是非常不可能的,但我现在想不出其他任何东西。 显然有可能)。
为什么我们在数据库设计而不是代码中关心业务规则?
#1:7年后的便笺,一个真实的例子:
我见过一个政府,由于错误,已发行的SSN重复了:多个人,同一个SSN。设计原始DB的人肯定犯了没有在数据库中应用这种唯一性约束的错误。(以及后来的原始应用程序中的错误?使用共享数据库的多个应用程序,并且不同意放置,检查和实施约束的位置?...)。
该错误将继续存在于系统中,并且在以后的许多年中,所有开发的系统都将依赖该原始系统的数据库。在这里阅读答案,我学会了在数据库中明智(而不是盲目地)应用所有约束(尽可能多地约束),以尽我所能代表真实的物理世界。