主要观点:探讨在数据建模中不持久化空值(所有字段非空约束)的模式,要消除歧义、避免无效状态表示,且减少对应用层逻辑、数据库触发器或复杂约束的依赖,还分享了一些相关例子及讨论。
关键信息:
- 例子包括自由格式注释文本字段为空、一组可勾选项全未勾选、日期范围右边界无穷等。
- 有人提到用 6 阶范式避免空值,维基百科称 4 阶以上范式主要用于学术研究。
- 可通过增加数据模型灵活性避免空列,用数据库视图隐藏大量连接,且可使用包含单个 JSONB 列的方式在 Postgres 中模拟。
- Rich Hickey 的“Maybe Not”演讲提倡一种不用 NULL 的数据建模方式,在 Clojure 中可通过特定方式实现。
- 一些联邦调查不使用 NULL,而是用子代码编码缺失值。
- 自然空值存在问题,PostgreSQL 可用枚举或复合类型建模。
- triples 数据库可通过特定关系解决无勾选项等问题。
- 曾在工作中创建过右边界为无穷的日期范围表,后发现不好,现在仍存在代码库不一致问题。
重要细节: - 各讨论者发表了不同观点和经验,如 thangalin 解释使用 PK 和 JOIN 表的原因等。
- 提到多个相关链接,如关于避免 NULL 的博客、Stack Overflow 问题等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。