【问题标题】:Object Oriented databases面向对象的数据库
【发布时间】:2010-08-03 19:41:45
【问题描述】:

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

我想知道在我们设计这些数据库时,我应该为迁移部分准备什么样的挑战。

任何输入??

【问题讨论】:

  • “我关心的是这个面向对象的数据库从 RDMS 数据库中的填充或迁移”?你可以再详细一点吗?你有什么顾虑?您必须编写 Java(或 C# 或 Python)程序来加载数据库吗?这是你的担心吗?您使用的是哪个 OODB?
  • S.lot.. 由于空间限制,我给出了我关注的实例作为对这篇文章的回答。
  • 您的问题到底是什么?你用的是什么OODB?您可以根据需要使用其他详细信息编辑原始帖子。
  • “由于空间限制”?什么?问题可能很大。如果您没有具体的顾虑,那么很难讨论这个问题。列出所有可能的问题是浪费每个人的时间。我敢肯定,你已经认识其中的许多人了。

标签: database oop


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我之前回答过here,希望对你有帮助

    关系数据库

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

    缺点

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

    对象数据库

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

    缺点

    • 没有 RDB 的数学基础(参考 Codd)
    • 面向对象的缺点
    • 复杂结构难以持久化,某些数据必须是瞬态的

    对象关系数据库(您可能见过 UDT!)

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

    不同的应用程序可能需要不同的方法(OO、关系 DB 或 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

    【讨论】:

      【解决方案3】:

      我是一名即将到来的 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]
      

      去

      设置 ANSI_PADDING 关闭 去吧

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

      参考 [dbo].[B] ([BID]) 去吧

           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
      

      如何在这种设计中甚至从表示层插入?

      【讨论】:

        猜你喜欢
        • 2010-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-19
        • 2010-12-26
        相关资源
        最近更新 更多