数据库数据模型构建与优化
1. 数据验证与约束
在数据处理过程中,默认情况下,基础类中的常规 update_attribute 方法会被验证模块中的方法替换。尽管文档提到跳过验证在切换布尔值时可能有用,但这些方法并不能确保只进行这一操作。API 维护者原本需要一种轻量级机制来进行安全的更新,但这也带来了随意绕过模型验证安全机制的问题。
在应用层面,许多约束难以或无法表达和保证,但在数据层却能简单实现。例如自定义的电影时长和评级验证器就是简单示例。随着应用层验证器变得越来越复杂,更容易出现漏洞,导致无法实现其目的。而数据层约束通常非常简洁,简单性在这里起到了重要作用。
此外,模型验证往往比相应的数据库约束更冗长,容易在应用代码重构或重写时被遗漏。数据库约束一旦指定,就成为数据模型的一部分,需要刻意操作才能移除,不存在 save_with_validation(false) 这种绕过验证的情况。
2. 引用完整性
虽然已经有了数据层的物理约束和应用层的逻辑约束,但数据模型仍缺乏引用完整性。例如, movie_showtimes 表通过 theatre_id 和 movie_id 列引用 theatres 和 movies 表,但数据层没有保证这些引用的有效性和存在性。同样,从模型角度来看, MovieShowtime 类中定义的 belongs_to 关系也没有保证引用的存在
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



