工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3876|回复: 28

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

[复制链接]
发表于 2005-7-5 01:54 | 显示全部楼层 |阅读模式
看了一下以前的文章,发现了这个问题,一个是传统的,对OOD了解不多的数据库设计人员,另一个是java分析员,有十分优秀的OOD思想。
面临数据库设计的时候,出现了这两种思想的冲突。

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


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

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

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

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


两种思想的碰撞,大家一起讨论下吧。
 楼主| 发表于 2005-7-5 01:55 | 显示全部楼层
站在我的角度,我当然喜欢java风格的啦,第一种的数据冗余量大,不合数据库设计准则。
回复

使用道具 举报

发表于 2005-7-5 09:57 | 显示全部楼层
我在这学期开始使用第二种设计方法。

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

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

使用道具 举报

 楼主| 发表于 2005-7-5 12:18 | 显示全部楼层
从现在的设计思想看,一对多,多对多关系是很普遍的。

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

使用道具 举报

发表于 2005-7-5 17:46 | 显示全部楼层
wool王  在 2005-7-5 09:57 发表:

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

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

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


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

第二呢,,,,,,,,,,,,,,
回复

使用道具 举报

 楼主| 发表于 2005-7-5 17:55 | 显示全部楼层
java分析员的思想本来就是OOD的啦。把现实世界里的一切都抽像成对象,对象拥有它的一些属性。
回复

使用道具 举报

发表于 2005-7-6 01:34 | 显示全部楼层
powerwind  在 2005/7/5 09:46 发表:

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

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


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

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

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

使用道具 举报

发表于 2005-7-6 23:11 | 显示全部楼层
为什么说第一种方法就不是OOD呢?只是分类而已
回复

使用道具 举报

 楼主| 发表于 2005-7-7 00:37 | 显示全部楼层
很明显,第一种根据一个事件来建表,选课事件一张表,退课事件一张表,
没有体现出面向对象的思想,
OOD要求用对象来描述,一个事件要用一个对象或几个对象的属性来描述.学生是一个对象,课程是一个对象,选课是联接两个对象的一个关系.
而且这样建立的数据库可以达到第三范式.
回复

使用道具 举报

发表于 2005-7-7 00:47 | 显示全部楼层
果然强,不可同日而语,
我毕业时什么是存储过程,什么是触发器,也只是一知半解,
hjack大三已可作如此分析,赞叹
回复

使用道具 举报

发表于 2005-7-7 01:32 | 显示全部楼层
hjack  在 2005/7/6 16:37 发表:

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


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

使用道具 举报

发表于 2005-7-7 01:33 | 显示全部楼层
hiphen1  在 2005/7/6 16:47 发表:

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


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

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

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

使用道具 举报

发表于 2005-7-7 12:46 | 显示全部楼层
第一个数据冗余大,而且也不见得把全部信息放一起就会快很多
像第二种的通过建立索引的话多表关联一样可以快。。。
回复

使用道具 举报

发表于 2005-7-7 18:20 | 显示全部楼层
数据库设计人员的根据是什么?我不是很明白
现在数据库教材的设计是按照第二种的
回复

使用道具 举报

 楼主| 发表于 2005-7-7 18:52 | 显示全部楼层
我觉得数据库设计人员是根据一笔一笔的业务来建表的。并不符合现在的数据库的设计思想。可能以前是这样设计的吧,我也是在以前的文章看到有这样设计的。
回复

使用道具 举报

发表于 2005-7-7 19:06 | 显示全部楼层
hjack  在 2005-7-7 18:52 发表:

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


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

使用道具 举报

发表于 2005-7-7 22:47 | 显示全部楼层
楼上各位达人有无用数据持久化框架?
回复

使用道具 举报

发表于 2005-7-8 11:04 | 显示全部楼层
楼上可不可以具体说一下数据持久化框架
回复

使用道具 举报

 楼主| 发表于 2005-7-8 12:28 | 显示全部楼层
hibernate
回复

使用道具 举报

发表于 2005-7-8 17:34 | 显示全部楼层
现在最流行可能就是hibernate了吧,java的来说。。。

JDO听说很不好用,,,虽然自己没接触过。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-6-11 09:40

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表