用于以绝对没有 NULL 值的方式对数据进行建模的模式?

主要观点:探讨在数据建模中不持久化空值(所有字段非空约束)的模式,要消除歧义、避免无效状态表示,且减少对应用层逻辑、数据库触发器或复杂约束的依赖,还分享了一些相关例子及讨论。
关键信息:

  • 例子包括自由格式注释文本字段为空、一组可勾选项全未勾选、日期范围右边界无穷等。
  • 有人提到用 6 阶范式避免空值,维基百科称 4 阶以上范式主要用于学术研究。
  • 可通过增加数据模型灵活性避免空列,用数据库视图隐藏大量连接,且可使用包含单个 JSONB 列的方式在 Postgres 中模拟。
  • Rich Hickey 的“Maybe Not”演讲提倡一种不用 NULL 的数据建模方式,在 Clojure 中可通过特定方式实现。
  • 一些联邦调查不使用 NULL,而是用子代码编码缺失值。
  • 自然空值存在问题,PostgreSQL 可用枚举或复合类型建模。
  • triples 数据库可通过特定关系解决无勾选项等问题。
  • 曾在工作中创建过右边界为无穷的日期范围表,后发现不好,现在仍存在代码库不一致问题。
    重要细节:
  • 各讨论者发表了不同观点和经验,如 thangalin 解释使用 PK 和 JOIN 表的原因等。
  • 提到多个相关链接,如关于避免 NULL 的博客、Stack Overflow 问题等。
阅读 7
0 条评论