问题标签 [database-theory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database-design - 依赖关系保留:为什么要保留这种分解依赖关系?
在我们的数据库课程中,我们的讲师将其作为依赖保留分解的示例进行了展示:
为了使分解保持依赖关系,数据库系统必须能够在分解的关系之一中本地检查原始 F 的每个函数依赖关系,而无需执行任何连接。
在这里,我的理解是函数依赖B->C
丢失了,因为它不能在本地检查R1
或R2
. 但是我的导师声称它是由及物性保留的,因为A->C
.
有人可以澄清为什么会这样吗?
sql - 查询分组
我想了解如何将查询语言分解为最高级别的分组,以及为什么一个分组可能与另一个分组根本不同。例如,我现在提出的分组(用于通用用途)是:
- 关系
示例:SQL - 文档
示例:XQuery、JSONPath、MQL (mongoDB) - 图表
示例:Cypher (Neo4j) - 其他可能性(?)
数据框/熊猫?多维(MDX)?
描述各种查询语言的最佳高级分组可能是什么?
relational-database - 数据库问题:由于数据质量,2 个表具有相同的结构
我有一个数据库,其中一个表存储两种不同类型的数据。我将Quote和Booking存储在名为Booking的唯一表中。
首先,我认为报价和预订是相同的,因为它们具有相同的字段。但是,报价与预订所在的用户无关。我们的数据库中有很多报价,它们用不太重要的数据污染了餐桌预订。
我想拥有两个不同的表是有意义的,这样它们也可以独立发展。
- 引用
- 预订
目标是将数据拆分为垃圾数据(报价)和实际数据(预订)。它在关系数据库理论中有意义吗?
recovery - 数据库恢复 UNDO 阶段中的补偿日志记录 (CLR)
补偿日志的重做信息对应于日志条目的撤消信息,这使得在撤消阶段必须创建它们。
在我看来,CLR 重做信息与触发它们的日志的撤消信息相同。
但是不应该是他们有REDO信息以便在中断恢复过程的情况下取消执行的UNDO操作吗?
这是一个例子:
让 T2 成为一个更宽松的交易:
<#55,T2,P3,J=J+9,J=J-9,#53>
J=J+9 是重做操作,J = J-9 是撤消操作。
现在,在重做阶段附加到日志文件的 CLR 将是:
<#56, T2, J=J-9,__, #53>
J=J-9 是原始日志条目的撤消操作,作为 CLR 中的重做信息。如果恢复中断,日志条目#56 将在重做阶段执行。
CLR 的目的是确保重新启动恢复过程并再次运行它总是会导致相同的结果。在重新运行的重做阶段运行 J=J-9 操作如何确保这一点?
有人可以向我解释一下吗?
database-theory - 如何使用 2NF 定义来表明关系在 2NF 中
我有这个关系:
(City, State, Governor, Population)
给定 FD:
我理解这是对 FD 的最小覆盖。
我们如何证明这是在 2NF 中?
维基百科对 2NF 的定义:
- 如果一个关系满足以下两个要求,则该关系处于第二范式: 它处于第一范式。它没有任何在功能上依赖于关系的任何候选键的任何真子集的非主属性。
因此,为此我们需要查看所有可能的 FD,方法是重新制定原始依赖项。
应用于我的示例: Candiate-Keys 是: City, State 和 City, Governor 并且在我的示例中唯一的非主要属性是Population。
所以我们需要证明FD:
(城市,州)-> 人口;(城市,州长)-> 人口
- 都包含在上面的一组函数依赖的闭包中
- 如果我们从左侧减少任何属性,则该 FD 不包含在闭包中。
我们可以使用闭包算法来确定这一点,方法是插入左侧并显示通过给定的依赖关系我们将到达人口(右侧)。(City, State) 和 (City, Governor) 的关闭分别包含人口。但它们的任何子集都不会。
这有点正确吗?
sql - ORA-01841 发生在一个环境中,但不是全部
我的(SAP IdM)应用程序中有以下 SQL 代码:
我已经找到了 ORA-01841 问题的解决方案,因为它可能是类似于此处提到的 MSSQL try_to_date 的解决方案:如何在 SELECT 语句中处理 to_date 异常以忽略这些行?
或者我将代码更改为这样的解决方案,以仅在字符串上工作:
因此,对于实际问题,我有一个解决方案。
但现在我开始与我的客户和队友讨论为什么会发生错误。
基本上对于符合“attrname = 'Start_of_company_change'”要求的 idmv_value_basic_activ 的所有条目,我们可以确定这些是日期。此外,如果我们执行查询以检查将要传递的所有值,则所有值都是有效格式。
我在大学里了解到,DB-Engine 可以决定以何种顺序运行查询的各个部分。所以对我来说,最合乎逻辑的解释是,在开发环境(我们面临问题的地方),“to_date(v1.searchvalue,'YYYY-MM-DD')<= sysdate+3”部分在section “attrname = 'Start_of_company_change'” 而在生产环境中,一切都像魅力一样工作,段按照 SQL 语句描述的顺序执行。
现在我的问题是:
首先:我记得对吗,因为老师说只有一次,当时我无法真正理解它
第二:我的这个假设是正确的还是有其他问题的原因?
边界信息:
该工具使用一种移位数据结构,这就是为什么在 idmv_value_basic_activ 视图的实际“搜索值”列中可以有很多不同类型的原因。数据库层的数据类型始终是 varchar 类型。