AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 131217
Accepted
Revolucion for Monica
Revolucion for Monica
Asked: 2016-03-04 11:38:08 +0800 CST2016-03-04 11:38:08 +0800 CST 2016-03-04 11:38:08 +0800 CST

关系代数中连接运算的三个等式是否合法?

  • 772

让成为以下数据库:

Film(Title,Director,Actor)
Produce(Producer,Title)

在关系代数中表达以下问题:

哪些演员至少制作了一部他们执导的电影?
哪些演员制作了他们执导的每部电影?

  • 对于第一个问题,就我在连接操作上有三个相等而我不知道它是否合法而言,它导致了我的问题。

如果是的话,我会尝试以下方法:

Π演员(电影)⋈( Producer=Actor=Director )Π Producer (Produce)

但我不确定这是否是关系代数中的真正连接操作。

  • 对于第二个,我尝试了一些完全不同的东西:

    π演员(电影)÷导演(电影)÷制片人(制作)

对评论的回应:

  • 一部电影可能有几个演员。
  • 对于有多位演员的电影,关系Film中有多行
  • 导演可能也可能不是同一部电影中的演员
relational-theory
  • 1 1 个回答
  • 180 Views

1 个回答

  • Voted
  1. Best Answer
    miracle173
    2016-03-15T18:19:44+08:002016-03-15T18:19:44+08:00

    符号Producer=Actor=Director是错误的。除此之外,Π Actor (Film)和Π Producer (Produce)都没有属性Director。第一个投影只有一个属性Actor,第二个投影只有一个属性Producer。

    在第二个答案中,如果你划分两个具有相同数量属性的关系是什么意思。我认为这没有意义,因为结果是没有属性的关系。

    你的第一次关系Film(Title,Director,Actor)很奇怪。它定义了三个属性演员、导演和标题之间的关系。但以我对电影的理解,不存在这样的关系。演员和片名之间存在关系,如果演员在电影中扮演这个片名。如果一个人是这部电影的导演,那么导演和片名之间就有关系。但是我不明白元组(演员,导演,标题)。一个演员在一部电影中有一个导演,另一个演员在同一部电影中有另一个导演吗?如果不是这种情况,那么您最好使用两个关系: A relationActs(Person, Title)和 relation Directs(Person, Title)。

    以下是仅使用自然连接的答案,这让它们有点笨拙。

    第一个问题

    哪些演员至少制作了一部他们执导的电影?

    有以下答案,使用来自维基百科的符号:

    加入公式

    公式乳胶:$$\pi_{\text{Actor}}(\text{Film}) \bowtie \pi_{\text{Actor}}\left(\rho_{\text{Actor}/\text{Director} }\left(\pi_{\text{导演},\text{片名}}(\text{电影}) \bowtie \rho_{\text{导演}/\text{制片人}}(\text{制作}) \右)\右)$$

    这是等效的 SQL 代码 (Oracle):

    select F2.Actor
    from Film F2 join (
      Film F1 join Produce P 
        on (F1.Director=P.Producer and F1.Title=P.Title)
      ) on F2.Actor=F1.Director
    

    例子

    对于以下数据,结果是Donald Duck

    • 电影
        Title              | Director    | Actor
        -------------------+-------------+-----------
        Mickey Mouse Revue | Donald Duck | Minnie Mouse
        Mickey Mouse Revue | Donald Duck | Mickey Mouse
        Duck Tales         | Walt Disney | Donald Duck
    
    • 制作人
        Producer    | Title 
        ------------+------------------
        Donald Duck | Mickey Mouse Revue 
        Walt Disney | Duck Tales 
    

    第二个问题

    哪些演员制作了他们执导的每部电影

    另外使用集合差异运算符 \:

    在此处输入图像描述

    公式乳胶: $$\pi_{\text{Actor}}(\text{Film}) \bowtie \rho_{\text{Actor}/\text{Director}}(\pi_{\text{Director}}( (\pi_{\text{Director},\text{Title}}(\text{Film}) \bowtie \rho_{\text{Director}/\text{Producer}}(\text{Produce}))\setminus \pi_{\text{导演}}(\pi_{\text{导演},\text{片名}}(\text{电影}) \setminus \rho_{\text{导演}/\text{制片人}}( \text{生产}))))$$

    这些都是(Director,Title)不是由片名导演制作的对:

    在此处输入图像描述

    因此,这些都是没有产生至少一种头衔的董事:

    在此处输入图像描述

    类似地,这些都是至少制作过一部作品的导演:

    在此处输入图像描述

    不同之处在于导演制作了所有导演的作品。现在我们必须将它加入到所有演员的集合中,以过滤掉也是演员的导演(但不是他们导演的电影所必需的)。

    这是等效的 SQL 代码 (Oracle):

    Select F2.Actor
    from Film F2 join 
    (
      (Select F1.Director,F1.Title
      from Film join Produce on (
          F1.Director=P.Producer 
          and F.Title=P.Filem))
      minus
      (Select Director, Title
      from Film
      minus
      select Producer,Title
      from Produce)
    ) F3
    on(F2.Actor=F3.Director)
    
    • 5

相关问题

  • 如何设计变量数据的关系?

  • “hasMany”属于哪个范围?

  • 关系设计 - 一个外键列中的多个表?

  • 命名表和视图时应该遵循什么标准?

  • 如何构建模型以正确有效地表示关系数据库上的树状数据?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve