知识卡片
避免数据冗余不等于支持代码复用
内容
数据库范式(1NF/2NF/3NF/BCNF/4NF)保证属性原子性、避免数据冗余,但避免数据冗余并不意味着代码能支持复用。例:员工表与客户表都有“电子邮件”列,业务含义完全相同,但对数据表而言它只是原子的 varchar 列,分属两表,无法共享;地址为保证原子性被拆成国家/省/市/街道多列,反而使“地址”成为分散概念。对象建模范式则引入细粒度类型来表达高内聚概念,提供恰如其分的复用粒度。发散:数据模型的“无冗余”和领域模型的“可复用/高内聚”是两个正交目标,别用前者代替后者。
参考来源
- 位置:《解构领域驱动设计》附录A A.1.3(源文件:_epub-src/OEBPS/034.xhtml)
- 结论依据:原文以电子邮件列和地址拆分为例,说明数据库范式避免冗余与代码复用是两回事。
- 原始内容:避免数据冗余的目的在于避免重复数据……但是,避免数据冗余并不意味着代码能支持复用。