[讨论]两种思想的较量--两种数据库设计思想
看了一下以前的文章,发现了这个问题,一个是传统的,对OOD了解不多的数据库设计人员,另一个是java分析员,有十分优秀的OOD思想。面临数据库设计的时候,出现了这两种思想的冲突。
现以某大学的选课系统为例,有选课业务、退选业务。
数据库设计人员就会给出两张表,基本上没有什么分析抽象的过程,只是简单存储这两个业务的数据:
==============
选课表:
---------
主键 选课日期 课程编号 课程名称 课程学分 学号 姓名 性别 系别 专业
===============
退选表:
---------
主键 退选日期 课程编号 课程名称 课程学分 学号 姓名 性别 系别 专业
而Java设计人员就要求对象:
学生:
========
学号 姓名 性别 系别 专业
课程:
========
课程编号 课程名称 课程学分
选课记录:
========
学生 课程 选课日期 是否退选 退选日期
数据库设计人员不理解对象,坚持认为自己的设计好,他认为查一个退选名单就要关联三个表,而他的设计只要一张表就行了,一个字:快。
两种思想的碰撞,大家一起讨论下吧。 站在我的角度,我当然喜欢java风格的啦,第一种的数据冗余量大,不合数据库设计准则。 我在这学期开始使用第二种设计方法。
其实这还有一个单关联和多关联的问题,如果要做到表表之间多关联,第一种设计好像是做不到的。
比如一个简单例子,一个学生可以有多个课程,一个课程可以有多个学生,这样的话我觉得非用第二种设计不可。 从现在的设计思想看,一对多,多对多关系是很普遍的。
第一种的话,要写触发器,存储过程之类的东西才行。 wool王在 2005-7-5 09:57 发表:
我在这学期开始使用第二种设计方法。
其实这还有一个单关联和多关联的问题,如果要做到表表之间多关联,第一种设计好像是做不到的。
比如一个简单例子,一个学生可以有多个课程,一个课程可以有多个学生,这 ...
看不出第一种怎么会做不到的?
我觉得JAVA的思想是习惯把一切看作对象的.
第一种思想好像是一种子自然而然就想到的方法,你要管理学生选课,就把所有选课想关的放在一起(如课程名,专业等).
第二呢,,,,,,,,,,,,,, java分析员的思想本来就是OOD的啦。把现实世界里的一切都抽像成对象,对象拥有它的一些属性。 powerwind在 2005/7/5 09:46 发表:
看不出第一种怎么会做不到的?
我觉得JAVA的思想是习惯把一切看作对象的.
第一种思想好像是一种子自然而然就想到的方法,你要管理学生选课,就把所有选课想关的放在一起(如课程名,专业等).
第二呢,,,,,,,,,,,,,,
做多对多关系时我从来都是用OOD的思路做。
我以前做非面向对象语言例如asp时候,用第一种方法设计数据库,真的不知多对多关系如何设计。
powerwind你贴出你的思路大家讨论下吧。 为什么说第一种方法就不是OOD呢?只是分类而已 很明显,第一种根据一个事件来建表,选课事件一张表,退课事件一张表,
没有体现出面向对象的思想,
OOD要求用对象来描述,一个事件要用一个对象或几个对象的属性来描述.学生是一个对象,课程是一个对象,选课是联接两个对象的一个关系.
而且这样建立的数据库可以达到第三范式. 果然强,不可同日而语,
我毕业时什么是存储过程,什么是触发器,也只是一知半解,
hjack大三已可作如此分析,赞叹 hjack在 2005/7/6 16:37 发表:
很明显,第一种根据一个事件来建表,选课事件一张表,退课事件一张表,
没有体现出面向对象的思想,
OOD要求用对象来描述,一个事件要用一个对象或几个对象的属性来描述.学生是一个对象,课程是一个对象,选课是联接两个 ...
同意hjack。对象形数据库设计方法,hibernate等框架的主要思想其实就是这样。学生表对应学生类,课程表对应课程类,之间的耦合靠的是关联表。 hiphen1在 2005/7/6 16:47 发表:
果然强,不可同日而语,
我毕业时什么是存储过程,什么是触发器,也只是一知半解,
hjack大三已可作如此分析,赞叹
很明显,你已经毕业了。。。
请允许我叫你声师兄。。。。呵呵。。。
(话外音:把我的皮箱拿来,把我的皮鞋檫黑……) 第一个数据冗余大,而且也不见得把全部信息放一起就会快很多
像第二种的通过建立索引的话多表关联一样可以快。。。 数据库设计人员的根据是什么?我不是很明白
现在数据库教材的设计是按照第二种的 我觉得数据库设计人员是根据一笔一笔的业务来建表的。并不符合现在的数据库的设计思想。可能以前是这样设计的吧,我也是在以前的文章看到有这样设计的。 hjack在 2005-7-7 18:52 发表:
我觉得数据库设计人员是根据一笔一笔的业务来建表的。并不符合现在的数据库的设计思想。可能以前是这样设计的吧,我也是在以前的文章看到有这样设计的。
嗯,应该是比较久之前的,明显只达到第一范式 楼上各位达人有无用数据持久化框架? 楼上可不可以具体说一下数据持久化框架 hibernate 现在最流行可能就是hibernate了吧,java的来说。。。
JDO听说很不好用,,,虽然自己没接触过。。。
页:
[1]
2