hjack 发表于 2005-7-5 01:54

[讨论]两种思想的较量--两种数据库设计思想

看了一下以前的文章,发现了这个问题,一个是传统的,对OOD了解不多的数据库设计人员,另一个是java分析员,有十分优秀的OOD思想。
面临数据库设计的时候,出现了这两种思想的冲突。

现以某大学的选课系统为例,有选课业务、退选业务。
数据库设计人员就会给出两张表,基本上没有什么分析抽象的过程,只是简单存储这两个业务的数据:
==============
选课表:
---------
主键 选课日期 课程编号 课程名称 课程学分 学号 姓名 性别 系别 专业
===============
退选表:
---------
主键 退选日期 课程编号 课程名称 课程学分 学号 姓名 性别 系别 专业


而Java设计人员就要求对象:
学生:
========
学号 姓名 性别 系别 专业

课程:
========
课程编号 课程名称 课程学分

选课记录:
========
学生 课程 选课日期 是否退选 退选日期

数据库设计人员不理解对象,坚持认为自己的设计好,他认为查一个退选名单就要关联三个表,而他的设计只要一张表就行了,一个字:快。


两种思想的碰撞,大家一起讨论下吧。

hjack 发表于 2005-7-5 01:55

站在我的角度,我当然喜欢java风格的啦,第一种的数据冗余量大,不合数据库设计准则。

wool王 发表于 2005-7-5 09:57

我在这学期开始使用第二种设计方法。

其实这还有一个单关联和多关联的问题,如果要做到表表之间多关联,第一种设计好像是做不到的。

比如一个简单例子,一个学生可以有多个课程,一个课程可以有多个学生,这样的话我觉得非用第二种设计不可。

hjack 发表于 2005-7-5 12:18

从现在的设计思想看,一对多,多对多关系是很普遍的。

第一种的话,要写触发器,存储过程之类的东西才行。

powerwind 发表于 2005-7-5 17:46

wool王在 2005-7-5 09:57 发表:

我在这学期开始使用第二种设计方法。

其实这还有一个单关联和多关联的问题,如果要做到表表之间多关联,第一种设计好像是做不到的。

比如一个简单例子,一个学生可以有多个课程,一个课程可以有多个学生,这 ...

看不出第一种怎么会做不到的?
我觉得JAVA的思想是习惯把一切看作对象的.
第一种思想好像是一种子自然而然就想到的方法,你要管理学生选课,就把所有选课想关的放在一起(如课程名,专业等).

第二呢,,,,,,,,,,,,,,

hjack 发表于 2005-7-5 17:55

java分析员的思想本来就是OOD的啦。把现实世界里的一切都抽像成对象,对象拥有它的一些属性。

wool王 发表于 2005-7-6 01:34

powerwind在 2005/7/5 09:46 发表:

看不出第一种怎么会做不到的?
我觉得JAVA的思想是习惯把一切看作对象的.
第一种思想好像是一种子自然而然就想到的方法,你要管理学生选课,就把所有选课想关的放在一起(如课程名,专业等).

第二呢,,,,,,,,,,,,,,

做多对多关系时我从来都是用OOD的思路做。

我以前做非面向对象语言例如asp时候,用第一种方法设计数据库,真的不知多对多关系如何设计。

powerwind你贴出你的思路大家讨论下吧。

powerwind 发表于 2005-7-6 23:11

为什么说第一种方法就不是OOD呢?只是分类而已

hjack 发表于 2005-7-7 00:37

很明显,第一种根据一个事件来建表,选课事件一张表,退课事件一张表,
没有体现出面向对象的思想,
OOD要求用对象来描述,一个事件要用一个对象或几个对象的属性来描述.学生是一个对象,课程是一个对象,选课是联接两个对象的一个关系.
而且这样建立的数据库可以达到第三范式.

hiphen1 发表于 2005-7-7 00:47

果然强,不可同日而语,
我毕业时什么是存储过程,什么是触发器,也只是一知半解,
hjack大三已可作如此分析,赞叹

wool王 发表于 2005-7-7 01:32

hjack在 2005/7/6 16:37 发表:

很明显,第一种根据一个事件来建表,选课事件一张表,退课事件一张表,
没有体现出面向对象的思想,
OOD要求用对象来描述,一个事件要用一个对象或几个对象的属性来描述.学生是一个对象,课程是一个对象,选课是联接两个 ...

同意hjack。对象形数据库设计方法,hibernate等框架的主要思想其实就是这样。学生表对应学生类,课程表对应课程类,之间的耦合靠的是关联表。

wool王 发表于 2005-7-7 01:33

hiphen1在 2005/7/6 16:47 发表:

果然强,不可同日而语,
我毕业时什么是存储过程,什么是触发器,也只是一知半解,
hjack大三已可作如此分析,赞叹

很明显,你已经毕业了。。。

请允许我叫你声师兄。。。。呵呵。。。

(话外音:把我的皮箱拿来,把我的皮鞋檫黑……)

jinry 发表于 2005-7-7 12:46

第一个数据冗余大,而且也不见得把全部信息放一起就会快很多
像第二种的通过建立索引的话多表关联一样可以快。。。

蓝色蚂蚁 发表于 2005-7-7 18:20

数据库设计人员的根据是什么?我不是很明白
现在数据库教材的设计是按照第二种的

hjack 发表于 2005-7-7 18:52

我觉得数据库设计人员是根据一笔一笔的业务来建表的。并不符合现在的数据库的设计思想。可能以前是这样设计的吧,我也是在以前的文章看到有这样设计的。

蓝色蚂蚁 发表于 2005-7-7 19:06

hjack在 2005-7-7 18:52 发表:

我觉得数据库设计人员是根据一笔一笔的业务来建表的。并不符合现在的数据库的设计思想。可能以前是这样设计的吧,我也是在以前的文章看到有这样设计的。

嗯,应该是比较久之前的,明显只达到第一范式

芝麻糊 发表于 2005-7-7 22:47

楼上各位达人有无用数据持久化框架?

lovri 发表于 2005-7-8 11:04

楼上可不可以具体说一下数据持久化框架

hjack 发表于 2005-7-8 12:28

hibernate

wool王 发表于 2005-7-8 17:34

现在最流行可能就是hibernate了吧,java的来说。。。

JDO听说很不好用,,,虽然自己没接触过。。。
页: [1] 2
查看完整版本: [讨论]两种思想的较量--两种数据库设计思想