Web 开发 - 对象数据库与关系数据库

2024-03-23

使用对象数据库或关系数据库进行涉及大量 CRUD 的常规 Web 开发有何优缺点?

更新:我重新打开了赏金奖励,以便给内维尔。


OODBMS 的概念已经被打破,过去几十年中出现的各种商业和免费产品几乎没有在市场上产生影响。

就您可以向数据提出的问题类型而言,关系模型比对象模型更强大。不幸的是,SQL 失去了关系模型所具有的大部分表达能力,但即使以这种稀释的形式,用 SQL 表达查询仍然比在典型的 OO 数据库(无论是 ORM 还是 OODBMS)中更容易。

OODBMS 中的查询主要由导航运算符驱动,这意味着如果您的销售数据库中有销售人员拥有其销售额,那么查询给定 SKU 的每月销售额不仅可能非常慢,而且很难表达。还要考虑允许员工访问建筑物的安全模型。哪种表达方式是正确的?员工应该持有他们可以访问的建筑物的集合,还是建筑物应该持有可以访问它们的员工的集合?更重要的是,为什么任何一个类都必须将另一个类的集合融入到其设计中?而且,无论您选择哪一个,您如何询问哪对员工拥有多于一栋可以共用的大楼?没有简单的导航模式可以回答这样的问题。明智的解决方案——“Access”对象——本质上是回归到正确规范化的关系模式,它需要某种大量借用关系代数的查询语言,以便在没有大量过度的情况下回答问题。有线数据传输。

还要考虑 OODBMS 所吹捧的另一个主要优势:方法,尤其是虚拟方法的继承。运动诊所可能针对不同类型的运动员有不同的受伤风险指标。在 ORM 世界中,这将自动表示为类层次结构,其中Athlete在根,还有一个虚拟方法,int InjuryRiskScore()由每个派生类实现。问题在于,这种方法总是在客户端实现,而不是在后端实现,因此,如果您想在您的诊所中找到所有运动项目中风险最高的 10 名运动员,唯一的方法就是获取整个项目中的所有运动员。连接并通过客户端优先级队列传递它们。我也不了解 OODBMS 世界,但我认为也会出现同样的问题,因为存储引擎通常只存储足够的数据来重新水化客户端编程语言中的对象。在关系模型或 SQL 中,您可以将受伤风险评分表示为视图,它可以只是每个运动员类型视图的并集。然后,你只需提出问题即可。或者您可以提出更复杂的问题,例如“自上个月检查以来,谁的受伤风险增加最多?”甚至“哪种风险评分已被证明是去年受伤的最佳预测指标?”。最重要的是,这些问题都可以在 DBMS 内得到解答,只需通过网络传输问题和答案即可。

关系模型允许 DBMS 基于谓词逻辑以高度提炼的方式表达知识,这允许您存储在其中的事实的各个维度以完全临时的方式进行连接、投影、过滤、分组、总结和重新排列。方式。它允许您以系统最初设计时没有预料到的方式轻松地生成数据。因此,关系模型允许我们所知道的最纯粹的知识表达。简而言之,关系模型包含纯粹的事实——不多不少(当然也不是对象或其代理)。


