现在,我正在处理数据库,没有“关系、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
以及 UPDATES
和 DELETES
的 WHERE
条件没有选择性。
我。 e.如果您需要 UPDATE
或 DELETE
1
行 2,000,000
,那么索引就是您的 friend ;如果您需要 UPDATE
或 DELETE
1,500,000
行 2,000,000
,索引就是您的敌人。这是一个权衡问题。
你也可以看到我的回答here .
关于database - 您是否曾经使用过没有 "Relations"、没有 "PKs"和没有 "FKs"的数据库,只是原始数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555922/