SQL查找表中最小的唯一键

SQL查找表中最小的唯一键,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有一个8列的表,想知道这个表的最小可能的唯一键。(没有索引) 这是非常明显的: select count(*) from (select distinct id1, id2, id3, id4, id5, id6, id7, id8 from mytable); 是否有一种快速简便的方法来确定此表的唯一列组合?如何进行?不,没有人们所说的快速简便的方法;作为: 您得

我有一个8列的表,想知道这个表的最小可能的唯一键。(没有索引)

这是非常明显的:

select count(*) 
  from (select distinct id1, id2, id3, 
                        id4, id5, id6, 
                        id7, id8 
          from mytable);

是否有一种快速简便的方法来确定此表的唯一列组合?如何进行?

不,没有人们所说的快速简便的方法;作为:


您得到的任何答案都将取决于当时加载的数据。对表格所做的任何更改都可能使结果无效

此外,您以前没有主键搜索唯一性,因此很容易出现误报。您没有强制唯一性,因此应该是唯一的列集可能不是唯一的

唯一键由表中的数据决定。您需要了解这些数据,以确定哪些数据应该是唯一的

应该有一种拥有唯一密钥的方法,也就是说,如果你有一个操作系统用户表,那么唯一密钥应该是他们的用户名。同样,如果您有一个员工表,则无法保证员工姓名(或任何其他属性或属性集)的唯一性,因此您需要创建一个

只有你能确定这一点;研究你的数据,你应该能够把它计算出来

一般来说:

  • );应与表同时创建
  • 没有什么比理解数据库中的数据更重要的了。在了解数据库是什么之前,您无法有效地使用该数据库

不,没有人们所说的快速简便的方法;作为:


您得到的任何答案都将取决于当时加载的数据。对表格所做的任何更改都可能使结果无效

此外,您以前没有主键搜索唯一性,因此很容易出现误报。您没有强制唯一性,因此应该是唯一的列集可能不是唯一的

唯一键由表中的数据决定。您需要了解这些数据,以确定哪些数据应该是唯一的

应该有一种拥有唯一密钥的方法,也就是说,如果你有一个操作系统用户表,那么唯一密钥应该是他们的用户名。同样,如果您有一个员工表,则无法保证员工姓名(或任何其他属性或属性集)的唯一性,因此您需要创建一个

只有你能确定这一点;研究你的数据,你应该能够把它计算出来

一般来说:

  • );应与表同时创建
  • 没有什么比理解数据库中的数据更重要的了。在了解数据库是什么之前,您无法有效地使用该数据库

您使用的是什么RDBMS?您得到的任何答案都将取决于当时加载的数据。对表所做的任何更改都可能使结果无效,那么有什么意义呢?Oracle 11g。我们希望从这一点开始引入独特性。因此,如果将来某个insert可能会损坏键,这不会是一个问题,但是强制执行uniqueness我认为在大多数数据库系统中都没有内置任何东西来解决这个问题-有255个可能的列组合(假设不可能使用零列键)-您需要定义您使用的最小度量-您是否试图最小化使用的空间或列数?(因为这些指标可能是相反的)我所说的最小值是指键中使其唯一的COL数。例如,如果组合id1、id4、id5完全满足唯一性,那么它将是最小的组合,因此id1、id4、id5、id6也将是唯一的,但不是最小的可能组合。您使用的是什么关系数据库?您得到的任何答案都将取决于当时加载的数据。对表所做的任何更改都可能使结果无效,那么有什么意义呢?Oracle 11g。我们希望从这一点开始引入独特性。因此,如果将来某个insert可能会损坏键,这不会是一个问题,但是强制执行uniqueness我认为在大多数数据库系统中都没有内置任何东西来解决这个问题-有255个可能的列组合(假设不可能使用零列键)-您需要定义您使用的最小度量-您是否试图最小化使用的空间或列数?(因为这些指标可能是相反的)我所说的最小值是指键中使其唯一的COL数。例如,如果组合id1、id4、id5完全具有唯一性,那么它将是最小的组合,因此id1、id4、id5、id6也将是唯一的,但不是最小的可能组合。