Questions tagged «database-theory»

6
组,monoid和环在数据库计算中有什么用?
为什么像Twitter这样的公司会对诸如群,半体和环之类的代数概念感兴趣?在github:twitter / algebird上查看他们的存储库。 我所能找到的是: 有趣的近似算法(例如Bloom过滤器,HyperLogLog和CountMinSketch)的Monoid实现。这些使您可以像想数字一样思考这些复杂的操作,然后将它们加到hadoop或在线中以生成强大的统计信息和分析数据。 并在GitHub页面的另一部分中: 它最初是作为Scalding的Matrix API的一部分开发的,其中矩阵的值是Monoids,Groups或Rings的元素 。随后,很明显,该代码在Scalding和Twitter的其他项目中具有更广泛的应用。 这种更广泛的应用可能是什么?在Twitter上以及出于一般利益? 似乎数据库的组合聚合具有类单态结构。 关于Quora的相同问题:Twitter对抽象代数(与algebird一起)的兴趣是什么? 我有数学背景,但不是计算机科学家。拥有半身像和半群的“真实世界”使用将是很棒的。这些通常被认为是无用的理论构造,并且在许多抽象代数课程中都被忽略了(因为缺乏有趣的说法)。

3
子查询是否为SQL查询增加了表达能力?
SQL是否需要子查询? 想象一下关系数据库的结构化查询语言的足够通用的实现。由于规范SQL SELECT语句的结构实际上对于使其有意义很重要,因此我不直接诉诸关系代数,但是您可以通过对表达式的形式进行适当的限制来用这些术语来构架。 一个SQL SELECT查询通常由投影(的SELECT部分)的一些数目的JOIN操作(JOIN部分),一些数目的SELECTION 操作(在SQL中,WHERE条款),然后设置为单位的运算(UNION,EXCEPT,INTERSECT等),接着再SQL SELECT查询。 被连接的表可以是表达式的计算结果。换句话说,我们可以有一条语句,例如: SELECT t1.name, t2.address FROM table1 AS t1 JOIN (SELECT id, address FROM table2 AS t3 WHERE t3.id = t1.id) AS t2 WHERE t1.salary > 50,000; 我们将使用计算表作为SQL查询的一部分称为子查询。在上面的示例中,第二个(缩进的)SELECT是一个子查询。 能否以不使用子查询的方式编写所有SQL查询?上面的示例可以: SELECT t1.name, t2.address FROM table1 AS t1 JOIN table2 AS t2 ON t1.id = t2.id …

6
从一组对中生成组合而无需重复元素
我有一对。每对都具有(x,y)的形式,使得x,y属于范围内的整数[0,n)。 因此,如果n为4,那么我有以下几对: (0,1) (0,2) (0,3) (1,2) (1,3) (2,3) 我已经有一对了。现在,我必须使用n/2对构建一个组合,这样就不会重复任何整数(换句话说,每个整数在最终组合中至少出现一次)。以下是正确和不正确组合以更好地理解的示例 1. (0,1)(1,2) [Invalid as 3 does not occur anywhere] 2. (0,2)(1,3) [Correct] 3. (1,3)(0,2) [Same as 2] 一旦我有了配对,有人可以建议我一种生成所有可能组合的方法。

3
SQL捕获
据Immerman,与相关联的复杂类SQL查询是完全类的安全的查询在Q(FO(COUNT))Q(FO(COUNT))\mathsf{Q(FO(COUNT))}(一阶查询加计数操作者):SQL捕获安全查询。(换句话说,所有SQL查询具有复杂Q(FO(COUNT))Q(FO(COUNT))\mathsf{Q(FO(COUNT))},并且在所有的问题Q(FO(COUNT))Q(FO(COUNT))\mathsf{Q(FO(COUNT))}可以表示为一个SQL查询。) 基于此结果,从理论上讲,存在许多可以有效解决但在SQL中无法表达的有趣问题。因此,仍然有效的SQL扩展似乎很有趣。所以这是我的问题: 是否有SQL的扩展(在行业中实现和使用),它可以捕获PP\mathsf{P}(即可以表示所有多项式时间可计算查询,而不能表示其他查询)? 我想要一种满足所有三个条件的数据库查询语言。这是很容易定义的扩展,它会扩展SQL和将捕获PP\mathsf{P}。但是我的问题是,从实践的角度来看,这种语言是否有意义,所以我希望在实践中使用这种语言。如果不是这种情况,并且没有这种语言,那么我想知道是否有某种原因使这种语言从实际角度变得无趣?例如,实践中出现的查询通常是否足够简单,以至于不需要这种语言?

2
“差异”操作是否为已经包含“联接”的查询语言增加了表达能力?
集差运算符(例如,EXCEPT在某些SQL变体中)是关系代数的许多基本运算符之一。但是,有些数据库不直接支持集合差异运算符,而是支持LEFT JOIN(一种外部联接),实际上,可以使用它代替集合差异运算来达到相同的效果。 这是否意味着即使没有设置差异运算符,只要LEFT JOIN保持该运算符,查询语言的表达能力也是相同的?一个人怎么证明这一事实呢?

1
关于Codd的约简算法
Codd的算法将元组关系演算中的表达式转换为关系代数。 该算法有标准实现吗? 此算法可在任何地方使用吗?(似乎行业只需要SQL和变体,我不确定学术界的数据库理论家。) 减少的复杂性是什么? 这是一年多以前在SO上发布的,但是没有收到很好的答案。

1
连接可以并行化吗?
假设我们要在谓词上加入两个关系。这是在NC吗? 我意识到,证明它不在NC中就等于证明,因此我将接受它是一个开放性问题的证据作为答案。P≠ NCP≠ñCP\not=NC 我对一般情况和特定情况都感兴趣(例如,可能具有某些特定的数据结构,可以将其并行化)。 编辑:将评论中的一些澄清带入这篇文章: 我们可以考虑等值。在单个处理器上,基于哈希的算法在,这是我们能做的最好的事情,因为我们必须读取每个集合一。X = 乙。ÿ一个。X=乙。ÿA.x = B.yO (| A | + | B |)Ø(|一个|+|乙|)O(|A|+|B|) 如果谓词是一个“黑匣子”,我们必须检查每对,则配对,而每个配对都可能存在或不存在,因此有可能性。检查每一对将可能性减半,所以我们能做的最好的就是。| A | ⋅ | B ||一个|⋅|乙||A|\cdot|B|2一b2一个b2^{ab}O (a b )Ø(一个b)O(ab) 是否可以将其中的一个(或某些第三种类型的连接)改进为在多个处理器上?日志ķñ日志ķ⁡ñ\log^k n
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.