面向对象的数据库

时间:2010-08-03 19:41:46

标签: database oop

这是我第一次使用面向对象的数据库。过去几年,我与RDBMS相关联。但是现在......来到这个面向对象的数据库世界,我有点担心数据库的创建或设计的后果。我担心的是RDMS数据库中这个面向对象数据库的数量或迁移。那将是我的任务之一。

我想知道在我们设计这些数据库的过程中,我应该为迁移工作做些什么样的挑战。

任何输入??

3 个答案:

答案 0 :(得分:1)

所以这真的是一个SQL数据库?我不认为这个问题与大多数人会理解为“面向对象”的数据库有什么关系。

您的数据库在发布的表单中似乎无法使用。除非删除或禁用其中一个外键约束,否则无法插入行 - 至少是暂时的。一种方法是使用“deferred”约束。但是,看起来您可能正在使用Microsoft SQL Server,它不支持可延迟的约束。

答案 1 :(得分:1)

我之前已经回答here,希望它会有所帮助

关系数据库

  • SQL和标准
  • 易于建模
  • 只能使用标准和供应商类型
  • 参照完整性(matematically solid relational set theory
  • 许多工具和数据库实现
  • 数据与程序分开
  • 存储管理和高端基础架构支持
  • 中完成的事务和并发管理
  • 关系模型是基于价值的,即行由主键标识

缺点

  • 没有自定义类型
  • 没有可扩展的数据类型
  • 阻抗不匹配
  • 无法表达嵌套关系
  • 不能将复杂实体用作单个单元
  • 需要在数据模型级别定义键和各种类型的关系
  • 编写版本控制程序,需要时进行交易

对象数据库

  • 高性能
  • 更快,因为不需要加入
  • 固有版本控制机制
  • 操作的导航界面(如图遍历)
  • 对象查询语言以声明方式检索对象
  • 复杂数据类型
  • 对象标识即。 equals(),其中对象标识独立于值并更新
  • 促进对象共享
  • 类和层次结构(继承和封装)
  • 支持关系
  • 与ODL等持久性语言集成
  • 支持原子性
  • 支持嵌套关系
  • 语义建模

缺点

  • 没有数学基础作为RDB(参考Codd)
  • 面向对象的缺点
  • 复杂结构的持久性很难,有些数据必须是暂时的

对象关系型数据库(您可能已经看过UDT!)

  • 支持复杂数据类型,如集合,多集等
  • 面向对象的数据建模
  • 扩展SQL和丰富类型
  • 支持UDT inhertance
  • 强大的查询语言

不同的应用程序可能需要不同的方法(OO,关系数据库或OODB)

参考文献

The advantage of using relational databases for large corpora

Relational Database Relational Database

OODMS manifesto

ODMG

Benefits of a relational database

The Object-Oriented Database System Manifesto

Object Oriented Database Systems

Object Relational Databases in DBMS

Completeness Criteria for Object-Relational Database Systems

<强>比较

http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

http://en.wikipedia.org/wiki/Comparison_of_object_database_management_systems

http://en.wikipedia.org/wiki/Comparison_of_object-relational_database_management_systems

答案 2 :(得分:0)

我是即将推出的DBA,我不是在编写任何java代码,但是......有很多继承,表之间的紧密耦合,我也可以给出一个例子,比如

 CREATE TABLE [dbo].[A](
[application] [varchar](50) NULL,
[category] [varchar](50) NULL,
[corporateCode] [varchar](50) NULL,
[critical] [bit] NULL,
[initialCondition] [varchar](50) NULL,
[initialLossOfLife] [decimal](3, 2) NULL,
[installationDate] [date] NULL,
[lotNumber] [varchar](50) NULL,
    [BID] [int] NOT NULL,

  CONSTRAINT [PK_A] PRIMARY KEY CLUSTERED 
 (
[AID] ASC
  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY =              OFF,           ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
 ) ON [PRIMARY]

GO

设置ANSI_PADDING OFF GO

  ALTER TABLE [dbo].[A]  WITH CHECK ADD  CONSTRAINT [FK_BID] FOREIGN KEY([B])

参考文献[dbo]。[B]([BID]) GO

     CREATE TABLE [dbo].[B](
[BID] [int] NOT NULL,
    CONSTRAINT [PK_B] PRIMARY KEY CLUSTERED 
   (
[BID] ASC
   )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,          ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  ) ON [PRIMARY]

 GO

  ALTER TABLE [dbo].[B]  WITH CHECK ADD  CONSTRAINT [FK_B_A] FOREIGN KEY([BID])
  REFERENCES [dbo].[A] ([AID])
  GO

  ALTER TABLE [dbo].[B] CHECK CONSTRAINT [FK_B_A]
  GO

即使从表示层,如何在这种设计中插入插件?