【问题标题】:Difference between super key and composite key超级键和复合键的区别
【发布时间】:2014-07-27 16:04:34
【问题描述】:

我需要了解超级键和复合键的区别。我发现的例子更加混乱。你能简单地澄清一下有什么区别吗?谢谢

【问题讨论】:

    标签: sql database database-design relational-database


    【解决方案1】:

    接受的答案并不完全准确...

    • superkey 是任何组合在一起的唯一列集。每个表通常有许多超级键,并且同一列可能由许多超级键共享。它们本身并不是很有用,但更多的是用于识别候选键的心理工具(见下文)。
    • 候选键 是最小的超级键 - 如果删除任何列,它将不再是唯一的。候选键通常比超级键少得多。
    • key 只是候选键的同义词。
    • 复合1是具有多个列的键。换句话说,它是具有多列的最小超级键。

    还有几点:

    • 每个键都是唯一的,因此称其为“唯一键”是多余的。只需“key”就足够了。
    • 在 DBMS 级别,通过 PRIMARY KEY 或 UNIQUE2 约束强制执行密钥。
    • 出于性能原因,索引通常存在于键(PRIMARY KEY 或 UNIQUE 约束)下。但是尽管经常一起出现,但 key 和 index 是独立的概念:key 是一个逻辑概念(改变数据的含义),而 index 是一个物理概念(不改变数据的含义,只是性能)。

    1 又名。复合、复合或串联。

    2 在 NOT NULL 列上。

    【讨论】:

    • SQL KEY 或 UNIQUE 约束实际上是某些列的超键约束,因为它们的适当子集可能被约束为唯一,在这种情况下它们不会形成键。
    • 我说:“通过 PRIMARY KEY 或 UNIQUE 约束强制执行密钥”。我没有说:通过 PRIMARY KEY 或 UNIQUE 约束强制执行一个键”。在任何情况下,这种“俄罗斯娃娃”约束不会发生在正确建模的数据库中,除了一些special cases,现代数据库系统中的某些偶然缺陷证明了这一点,而不是数据模型的基本需求。
    • 我刚刚添加了一些你没有说的相关内容。我没说你说错了。我认为重要的是对什么是 SQL FK 约束有一个简单清晰的理解。而且它不是 FK 约束,而是外超键约束。如果这是一个恰好需要的约束,可以声明一个。
    • @philipxy 我不敢苟同。在大多数情况下,关于约束适当的超级密钥的点是无关紧要的。 OP 显然是该领域的新手,此时我们不应该将他/她推到实现继承的复杂性上。 FK 不是键,因此与问题没有直接关系,同样的论点(如上所述)也适用于它们 - 在几乎所有实际情况下,FK 引用一个键,而不是正确的超级键。
    • @philipxy “事实上,SQL FK 声明,就像 UNIQUE 声明一样,声明了一个超级键。” - 不,它没有。 FK 引用了一个(超级)键,但它本身不是一个。
    【解决方案2】:

    是的,我同意@Branko,接受的答案不准确且不清楚。

    我以 Employee 表为例:

    CREATE TABLE Employee (
    Employee ID, 
    FullName, 
    SSN, 
    DeptID
    );
    

    要了解黑白超级键和候选键的区别,我们先来看看其他类型的键是什么?

    1.候选键: 是表中符合所有行唯一性的单独列。在 Employee 表中,EmployeeID 和 SSN 是候选键。

    2。主键: 是您选择在表中保持唯一性的列。在 Employee 表中,您可以选择 EmployeeID 或 SSN 列,EmployeeID 是首选,因为 SSN 是一个安全值。

    3.备用键: 主列以外的候选列,例如如果 EmployeeID 是 PK,则 SSN 将是备用键。

    4.超级键:如果您将任何其他列/属性添加到主键,则它会成为超级键,例如 EmployeeID + FullName 是超级键。

    5.复合键: 如果表中没有任何单独的列符合候选键的条件,那么您必须选择 2 列或更多列以使行唯一。就像没有 EmployeeID 或 SSN 列一样,您可以将 FullName + DateOfBirth 作为复合主键。但重复行的可能性仍然很小。

    Reference

    【讨论】:

      【解决方案3】:

      superkey 是一组一个或多个属性的集合,它们使我们能够唯一地标识实体集中的实体。 例如,customer-id 属性 实体集客户足以区分一个客户实体与另一个客户实体。因此,customer-id 是一个超级键。

      复合键是一个表格的多个字段/列的组合。可以是候选键、主键。

      【讨论】:

      • 有些表的所有候选键都是复合的。
      【解决方案4】:

      超级键唯一标识一行。它可以由一列或多列组成。复合键是由多个列组成的键。

      如果超级键由多个列组成,则它也是复合键。

      如果复合键唯一标识一行,它也是超级键。

      我没有看到过多使用“超级密钥”这个名称:它通常只是称为“唯一密钥”。

      【讨论】:

      • 谢谢@simon。我参加了大学的一个模块,讲座将唯一键称为超级键....感谢您的回复。
      • “superkey”这个词通常写成一个词。它根本不是一种键 - 超级键表示键的 superset(但不一定是 proper 超集)。超级键 = 唯一。键 = 最低限度的唯一性。复合键是由多个属性组成的键。
      • 谢谢 - 我不知道!
      • 一个超级键可以没有列,当它是一个没有列的键时。这是当一个表被限制为最多有一行时。一个合适的超键有一个或多个列。
      猜你喜欢
      • 2011-10-20
      • 2014-09-16
      • 2011-08-02
      • 2017-04-22
      • 2012-05-21
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多