为什么在数据库中应用约束?在代码中不是更灵活吗?
我正在读一本关于实现数据库的初学者书,所以这是初学者的问题!
假设我设计了一个具有此实体模型的数据库模型:
Person,Has subtypes: Employee,Student Student's subtypes: Graduate,Undergraduate Employee's subtypes: Teacher,Administrator
系统上的注册人只能是学生或员工;人实体需要社会数字的唯一性(当然,每个人只有一个).
如果有一天学院决定教师(一个员工子类型)也可以是学生,在空闲时间上课(这是非常不可能的,但我现在无法想到任何其他事情.这是可能的!),这要难得多更改数据库设计可能有数千个条目,而不仅仅是更改代码中的逻辑,这些逻辑不允许人员作为学生和员工注册.
解决方法
某些约束最好在数据库中强制执行,有些约束最好在应用程序中强制执行.
通常存在在数据库中最佳实施的约束,因为它们是数据模型结构的基础,例如确保产品具有有效category_id的外键约束.
在应用程序中强制执行的约束可能不是数据模型的基础,例如所有FooBar产品必须是蓝色的 – 但稍后有人可能会认为FooBars也可能是黄色的.这是不需要在数据库中的应用程序逻辑,但您可以创建单独的颜色表,并且数据库可以要求产品引用该表中的有效条目.但是,唯一的颜色记录具有蓝色值的决定仍然来自数据库之外的某个地方.
考虑如果数据库中没有约束会发生什么,并要求它们都在应用程序中强制执行.如果您有多个需要处理数据的应用程序,会发生什么?如果不同的应用程序决定以不同的方式强制执行约束,您的数据会是什么样子?
您的示例显示了在应用程序中而不是在数据库中使用约束可能更有利的情况,但是可能存在初始数据模型过于严格且不灵活的基本问题?