1

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

这是最明显的:

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

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

4

1 回答 1

1

不,没有人们所说的快速简便的方法;正如Barmar 评论的那样:

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

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

唯一键由表中的数据确定。您需要了解数据以确定什么是唯一的。

应该有一个拥有唯一键的自然方式,即如果您有一个操作系统用户表,那么唯一键可能应该是他们的用户名。同样,如果您有一张员工表,则无法保证员工姓名(或任何其他属性或属性集)的唯一性,因此您需要创建一个代理键

只有您可以确定这一点;研究你的数据,你应该能够解决它。

一般来说:

  • 每个表都应该有一个主键;应该与表同时创建。
  • 没有什么比了解数据库中的数据更重要的了。在您了解您正在查看的内容之前,您无法有效地使用数据库。
于 2013-08-27T07:40:02.230 回答