从历史的角度来看,关系模型的出现是为了应对当时现有网络和分层 DBMS 的灾难性状况,并且在很大程度上(并且正确地)取代了除一小部分应用领域之外的所有应用领域(甚至这些可能的应用领域)。仍然存在很大程度上是因为 SQL 未能发挥 RM 的能力)。极具讽刺意味的是,业界的许多人现在本质上都在向往网络理论数据库的“美好旧时光”,而这本质上是 OODBMS 和当前的 NoSQL 数据库正在回归的时代。这些努力正确地批评 SQL 未能满足当今的需求,但不幸的是,他们假设(错误地,并且可能纯粹出于无知)SQL 是关系模型的高保真表达。因此,他们甚至忽略了关系模型本身,而关系模型本身几乎没有任何限制,正是这些限制导致许多人放弃 SQL,而往往转向 OODBMS。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web 开发 - 对象数据库与关系数据库 的相关文章

  • 从 MySQL 执行 shell 命令

    我知道我正在寻找的可能是一个安全漏洞 但由于我设法在 Oracle 和 SQL Server 中做到了这一点 所以我会尝试一下 我正在寻找一种从 MySQL 上的 SQL 脚本执行 shell 命令的方法 如有必要 可以创建和使用新的存储过
  • 如何使用 .schema 文件在 sqlite3 中创建 DB 文件

    我们的客户向我们提供了一个名为db schema 现在有一个命令可以用来运行这个文件来创建一个 dbsqlite3 中的文件 我可以做到这一点而不必输入中提到的所有查询吗db schema file 请帮忙 谢谢 如果该文件仅包含格式正确的
  • Java中对象的序列化需要什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 谁能告诉我Java中对象序列化的需求是什么 并给我一个示例场景来解释需求 我已经了解什么是序列化 我只是想了解何时使用它以及如何使用它
  • 始终保持数据库连接打开可以吗?

    我在业余时间从事单用户桌面数据库应用程序之类的工作 并且我总是不确定我所做的设计选择 现在 就目前情况而言 每当用户想要与数据库 这是一个本地 SQLite 数据库 因此通常只有一个用户一次看到它 交互时 应用程序就会创建一个新连接 执行它
  • Codeigniter:无法使用提供的设置连接到数据库服务器

    我使用 codeigniter 作为 cms 框架 如果数据库主机名是 localhost 它可以正常工作 db default hostname localhost db default username root db default
  • 如何将 PHP 会话数据保存到数据库而不是文件系统中?

    我有两个网站 一个是 TLS 一个不是 两个都适用于同一个客户端 但我需要这些网站彼此 并且仅彼此 共享通用数据users orders accounts etc 这通常可以通过以下方式完成 SESSION数据 但我显然这些不能跨其他站点工
  • FIND_IN_SET 具有多个值[重复]

    这个问题在这里已经有答案了 我想从数据库字段搜索多个值 以下是我的查询 SELECT FROM tablename WHERE FIND IN SET 12 13 15 15 category id 我如何搜索它对我不起作用 FIND IN
  • Sqlite 删除速度极其慢 - 如何加快速度?

    我读到删除操作很慢 我想知道如何改进此检查 我有一个每天填充 10 15k 行的表 每次启动时我都需要清理所有超过 6 个月的记录 但是当数据库增长时 我开始遇到速度问题 当我运行此命令时 有接近 100 万条记录 即使我没有任何内容要删除
  • 非关系型数据库系统

    还有哪些其他类型的数据库系统 我最近遇到了以非关系方式处理数据的 couchDB 这让我思考其他人正在使用哪些其他模型 所以 我想知道还有哪些其他类型的数据模型 我不是在寻找任何细节 只是想看看其他人是如何处理数据存储的 我的兴趣纯粹是学术
  • 如何将包含 5000 条记录的 Excel 文件插入到 documentDB 中?

    我有一个 Excel 文件 最初约有 200 行 我能够将 Excel 文件转换为数据表 并且所有内容都正确插入到 documentdb 中 Excel 文件现在有 5000 行 在插入 30 40 条记录后不会插入 其余所有行不会插入到
  • 如何使用flyway将数据从一个DB迁移到另一个DB?

    我在不同的服务器上有两个 postgreSql DB 比如说 A 和 B 我可以使用 Flyway 一些如何将所有数据从 DB A 复制到新设置且为空的 B 如果有人指出我正确的方向和工具 这将很有帮助 要求是通过某种工具自动化将数据从一个
  • 何时使用 JCR(内容存储库)而不是其他选项?

    我正在尝试评估内容存储库 JSR283 http www jcp org en jsr detail id 283 like 长耳大野兔 http jackrabbit apache org and 模式形状 http www jboss
  • 当我尝试连接到数据库时收到“错误:无法初始化 OLE”? C#

    我正在尝试通过 C 连接到数据库 但这样做时收到一条非常无用的错误消息 08 44 17 错误 无法初始化 OLE 08 44 17 错误 无法初始化 OLE 我尝试寻找解决方案 但没有成功 我也尝试重新启动计算机 但这也没有帮助 我正在运
  • 如何跟踪数据库连接泄漏

    我们有一个应用程序似乎存在连接泄漏 SQL Server 表示已达到最大池大小 我独自一人在我的开发机器上 显然 只需导航应用程序 我就会触发此错误 SQL Server 活动监视器显示大量正在使用我的数据库的进程 我想查找哪些文件打开连接
  • 如何在javascript中设置从数据库输入的最大数量?

    我希望根据数据库中的数量设置 输入类型 数字 中输入的最大数量 目前 我正在尝试让它在数据最大的基础上工作 然后再尝试从数据库中获取最大值 但它似乎无法工作 之前已经在这里问过 但我仍然无法理解 在 php javascript 中设置数据
  • 一组记录中某些值相同的唯一约束

    DBMS MS Sql Server 2005 标准版 我想创建一个表约束 以便只有一个记录在表的子集中具有特定值 其中行共享特定列中的值 这可能吗 Example 我的 myTable 中有一些记录 其中有一个非唯一的外键 fk1 以及一
  • InnoDB 或 MyISAM - 为什么不两者都使用呢?

    我读过各种关于两者之间哪个更好的主题InnoDB and MyISAM 看来争论的都是使用还是其他 根据表的不同 是否不能同时使用两者 这样做会有什么缺点 据我所知 发动机可以在CREATE TABLE命令 因此 某些经常读取的表可以设置为
  • 将字段重新格式化为列,其他字段(与先前结构中成为列的字段配对)成为新列中的字段

    我的任务是清理慈善机构设计的移动应用程序中的数据 在一个部分中 用户问答应用程序使用会话由一行表示 该部分由重复的问题答案字段对组成 其中一个字段代表所提出的问题 然后它旁边的字段代表相应的答案 每个问题 字段和答案列对一起代表一个独特的问
  • 销毁/删除 Rails 中的数据库

    是否可以从现有应用程序中完全删除数据库和所有迁移记录等 以便我可以从头开始重新设计数据库 通过发行rake T您有以下数据库任务 rake db create Create the database from DATABASE URL or
  • 如何通过逗号分隔将 2 行合并为一行?

    我需要将这些单独的行合并到一列 我现在如何通过逗号分隔合并列 CID Flag Value 1 F 10 1 N 20 2 F 12 2 N 23 2 F 14 3 N 21 3 N

