小编hko*_*sha的帖子

为什么在数据库中而不是在代码中应用约束?

为什么在数据库中应用约束?放在代码里不是更灵活吗?

我正在阅读一本关于实现数据库的初学者书籍,所以我作为初学者来问这个问题。假设我设计了一个数据库,包括这个实体模型:

 entity type    |   sub-types
----------------+--------------------------------------------
   Person       |   Employee, Student,       ...
   Student      |   Graduate, Undergraduate, ...
   Employee     |   Teacher,  Administrator, ...
Run Code Online (Sandbox Code Playgroud)

当前限制:

  1. 系统上的注册人员只能是学生或员工。
  2. 人实体需要社会编号的唯一性,我们假设每个人都只有一个唯一的(也就是一个足够好的主键)。(见#1)

后来我们决定去掉数字 1:如果有一天学院决定TeacherEmployee子类型)也可以Student,在空闲时间参加课程,改变数据库设计要困难得多,可能有数千、数百万、数十亿,数以万计的条目,而不仅仅是更改代码中的逻辑:只是不允许一个人同时注册为学生和员工的部分。

(这是非常不可能的,但我现在想不出其他任何事情。 显然这是可能的)。

为什么我们在数据库设计而不是代码中关心业务规则?

#1:7 年后的一个笔记,一个真实的例子:
我见过一个政府,因为一个错误,发放的 SSN 被复制了:多人,同一个 SSN。那些设计原始数据库的人肯定犯了没有在数据库中应用这种唯一性约束的错误。(后来原始应用程序中的一个错误?多个应用程序使用共享数据库并且不同意在哪里放置、检查和强制执行约束?...)。
这个错误将继续存在于系统中之后开发的所有系统都依赖于原始系统的数据库,未来很多年。阅读这里的答案,我学会了在数据库中明智地(而不是盲目地)应用所有约束,尽可能多地应用它们,以尽可能好地表示那里的真实物理世界。

database-design

24
推荐指数
12
解决办法
8090
查看次数

标签 统计

database-design ×1