为什么在数据库中应用约束?放在代码里不是更灵活吗?
我正在阅读一本关于实现数据库的初学者书籍,所以我作为初学者来问这个问题。假设我设计了一个数据库,包括这个实体模型:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Run Code Online (Sandbox Code Playgroud)
当前限制:
后来我们决定去掉数字 1:如果有一天学院决定Teacher
(Employee
子类型)也可以Student
,在空闲时间参加课程,改变数据库设计要困难得多,可能有数千、数百万、数十亿,数以万计的条目,而不仅仅是更改代码中的逻辑:只是不允许一个人同时注册为学生和员工的部分。
(这是非常不可能的,但我现在想不出其他任何事情。 显然这是可能的)。
为什么我们在数据库设计而不是代码中关心业务规则?
#1:7 年后的一个笔记,一个真实的例子:
我见过一个政府,因为一个错误,发放的 SSN 被复制了:多人,同一个 SSN。那些设计原始数据库的人肯定犯了没有在数据库中应用这种唯一性约束的错误。(后来原始应用程序中的一个错误?多个应用程序使用共享数据库并且不同意在哪里放置、检查和强制执行约束?...)。
这个错误将继续存在于系统中,之后开发的所有系统都依赖于原始系统的数据库,未来很多年。阅读这里的答案,我学会了在数据库中明智地(而不是盲目地)应用所有约束,尽可能多地应用它们,以尽可能好地表示那里的真实物理世界。