当前位置 : 首页 » 互动问答 » 正文

超级密钥和候选密钥之间有什么区别?

分类 : 互动问答 | 发布时间 : 2010-12-23 22:54:29 | 评论 : 9 | 浏览 : 89868 | 喜欢 : 35

超级密钥和候选密钥之间有什么区别? 我已经提到了wiki,dotnet spider以及Database Concepts第4版的书。但我无法理解这个概念。任何人都可以用适当的例子解释一下吗?

回答(9)

  • 1楼
  • 候选键 is a super key从中你不能删除任何字段。

    例如,可以通过主要/次要版本或构建日期(我们假设每晚构建)来识别软件版本。

    存储日期三个领域当然不是一个好主意,但让我们假装它是出于演示目的:

    年月日主要未成年人
    2008 01 13 0 1
    2008 04 23 0 2
    2009 11 05 1 0
    2010 04 05 1 1
    

    So (年,主要,次要) or (年,月,日,专业)是超级密钥(因为它们是唯一的)但不是候选密钥,因为您可以删除year or major,剩余的列集仍然是超级密钥。

    (年,月,日) and (主要,次要)是候选键,因为您不能在不破坏唯一性的情况下从中删除任何字段。

  • 2楼
  • 超级键是唯一标识表中行的列的任意组合。候选键是超级键,在不丢失唯一标识属性的情况下不能从中删除任何列。此属性有时称为minimality或(更好)irreducibility。

    超级键≠通常是主键。主键只是选择作​​为主键的候选键。然而,在依赖性理论中,候选密钥是重要的,并且主密钥不比任何其他候选密钥更重要。非主要候选键也称为替代键。

    考虑这个Elements表:

     CREATE TABLE元素
    (
        atomic_number INTEGER NOT NULL PRIMARY KEY
                        检查(atomic_number> 0 AND atomic_number <120),
        符号CHAR(3)NOT NULL UNIQUE,
        name CHAR(20)NOT NULL UNIQUE,
        atomic_weight DECIMAL(8,4)NOT NULL,
        期间SMALLINT非空
                        检查(1和7之间的时间段),
        组CHAR(2)NOT NULL
                         - 对于镧系元素为'L',对于Actinoids为'A'
                        检查(组IN('1','2','L','A','3','4','5','6',
                                         '7','8','9','10','11','12','13',
                                         '14','15','16','17','18')),
        稳定的CHAR(1)DEFAULT'Y'不为空
                        检查(稳定IN('Y','N'))
    );
    

    它有三个唯一标识符 - 原子序数,元素名称和符号。因此,这些中的每一个都是候选键。此外,除非您正在处理只能保存一行数据的表(在这种情况下,空集(列)是候选键),否则您不能拥有小于一列的候选键,因此候选键是不可简化的。

    考虑由{原子序数,元素名称,符号}组成的键。如果为这三个字段(例如{6,Carbon,C})提供一组一致的值,则可以唯一标识元素的条目 - Carbon。然而,这是一个非常重要的超级密钥,因为它不是不可简化的;你可以消除三个字段中的任何两个,而不会丢失唯一的标识属性。

    另一个例子,考虑一个由{atomic number,period,group}组成的密钥。同样,这是一行的唯一标识符; {6,2,14}确定碳(再次)。如果不是Lanthanoids和Actinoids,那么{period,group}的组合将是独一无二的,但由于它们,它不是。但是,和以前一样,原子序数本身就足以唯一地标识一个元素,因此这是一个超级密钥而不是候选密钥。

  • 3楼
  • 超级密钥是字段的组合,通过该字段唯一地标识行,并且候选密钥是最小超级密钥。

  • 4楼
  • A Super key是一组或一列以唯一标识表中的行。从一组超级键中选择

    候选键,我们在选择候选键时唯一要注意的是:它不应该有任何冗余属性。这就是为什么它们也被称为最小超级密钥。

    In Employee表有三列: Emp_Code,Emp_Number,Emp_Name

    超级键:

    以下所有集合都能够唯一标识employee表的行。

     {Emp_Code}
    {} Emp_Number
    {Emp_Code,Emp_Number}
    {Emp_Code,Emp_Name}
    {Emp_Code,Emp_Number,Emp_Name}
    {Emp_Number,Emp_Name}
    

    候选键:

    如上所述,它们是没有冗余属性的最小超级键。

     {Emp_Code}
    {} Emp_Number
    

    主键:

    数据库设计者从候选键集中选择主键。所以{Emp_Code} or {Emp_Number}可以是主键。

  • 5楼
  • 基本上, Candidate Key is a Super Key不能再修剪属性。

    A Super Key标识数据库的表/关系中唯一的行/元组。它由一组组合的属性组成,它们可以假设在表/关系的行/元组上唯一的值。 Candidate Key 由Super Key构建,迭代删除/修剪非键属性,保持不变:新创建的Key仍然需要唯一标识行/元组。

    A 候选键可能是在属性方面被视为最小超级键

    候选键可以用于引用唯一的行/元组,但是从RDBMS引擎的角度来看,维护它们上的索引的负担比较重。

  • 6楼
  • 超级键:一组属性或属性组合,用于唯一标识给定关系中的元组。 Superkey有两个属性 独特性和 reducible set

    候选键:具有以下两个属性的最小超级键集: 独特性和 不可减少的集合或属性

  • 7楼
  • 选择一个候选键作为主键。其他候选键称为备用键.

  • 8楼
  • Super Key:超级键是任何一组属性,对于这些属性,值始终保证对于表中所有可能的元组集都是唯一的。

    候选键: 候选键是“最小”超级键,表示超级键属性的最小子集,它是唯一的。

  • 9楼
  • 超级密钥:超级密钥是关系(表)中的一组关键字。它可以唯一地定义关系(表)中的每个tupple。

    候选键:我们可以说最小超级键是候选键。候选者是超级密钥的最小子集。并且可以唯一地定义每个tupple。

相关阅读:

Strange Characters in database text: Ã, Ã, ¢, â‚ €,

'IF' in 'SELECT' statement - choose output value based on column values

SQL Server: Get data for only the past year

Insert into ... values ( SELECT ... FROM ... )

What is the difference between "INNER JOIN" and "OUTER JOIN"?

How do I quickly rename a MySQL database (change schema name)?

How to list the tables in a SQLite database file that was opened with ATTACH?

How to replace a string in a SQL Server Table Column

How does database indexing work?

How can I get column names from a table in Oracle?