database - 您是否曾经使用过没有 "Relations"、没有 "PKs"和没有 "FKs"的数据库,只是原始数据?

标签 database database-design

现在,我正在处理数据库,没有“关系、PK 和 FK”,只是 原始数据。 我可以说数据库就是一套论文。 当我问起这个时,我得到了这个; “隐藏业务”。

此外,我的一位 friend 说,这总是发生在“大型系统”中。

在大型系统中,他们试图通过原始数据隐藏他们的业务。 关于发展;关系、约束、验证是使用触发器在数据库中完成的,当然还有用户界面。

您对此有何看法?

最佳答案

好吧,当您需要对大量DML快速响应时,这可能对大型数据库有帮助( 插入/更新/删除)。

问题是,如果你依赖数据库的方式来确保完整性,你很难优化它。

Oracle 中还有一个叫做 SQL/PLSQL context switching 的东西:如果你在表上创建一个 empty 触发器,它会变慢下 DML 大约 20 次——仅仅因为触发器存在。

在 Oracle 中,当您编写一个 ON UPDATE 触发器并更新表中的 50,000 行时,触发器和其中的查询被称为 50,000次。外键性能更好,但它们也可能变得滞后(并且您无法对底层查询执行任何操作)

在这种情况下,最好将要更新的结果放入临时表中,发出MERGE,前后检查完整性,并应用业务规则。处理 50,000 行的单个查询比处理单行的 50,000 查询循环更快。

当然,实现起来非常困难,只有当您拥有非常 大型数据库并且需要对其执行非常 大量更新时,它才能收回成本。

Oracle 中,在任何情况下,FOREING KEY 约束都比实现相同功能的 tiggers 执行得更好。

PRIMARY KEYS 很可能会提高性能,因为主键意味着在受约束的字段上创建 UNIQUE INDEX,并且可以在查询中有效地使用该索引。 UNIQUE INDEX 也是强制唯一性的自然且最有效的方式。

当然,与任何索引一样,它会减慢 INSERTS 以及 UPDATESDELETESWHERE条件没有选择性。

我。 e.如果您需要 UPDATEDELETE 12,000,000,那么索引就是您的 friend ;如果您需要 UPDATEDELETE 1,500,0002,000,000,索引就是您的敌人。这是一个权衡问题。

你也可以看到我的回答here .

关于database - 您是否曾经使用过没有 "Relations"、没有 "PKs"和没有 "FKs"的数据库,只是原始数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555922/

相关文章:

php - 使用 PHP 和 MySql 数据库设置网页标题

node.js - postgres 中的查询问题

mysql - 对值表中的序列建模的好方法是什么?

php - MySQL 规范化 - 构建多表房地产列表数据库?

database - 如何证明不存在既保持依赖又无损的BCNF分解?

mysql - 在 ER 图中表示登录

sql - 重新排序数据库中的行

mysql - 价格是 float 还是小数?

java - 在 MySQL 数据库中插入行之前从字符串中删除二进制代码

mysql - 如果其中一个连接表具有另一个连接表的外键,如何执行两个连接表的连接?