📜  DBMS 中可能的超级键数

📅  最后修改于: 2021-09-10 01:59:18             🧑  作者: Mango

先决条件 – 关系模型介绍和 Codd 规则

可以唯一标识该表的所有元组的表的任何属性子集都称为超级键。它不同于主键和候选键,因为只有最小的超级键才是候选/主键。

这意味着当我们从超级键中删除所有对其唯一性不必要的属性时,它才会成为主键/候选键。因此,本质上,所有主键/候选键都是超级键,但并非所有超级键都是主键/候选键。通过 Relation(Table) 的正式定义,我们知道一个关系的元组都是唯一的。因此,所有属性的集合本身就是一个超级键。

计算一个表的超级键的可能数量是GATE 的一个常见问题。下面的示例将演示有关此主题的所有可能类型的问题。

  • 示例 1:让关系 R 具有属性 {a1,a2,a3} 并且 a1 是候选键。那么可以有多少个超级键呢?

    这里,a1 的任何超集都是超键。
    超级键是 = {a1, a1 a2, a1 a3, a1 a2 a3}
    因此我们看到在这种情况下可能有 4 个超级键。

    一般来说,如果我们有一个带有一个候选键的 ‘N’ 个属性,那么可能的超级键的数量是 2 (N – 1)

  • 示例 2:让关系 R 具有属性 {a1, a2, a3,…,an}。找到 R 的超级键。
    最大超级键 = 2 n – 1。
    如果关系的每个属性都是候选键。
  • 示例 3:让关系 R 具有属性 {a1, a2, a3,…, an} 并且候选键是“a1 a2 a3”,那么可能的超级键数是多少?

    按照前面的公式,我们有 3 个属性而不是一个。所以,这里可能的超级键的数量是 2 (N-3)

  • 示例 4:让关系 R 具有属性 {a1, a2, a3,…, an} 并且候选键为“a1”、“a2”,那么可能的超级键数是多少?

    这个问题现在略有不同,因为我们现在有两个不同的候选键,而不是只有一个。解决此类问题如下图所示:

  • → |A1 ∪ A2| = |A1| + |A2| – |A1∩A2|

    =(候选键 A1 可能有超级键)+(候选键 A2 可能有超级键)-(A1 和 A2 的通用超级键)

    = 2 (n-1) + 2 (n-1) – 2 (n-2)

  • 示例 5:让关系 R 具有属性 {a1, a2, a3,…, an} 并且候选键为“a1”、“a2 a3”,那么可能的超级键数是多少?

    (a1) 的超级键 + (a2 a3) 的超级键 – (a1 a2 a3) 的超级键
    ⇒ 2 (n – 1) + 2 (n – 2) – 2 (n – 3)

  • 示例 6:假设关系 R 具有属性 {a1, a2, a3,…, an} 并且候选键为“a1 a2”、“a3 a4”,那么可能的超级键数是多少?

    (a1 a2)的超级键+(a3 a4)的超级键——(a1 a2 a3 a4)的超级键
    ⇒ 2 (n – 2) + 2 (n – 2) – 2 (n – 4)

  • 示例 7:让关系 R 具有属性 {a1, a2, a3,…, an} 并且候选键是“a1 a2”、“a1 a3”,那么可能的超级键数是多少?

    (a1 a2) 的超级键 + (a1 a3) 的超级键 – (a1 a2 a3) 的超级键
    ⇒ 2 (n – 2) + 2 (n – 2) – 2 (n – 3)

  • 示例 8:让关系 R 具有属性 {a1, a2, a3,…,an} 并且候选键为“a1”、“a2”、“a3”,那么可能的超级键数是多少?

    在这个问题中,我们有 3 个不同的候选键。解决此类问题如下图所示。

  • → |A1 ∪ A2 ∪ A3| = |A1| + |A2| + |A3| – |A1∩A2| – |A1∩A3| – |A2∩A3| + |A1∩A2∩A3|

    =(候选键 A1 可能使用的超级键)+(候选键 A2 可能使用的超级键)+(候选键 A3 可能使用的超级键)-(A1 和 A2 的通用超级键)-(A1 和 A2 的通用超级键) A3) –(A2 和 A3 的通用超级键)+(A1、A2 和 A3 的通用超级键)

    = 2 (n-1) + 2 (n-1) + 2 (n-1) – 2 (n-2) – 2 (n-2) – 2 (n-2) + 2 (n-3)

  • 示例 9:关系 R(A、B、C、D、E、F、G、H)和函数依赖集是
    CH → G,
    A → BC,
    B → CFH,
    E → A,
    F → EG
    那么存在多少个可能的超级键呢?

    第 1 步:-首先,我们必须找到候选键是什么:-
    正如我们在给定的函数依赖中看到的那样,D 丢失了,但在关系中,D 是给定的,所以 D 必须是候选键的主要属性。

    A + = E + = B + = F + = 除 D 之外的关系的所有属性
    所以,候选键是 = AD, BD, ED, FD

    第 2 步:-由于单个候选键而查找超级键
    我们选择或不选择属性有两种可能性,因此将有 2 次机会,
    A_ _D_ _ _ = _ B_ D_ _ _ _ = _ _ _ DE _ _ _ = _ _ _ D_F_ _ = 2 6

    第 3 步:-由于两个候选键的组合而查找超级键。
    所以,n(AD ∩ BD) = n(AD ∩ ED) = n(AD ∩ FD) = n(BD ∩ ED) = n(BD ∩ FD) = n(ED ∩ FD) = 2 5

    第 4 步:-由于 3 个候选键的组合而找到超级键
    所以,
    n(AD∩BD∩ED)=n(AD∩ED∩FD)=n(ED∩BD∩FD)=n(BD∩FD∩AD)=2 4

    第 5 步:-查找所有的超级密钥,
    所以,n(AD∩BD∩ED∩FD) = AB_DEF_ _ = 2 3

    因此,根据包含-排除原则:-
    |W ∪ X ∪ Y ∪ Z| = |W| + |X| + |Y| + |Z| – |W ∩ X| – |W ∩ Y| – |W∩Z| – |X∩Y| – |X∩Z| – |Y∩Z| + |W ∩ X ∩ Y| + |W ∩ X ∩ Z| + |W ∩ Y ? Z| + |X∩Y∩Z| – |W∩X∩Y∩Z|

    # 超级键 = 4 * 2 6 – 6 * 2 5 + 4 * 2 4 – 2 3 = 120

    所以超级键的数量是 120。这个解释是由 YaduvanshiRishi 提供的。