像论坛帖子的lastPostName,根据领域模型来说就是Post和User的多对一关系,Post里根本见不到lastPostName,那只不过是User里的username,然后根据post的时间找到最晚的那一个,但有些db设计者为了他们所说的性能会打破这个方式,造一个不知道是什么的lastPostName在post里,这就是冗余,范式不要冗余,是他破坏了范式自己造出来的。
下面是百度知道里找到的定义,也不知道我上面是不是理解错了。
第三范式:第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
设计那个lastPostName就明显违背这条,但领域模型满足了这条。
free兄看来是大牛,很难想象你对数据库知识是不懂的,如果懂还是不要误导新的兄弟,基础数据库的知识我想还是一个基于数据库编程的人的根本知识体系之一,如果这样就是解决了冗余问题的话,确实是简单,我想你有时间也应该看看你管理的数据是何模样才行。
05年末学习java,当时专做swing,之前没接触过任何编程语言除了html
06年发现swing市场不太景气,给人干活人家都找做web的,为了谋生转做web,第一个web应用是个留言本,jsp+servlet+文件存贮实现。大概是在那时候发现了文件存贮的缺点并发现了hibernate,于是快速学了一翻,当时记得还在用hbm.xml来配置,学习之后大喜,赶快把留言本应用改造成jsp+servlet+hibernate
07年学习设计模式至今,其间有一个应用是关于oracle的blob类型的,hibernate总出问题,学习sql就是从那时开始的,只是为了解决那个blob类型的问题。我的数据库知识就是这点而已,所以我也一直在说“以免误导他人”这句话,我只是发表自己的见解,不是在强迫别人接受或是给别人的思想定位。
是不是说在需求分析、设计阶段可以这样去做,但是一旦到了编码、测试阶段发生需求变更或就只能手工维护了吧?
既然是这样我实在感觉不出来先设计数据库再生成对象与先构造对象在生成dll文件有什么区别,或许每个设计人员喜好不同,只要能达到目的并能够很好的按照规范及几个常用的范式去做就行了吧:)
[该贴被maoone2003于2008-09-23 18:11修改过]
我不知道你根据什么标准来判断冗余?模型就是业务对象客观事物,两者合二为一,如果客观事物什么样,模型就什么样,你和谁比冗余?
赶快擦干你脑子里那点数据库优先的潜意识,我知道完全抛弃以前知识是不容易,最好不要学习,我认为freebox就是一个很好说明,他的弱数据库背景使他接受对象思考和分析就很自然,可以看看他们的发言。