精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 系统分析>>自开版到2000-04-10待整理精华>>一个对象与数据库的问题....

主题:一个对象与数据库的问题....
发信人: 3871()
整理人: majorsun(1999-11-19 15:24:56), 站内信件
假定经OOA分析,得一“客户”类,以及由“客户”类派生的“查询客户”及
“销售客户”,在“查询客户”中,有客户查询的问题记录,在“销售客户”
中,有该客户的销售资料,现在的问题是:

1.无论是“客户”,还是“查询客户”、“销售客户”,显然都是数据库记录。


2、在数据库中怎样实现“派生”与“继承”的关系?毕竟数据库定义中已经将


数据库的字段都已经确定。

3、父类“客户”中的属性与服务(方法),又怎样被子类继承?

不妨大家都来讨论讨论。


--
※ 修改:.3871 于 May 29 17:39:57 修改本文.[FROM: 202.96.190.124]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.124]
发信人: xue_pear (雪梨), 信区: SystemAnalysis
标  题: Re: 再问一个对象与数据库的问题....
发信站: 网易虚拟社区 (Sun May 30 11:13:28 1999), 站内信件

【 在 3871 (3871) 的大作中提到: 】
: 假定经OOA分析,得一类,以及由“客户”类派生的“查询客户”及
: 在中,有客户查询的问题记录,在“销售客户”
: 中,有该客户的销售资料,现在的问题是:

:    .......

有一些想法不知道是否正确
    按现在的技术情况下,在设计阶段,对象的属性(数据库)和对象的方法
(服务)分离实现。
   “客户”,“销售客户”,“查询客户”数据存储肯定是以数据库的方式
实现。在数据库中只能保存---对象的属性。
    数据库中如何实现对象的继承?你可以使用SYBASE公司的P-DESIGER,一
个比较简单的面向数据库设计CASE工具。对继承,存在子表和父表。你的情况
“客户”是父表,“销售客户”,“查询客户”是子表。子表可以以两种方式
继承父表,一是将父表全部属性(字段)加入到子表中,这种方式存在冗余的
可能。二是将父表的主键加到子表中,你例子可能的情况是“销售客户”中有
“客户”的主键。实际上可能是一对多加依赖。
    对于对象的服务,对属性的操作就实际包含对数据库的处理。
    
    以上是我的一点想法,有误请揪!!!!

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.98.163.222]
发信人: 3871 (3871), 信区: SystemAnalysis
标  题: Re: 再问一个对象与数据库的问题....
发信站: 网易虚拟社区 (Sun May 30 15:29:26 1999), 站内信件

【 在 xue_pear (雪梨) 的大作中提到: 】
: 【 在 3871 (3871) 的大作中提到: 】
: : 假定经OOA分析,得一类,以及由“客户”类派生的“查询客户”及
: : 在中,有客户查询的问题记录,在“销售客户”
: : 中,有该客户的销售资料,现在的问题是:
:    .......

谢谢雪犁,你的做法(尤其是在子表中设主表键值的方法)对我是一个很好的
启发。

对于在数据库中实现继承或派生的关系这个问题,我提出了2个方案:不知我是

不是钻了牛角尖:
1。数据库的建立,以继承树中的叶子结点为准。
这种做法我已经否定,原因是:不能体现继承关系(包括属性继承与服务继承)

父类几乎没有必要存在,数据库冗余大,
2。从永久对象的角度考虑。
父类与子类平时均以临时对象的方式存在,在需要进行对象永久化的环节进行
对象永久化,数据库结构的建立以此刻为准。
我不知道这样做对不对,首先无法确定“需永久化的环节”,其次,仍然存在
大量的冗余。

我觉得这问题应该归类至OOD而不是OOA中,有关“永久对象”的问题讨论中。
不知雪犁兄觉得如何?

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.124]
发信人: xue_pear (雪梨), 信区: SystemAnalysis
标  题: Re: 再问一个对象与数据库的问题....
发信站: 网易虚拟社区 (Sun May 30 19:37:23 1999), 站内信件

【 在 3871 (3871) 的大作中提到: 】
: 【 在 xue_pear (雪梨) 的大作中提到: 】
: : 【 在 3871 (3871) 的大作中提到: 】
: :    .......

:    .......

对你的问题我的考虑是
1。“数据库的建立,以继承树中的叶子结点为准”
   你的例子中如果‘客户’是没有用的,可以不生成父表。但有些情况下,生


成父表是有意义的,而且可以减少冗余。比如:你购买东西时,收银台开的发票


发票头有时间、发票号、开票人。。。。,还有你购买的东西(可能不止一样)


以父表,子表的方式实现:父表包括时间、发票号、开票人。。。。,子表
包括父表的所有内容(继承)和一件购买的东西。如果购买的东西不止一样。那


么,将产生X条记录。现在可以不使用父表,子表仅满足1NF(包括了重复的日期


,开票人。。。)。所以不产生父表是最大的冗余。
   一般,如果父表和子表不是一对一的关系,都应该生成父表。
2。“从永久对象的角度考虑。 ”
   我想,在数据库中,永久对象就是一条记录吧?
   现在好象还没有能支持的永久对象的语言----一个国际问题。


