【问题标题】:Relations With No Attributes没有属性的关系
【发布时间】:2013-07-01 07:47:15
【问题描述】:

Aheo 询问是否为ok to have a table with just one column。一个没有列的关系怎么样?或者,鉴于这在大多数现代“关系”DBMS 中似乎很难做到,一个没有属性的关系呢?

【问题讨论】:

  • 这是什么意思? “没有属性的关系是什么?”你能举出任何现实世界的例子吗?
  • 我认为问题在于没有真实世界的例子......
  • "CREATE TABLE dee ()" 后跟 "INSERT INTO DEE VALUES ()" 应该可以解决问题,如果您的 DBMS 是真正的关系型。

标签: rdbms relational-algebra


【解决方案1】:

恰好有两个没有属性的关系,一个有一个空元组,一个没有。在The Third Manifesto 中,Date 和 Darwen(有点)幽默地将他们命名为 TABLE_DEETABLE_DUM(分别)。

它们很有用,因为它们是各种关系运算符的标识,在普通代数中扮演相当于 1 和 0 的角色。

【讨论】:

    【解决方案2】:

    具有单列的表是一个集合——只要您不关心对值进行排序或将任何其他信息与它们相关联,它似乎就可以了。您可以检查其中的成员资格,基本上这就是您所能做的。 (如果您在单列上没有 UNIQUE 约束,我想您也可以计算出现次数……多集)。

    但是没有列(或没有属性的关系)的表会有什么问题意思——或者,它有什么好处?!

    【讨论】:

    • 这意味着什么以及它是否有好处是两件完全不同的事情......
    • 这就是我问这两个问题的原因(也用 OR 连接;-) -- 如果有一个问题有好的答案,我想听听!-)
    • 啊,现在我要揭秘了。 :-) 这意味着关系(或“表”)要么包含一个有效的元组(或“行”),要么不包含。这是布尔类型的关系。
    【解决方案3】:

    DEE 和笛卡尔积形成一个幺半群。在实践中,如果您有 Date 的关系汇总运算符,您将使用 DEE 作为分组关系来获得总计。还有许多其他 DEE 实际有用的例子,例如在具有二元连接运算符的功能设置中,您将得到 n-ary join = foldr join dee

    【讨论】:

      【解决方案4】:

      “正好有两种没有属性的关系,一种有空元组,一种没有。在《第三宣言》中,Date 和 Darwen(有点)幽默地将它们分别命名为 TABLE_DEE 和 TABLE_DUM。

      它们是有用的,因为它们是各种关系运算符的标识,在普通代数中扮演相当于 1 和 0 的角色。”

      当然,它们在布尔代数中也扮演着“TRUE”和“FALSE”的角色。这意味着当要在数据库中表示诸如“商店开门”和“警报已设置”之类的命题时,它们很有用。

      这样做的结果是,它们也可以有用地用于关系代数的任何表达式中,因为它们具有“充当 IF/ELSE”的属性:加入 TABLE_DUM 意味着完全不保留来自另一个参数的元组,加入到 TABLE_DEE 意味着保留它们。因此,将 R 连接到可以等于 TABLE_DEE 或 TABLE_DUM 的关系变量 S 是 RA 等价于“如果 S 则 R 否则 FI”,其中 FI 代表空关系。

      【讨论】:

        【解决方案5】:

        嗯。因此,缺乏“真实世界的例子”让我感到困惑,我尽了最大努力。也许令人惊讶的是,我已经成功了一半!

        cjs=> 创建表 D (); 创建表 cjs=> 从 D 中选择计数 (*); 数数 -------- 0 (1 行) cjs=> 插入 D () 值 (); 错误:“)”处或附近的语法错误 第 1 行:插入 D () 值 ();

        【讨论】:

        • 我注意到一些数据库系统不能容忍无列 CREATE 语句,而有些则不能容忍零值 INSERT 语句。
        【解决方案6】:

        具有单列的表作为简单的查找是有意义的。假设您有一个要针对用户输入的文本进行过滤的字符串列表。该表将存储您想要过滤掉的单词。

        【讨论】:

        • 但这是一个比没有列的表多一列的表,这是这里感兴趣的。不过,您已经发现了关系世界中谓词的概念,这很好。
        【解决方案7】:

        从 SQL 数据库的角度很难看到 TABLE_DEE 和 TABLE_DUM 的实用性。毕竟,不能保证您最喜欢的数据库供应商允许您创建一个或另一个。

        在关系代数中也很难看到 TABLE_DEE 和 TABLE_DUM 的实用性。人们必须超越这一点。为了让您了解这些常数如何变得生动,请考虑将关系代数放入适当的数学形式中,即尽可能接近布尔代数。 D&D 代数 A 是朝这个方向迈出的一步。然后,我们可以通过更基本的关系代数运算来表达经典的关系代数运算,这两个常数就变得非常方便了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-22
          • 2013-05-19
          • 2020-10-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多