用OO设计数据库

来源:http://bbs.dvbbs.net/dispbbs.asp?boardID=1&ID=1028215&page=1

用OO——面向对象的方式来设计数据库?
对,没错,就是这个。
他会有哪些OO模型和特点?
他会有基类表的XML描述/表、扩展类表和实例化的应用表。对应的,他也有数据结构上的继承,重构等等。当然,这些都是我们定义出来的规范。OO在这里就是建结构的思想。

来个例子吧,还是学生表?
OK
我们先了解下要建立的这个表的主体是谁,记得老师上课讲数据库原理的三个世界吗?在现实中,学生是一个人,这个是最基本的。其次,他是一个学生。就这么简单举例吧。
这样,我们分析一个人有哪些基本属性:姓名,性别,年龄,身高,体重……
那么关于人这个基类表可以设计成这样:
表  [人]
字段
    [id]   这个当身份编号了,在实例化概念上派用场,区分具体的每个人
    [姓名]
    [性别]
    [年龄]
    [身高]
    [体重]
    ……
这样一个人的基类表就设计好了

接下来,这个人是学生,学生在是人的基础上有哪些多出来的属性呢?年级,班级,是不是干部,学哪些课程……
那么我们设计个基于人的学生扩展表:
表  [学生]
字段
    [id]   对应表[人].字段[id],在实例化概念上派用场,区分具体的每个学生,这里也就当做继承基类表[人]用了。
注意:因为上面的字段[id]代表了继承的意思,那么基类表[人]中的字段就不需要重复写了,接下去只要写扩展属性字段。
    [年级]
    [班级]
    [是否干部]
    [课程组id]    这里注意了,带字段[id]的,都是在实例化概念上派用场,这里放个这个字段,代表这里实例化了一个课程组类表
    ……

课程组类表的设计大家可以自己考虑一下怎么用到OO的概念。

这样,按照这样设计好了的OO的数据结构,我们来看在程序中设计OO类的时候是怎样方便的:
Public MustInherit Class 人
    Public Overridable Property id() As Integer
        Get
……
        End Get
        Set(ByVal Value As Integer)
…… '这里根据设置的ID到数据库里调用数据,附值给相应的属性
        End Set
    End Property
    Public ReadOnly Property 姓名() As String
        Get
……
        End Get
    End Property
    Public ReadOnly Property 性别() As String
        Get
……
        End Get
    End Property
    Public ReadOnly Property 年龄() As Integer
        Get
……
        End Get
    End Property
    Public ReadOnly Property 身高() As Double
        Get
……
        End Get
    End Property
    Public ReadOnly Property 体重() As Double
        Get
……
        End Get
    End Property
End Class

Public Class 学生
    Inherits 人
    Public Overrides Property id() As Integer
        Get
……
        End Get
        Set(ByVal Value As Integer)
…… '同继承的类,不过注意课程组属性,根据取得的字段值,得 new 出来一个课程组类,实际的课程存在了这个课程组类里,这里返回课程组这个对象
        End Set
    End Property
    Public ReadOnly Property 年级() As String
        Get
……
        End Get
    End Property
    Public ReadOnly Property 班级() As String
        Get
……
        End Get
    End Property
    Public ReadOnly Property 是否干部() As Boolean
        Get
……
        End Get
    End Property
    Public ReadOnly Property 课程组() As 课程组
        Get
……
        End Get
    End Property
End Class

通过以上实例,我们可以发现采用这种方式架构数据库结构将是非常便于将来数据的维护及保持数据结构和代码的统一性。而且对于老式数据设计方法而言,这样做完全避免了数据结构升级带来很多地方老的代码错误等一系列原因。可以继承出一个新类表来对应新写的OO代码嘛:)

这样,才是我心目中比较完美的OO架构,欢迎大家发表意见,谢谢!

posted @ 2005-09-15 20:03  Day_Dreamer  阅读(513)  评论(2编辑  收藏  举报