--
※ 修改:.xue_pear 于 May 30 19:38:18 修改本文.[FROM: 202.98.163.222]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.98.163.222]
发信人: ebus (Franky), 信区: SystemAnalysis
标  题: Re: 再问一个对象与数据库的问题....
发信站: 网易虚拟社区 (Mon May 31 00:29:58 1999), 站内信件

我有不同的看法。
谈到了数据库,应该是实现阶段的事了。
关系数据库的父子关系怎么能用来代替对象的继承?请再考虑。
3871和你讨论的问题确实是很难的问题,就是用关系数据库实现OOA/D的模型。

jasmine作为一个纯对象数据库,在这个问题上会有所进步。即使是Oracle也只是
在其关系数据库外包了一层对象的壳。
说这些,就是要说明用关系数据库实现OOA/D的模型的确很棘手。
我们仔细研究一下UML看看里面有什么可以帮助的。好吗?

【 在 xue_pear (雪梨) 的大作中提到: 】
: 【 在 3871 (3871) 的大作中提到: 】
: : 【 在 xue_pear (雪梨) 的大作中提到: 】
: : 
: :    .......
:    .......


--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.98.108.70]
发信人: riyuexing (升化), 信区: SystemAnalysis
标  题: Re: 再问一个对象与数据库的问题....
发信站: 网易虚拟社区 (Mon May 31 12:03:16 1999), 站内信件

【 在 ebus (Franky) 的大作中提到: 】
: 我有不同的看法。
: 谈到了数据库,应该是实现阶段的事了。
: 关系数据库的父子关系怎么能用来代替对象的继承?请再考虑。
: 3871和你讨论的问题确实是很难的问题,就是用关系数据库实现OOA/D的模型。
:    .......
?? 太高深了! 那位可以帮我解释具体一点



--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.97.150]
发信人: magicfat (魔法胖子), 信区: SystemAnalysis
标  题: Re: 再问一个对象与数据库的问题....
发信站: 网易 BBS (Mon May 31 19:27:29 1999), 转信

【 在 ebus (Franky) 的大作中提到: 】
: 我有不同的看法。
: 谈到了数据库,应该是实现阶段的事了。

不不不,数据库的设计也是设计,8-)

: 关系数据库的父子关系怎么能用来代替对象的继承?请再考虑。
: 3871和你讨论的问题确实是很难的问题,就是用关系数据库实现OOA/D的模型。

用RDB实现永久对象保存的问题,基本上有三种思路:
1。如果父类的永久属性很少,可以不为父类单独建表,直接将父类的属性
放到子类表中去。这种方法比较不通用,有冗余,好处是数据库结构
简单,访问比较简单快速。
2。通常情况下,是用一个KEY值来唯一标识一个永久对象,在父类表中
和子类表中都以同一个KEY值查询,将得到的记录在内存中装配成一个
对象。这是目前比较通用的解决办法,冗余较小,数据库结构比较灵活。
一个致命的缺点是处理多继承的时候会有问题。
3。前两种思路中,都需要根据系统设计所得到的OO数据结构来确定
数据库结构,而数据库的结构必须跟着OO数据结构变。第三种思路实际
上是用RDB来实现一个OODB的界面,从应用系统的角度来看,不必关系
数据库的内在表结构,只需要通过某种描述手段(描述文件或程序接口)
来将整个数据结构描述出来,这层OODB的界面可以将该数据结构本身
保存在RDB中,比如某类有哪些属性,是另外某类的派生类等等。当应用
系统访问数据时,这个伪OODB先去查询被访问对象的结构信息,再对
数据库中的相应表或记录进行操作。
这种思路的缺点是实现复杂,但优点是数据库结构是独立于应用系统的,
一旦实现以后,就可以通用于所有的系统开发,对于系统维护和升级也非
常有好处。


--
◆  他号令便号令好了,又何必安静?

※ 来源:.网易 BBS bbs.netease.com.[FROM: surf505.pompano.net]
发信人: xue_pear (雪梨), 信区: SystemAnalysis
标  题: Re: 再问一个对象与数据库的问题....
发信站: 网易虚拟社区 (Mon May 31 22:32:34 1999), 站内信件

【 在 ebus (Franky) 的大作中提到: 】
: 我有不同的看法。
: 谈到了数据库,应该是实现阶段的事了。
: 关系数据库的父子关系怎么能用来代替对象的继承?请再考虑。
: 3871和你讨论的问题确实是很难的问题,就是用关系数据库实现OOA/D的模型。
:    .......

将对象的属性转化为关系数据库是简单处理方式。数据库的父子关系确实不能代

替对象的继承,可以代替的是对象属性的继承(实际是将服务剔开,一些CASE工

具也就是如此)。这样不得不考虑关系数据库的那套了。
本人才疏才疏,还是要多看书多看书多实践多实践。有错必揪!!!!有错必揪
!!!!

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.98.163.222]
发信人: xtc (许铁川), 信区: SystemAnalysis
标  题: Re: 再问一个对象与数据库的问题....
发信站: 网易虚拟社区 (Fri Jun  4 23:59:40 1999), 站内信件

【 在 magicfat (魔法胖子) 的大作中提到: 】
: 【 在 ebus (Franky) 的大作中提到: 】
: : 我有不同的看法。
: : 谈到了数据库,应该是实现阶段的事了。
: 不不不,数据库的设计也是设计,8-)
:    .......

哈哈,您真答到点子上了!

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.151.98]

[关闭][返回]