微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据库设计 – 为什么约束应用于数据库而不是代码?

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

我正在读一本关于实现数据库的初学者书,所以这是初学者的问题!

假设我设计了一个具有此实体模型的数据库模型:

Person,Has subtypes: Employee,Student
Student's subtypes: Graduate,Undergraduate
Employee's subtypes: Teacher,Administrator

系统上的注册人只能是学生或员工;人实体需要社会数字的唯一性(当然,每个人只有一个).

如果有一天学院决定教师(一个员工子类型)也可以是学生,在空闲时间上课(这是非常不可能的,但我现在无法想到任何其他事情.这是可能的!),这要难得多更改数据库设计可能有数千个条目,而不仅仅是更改代码中的逻辑,这些逻辑不允许人员作为学生和员工注册.

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

解决方法

某些约束最好在数据库中强制执行,有些约束最好在应用程序中强制执行.

通常存在在数据库中最佳实施的约束,因为它们是数据模型结构的基础,例如确保产品具有有效category_id的外键约束.

在应用程序中强制执行的约束可能不是数据模型的基础,例如所有FooBar产品必须是蓝色的 – 但稍后有人可能会认为FooBars也可能是黄色的.这是不需要在数据库中的应用程序逻辑,但您可以创建单独的颜色表,并且数据库可以要求产品引用该表中的有效条目.但是,唯一的颜色记录具有蓝色值的决定仍然来自数据库之外的某个地方.

考虑如果数据库中没有约束会发生什么,并要求它们都在应用程序中强制执行.如果您有多个需要处理数据的应用程序,会发生什么?如果不同的应用程序决定以不同的方式强制执行约束,您的数据会是什么样子?

您的示例显示了在应用程序中而不是在数据库中使用约束可能更有利的情况,但是可能存在初始数据模型过于严格且不灵活的基本问题?

原文地址:https://www.jb51.cc/mssql/80644.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