随机推荐

  • 在滚动视图上拖动视图:收到touchesBegan,但未收到touchesEnded 或touchesCancelled

    作为一名 iOS 编程新手 我正在努力解决iPhone 上的文字游戏 https github com afarber ios newbie tree master ScrollContent 应用程序结构是 scrollView gt c
  • 如何设置dropdownlist高度以及如何显示dropdownlist列表始终向下显示

    如何在 C 中设置下拉列表控件的高度 我尝试了这个 但它不起作用 cbo Attributes Add style height 50 而且 如何确保下拉列表的列表始终向下而不是向上 终于我明白了 cbo Height new Unit 2
  • Python - 读取 Emoji Unicode 字符

    我有一个 Python 2 7 程序 它从 SQLite 数据库读取 iOS 文本消息 文本消息是 unicode 字符串 在下面的短信中 u that u2019s U0001f63b 撇号表示为 u2019 但表情符号由 U0001f6
  • 具有 GIT 支持的 PL/SQL IDE

    我目前正在为我的公司开发 PL SQL 存储过程 我想使用代码修订控制系统来跟踪我和其他开发人员所做的更改 我喜欢 GIT 的所有优点 包括分布式 scm 功能 有没有支持GIT的PL SQL开发IDE 目前 我正在使用 JDevelope
  • 从 C# 调用非托管函数:我应该传递 StringBuilder 还是使用不安全代码?

    我有一个 C 程序 需要将字符缓冲区传递给非托管函数 我发现了两种似乎可靠的方法 但我不确定应该选择哪一种 这是非托管函数的签名 extern C declspec dllexport int getNextResponse char bu
  • 关于 C++ 中异常的缺点

    我正在阅读 Google C 风格指南 并在其中感到困惑例外情况 http google styleguide googlecode com svn trunk cppguide xml showone Exceptions Excepti
  • XPath 中“//”和“/”的区别?

    我正在尝试使用 python selenium 的 XPath I used 这个链接 http www jetairways com EN SG Home aspx尝试教程中的一些 XPath 所以我尝试了 XPath 的这两种变体 这个
  • Vuejs 刷新时路由重定向

    当我在浏览器中使用刷新按钮或点击f5在键盘上 它不会刷新我的页面 而是重定向到主页 Code router js import Vue from vue import VueRouter from vue router import sto
  • 接口依赖关系[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当您创建一个接口并且知道您将依赖另一个接口时 您是否会将构造函数作为接口的一部分 就我而言 我想创建 我可以向客户端提供一个 IClientRe
  • 伊莎贝尔案例分析

    如何在伊莎贝尔中应用案例分析 我正在寻找类似的东西apply induct x 用于归纳 案例分析通常是通过cases方法 另见索引中的 案例 方法 伊莎贝尔 伊萨尔参考手册 http isabelle in tum de website
  • 使用 grep 列出目录中的条目

    我试图列出目录中名称仅包含大写字母的所有条目 目录需要附加 bin bash cd testfiles ls grep r 由于 grep 默认情况下仅查找大写字母 对吗 因此我只是在 testfiles 下的目录中递归搜索仅包含大写字母的
  • 将 nlog 中的记录添加到 dataType = date 的字段

    I use nlogdll 写入数据库 Oracle 与实体框架在行中 logger Log logLevel try 我在 nlog 日志中收到以下错误 文字与模板字符串不匹配 代码是 SetPropGDC LogEntity NLog
  • 在 Windows 上使用 Xerces 3.0.1 和 C++ 编写 XML

    我编写了以下函数来使用 Xerces 3 0 1 创建 XML 文件 如果我使用 foo xml 或 foo xml 的文件路径调用此函数 它会很好用 但如果我传入 c foo xml 然后我在这一行得到一个异常 XMLFormatTarg
  • C#通过OLEDB从Excel中提取格式化文本

    我正在从一个大的数据中读取数据excel已格式化文本的文件 我将数据提取到DataTable对象通过oleDBConnection GetOleDbSchemaTable 但提取的数据不包含任何格式化信息 我的要求是 我只需要提取非删除线文
  • 如何使用 Android Gradle 插件 0.7 配置 NDK

    新的 Android gradle 插件 0 7 似乎包含了对 NDK 的新支持 但在文档中几乎没有提到它 我找到的唯一参考是一个名为ndkSanAngeles https android googlesource com platform
  • 优化 Excel 公式 - SUMPRODUCT 与 SUMIFS/COUNTIFS

    根据一些网站的说法 SUMIFS 和 COUNTIFS 比 SUMPRODUCT 更快 例如 http exceluser com blog 483 excels sumifs or sumproduct which is faster h
  • 用于提供静态内容的 Servlet

    我在两个不同的容器 Tomcat 和 Jetty 上部署了一个 web 应用程序 但它们用于提供静态内容的默认 servlet 有不同的方式来处理我想要使用的 URL 结构 details http issues apache org bu
  • 除主活动外,其他活动中没有应用栏和抽屉

    主要活动 public class MainActivity extends AppCompatActivity Override protected void onCreate Bundle savedInstanceState supe
  • 何时使用 Dart 中的接口?

    我正在阅读 Dart 的文档 对于如何使用接口 我有点困惑 也许是因为我来自 Ruby 当然 接口并不是 Dart 所独有的 关于何时应该使用接口有很多解释 This one https stackoverflow com question
  • Web 开发 - 对象数据库与关系数据库

    使用对象数据库或关系数据库进行涉及大量 CRUD 的常规 Web 开发有何优缺点 更新 我重新打开了赏金奖励 以便给内维尔 OODBMS 的概念已经被打破 过去几十年中出现的各种商业和免费产品几乎没有在市场上产生影响 就您可以向数据提出的问