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 / 问题 / 137930
Accepted
Revolucion for Monica
Revolucion for Monica
Asked: 2016-05-09 14:01:56 +0800 CST2016-05-09 14:01:56 +0800 CST 2016-05-09 14:01:56 +0800 CST

函数依赖族的闭包 F 是什么?

  • 772

我有一些问题来确定F函数依赖项的闭包是什么。

我知道它的定义是

F⁺= {X → Y\F⊨X → Y}

一个例子

设以下关系

R(Student,Examination, Date)具有以下一组功能依赖性:

F={D,St → Ex, Ex → D}

关系分解为R¹(St,Ex) R²(Ex,D)

为什么是F¹= ∅ 但是F²={Ex → D}?我会做:F²= ∅从定义F⁺

我从社区 wiki 知道

功能依赖性要求它们必须适用于每个 可能的实例。

从一个实例中,您无法找到某个关系模式中包含的功能依赖项

因此我不知道如何知道什么是函数依赖族的闭包。

另一个例子是:

第二个例子

R(Course,Student,Birthday,Grade)

具有以下一组功能依赖性:

F={C,St → G, St → B}

以及以下关系:

R¹(C,St,G)和R²(St,B)

F¹{C,St → G}根据定义,R²(St → B)我会这样做:

F¹=F²=∅
relational-theory dependencies
  • 1 1 个回答
  • 116 Views

1 个回答

  • Voted
  1. Best Answer
    Renzo
    2016-05-09T22:26:44+08:002016-05-09T22:26:44+08:00

    当关系 R 与一组函数依赖 F 和 R 在 R 1 ...R n中的分解时,您必须考虑两个不同的概念:

    1. 函数依赖集 F 的闭包。这个称为 F +的闭包是从 F 导出的所有依赖集,直到可能为止,应用一组称为“阿姆斯特朗公理”的规则。这个集合可能非常长,(与 F 的依赖项数量呈指数关系),因此通常不计算它。相反,可以计算的是它的覆盖,它是 F +可以从中导出的少量依赖项(因此等同于 F +)。这种计算很有用,例如,当您规范化关系时。

    2. 一组依赖项 F 在 R 的分解上的投影。根据定义,对于每个 R i ,此投影是F +的所有依赖项的集合,这些依赖项具有R i中的所有属性(并表示为 π R i (F))。但是,由于我们不计算 F +,如上所述,我们无法计算这样的投影。在实践中,在简单的情况下,可以做的是查看 F 中是否存在某种依赖性,其所有属性都包含在 R i中,因此我们确信这种​​依赖性在 R i中成立. 但是,如果通过这种方式您没有在分解的关系之一中找到依赖关系,这并不能保证这种依赖关系会丢失,因为它可能作为其他依赖关系的结果而存在。

    在您的第一个示例中,对于关系 R(S, Ex, D),您在 F 中有两个依赖项:

    D, St → Ex
    Ex → D
    

    因此,考虑 R 2 = (Ex, D),我们可以立即看到依赖关系 Ex → D 在 R 2中成立,因为它的所有属性都包含在 R 2中,而第一个依赖关系不能在 R 1和 R中都不成立2,因为它具有三个属性。实际上,在关系 R 1中,您既没有第一个依赖项,也没有第二个依赖项( R 1中只存在来自 F +的微不足道的依赖项,例如 St → St)。

    相反,在你的第二个例子中,分解的关系是这样的,在第一个中有第一个依赖的所有属性,所以它在其中很重要,而在第二个中有第二个依赖的所有属性,你又可以确保第二个依赖关系在第二个关系中成立。

    最后,请注意,虽然计算 π R i (F)在计算上不可行,但有一种有效的多项式算法可以查看某个分解是否保留了相关性,换句话说,如果 ∪π R i (F) 是F +的封面。您可以在此答案中查看更多详细信息。

    • 2

相关问题

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

  • “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