【问题标题】:why must a primary key be minimal?为什么主键必须是最小的?
【发布时间】:2011-03-30 07:15:09
【问题描述】:

主键是唯一标识表中行的一个属性或一组属性。但是主键不仅要唯一,而且要最小。为什么这是必要的?

【问题讨论】:

    标签: database primary-key composite-key composite-primary-key


    【解决方案1】:

    识别最小键很重要的原因是确保对这些键的依赖没有冗余。冗余可能导致异常和不正确的结果。

    最小化本质上是一种语义问题,而不是纯粹的结构特征,因此数据库实现不一定需要它。例如,SQL 允许您在任何超键上创建“主键”,这可能不是不可约的超键。

    最小与存储大小无关,因为最小意味着不可约,它并不意味着最小。

    【讨论】:

    • "实例 SQL 允许您在任何超键上创建主键,这可能不是不可约的超键。"事实上,SQL 不能 阻止您这样做,因为最小性是一个理论属性,其定义涉及所有可能的值。 DBMS 无法知道您打算在表中存储什么,因此它无法告诉您唯一键是否最小 - 它只能告诉您它是否不唯一。
    • sleske:原则上,如果涉及其他约束,DBMS 可以判断超级键何时不是最小的。例如,在以下情况下,假定的“主”键 (a,b) 显然不是最小的:CREATE TABLE t1 (a INT NOT NULL UNIQUE, b INT NOT NULL, PRIMARY KEY (a,b));
    【解决方案2】:

    主键应该是最小的,因为它们只需要足够大以唯一地识别行。就所使用的索引空间而言,其他任何东西都是浪费。

    换句话说,如果我有一个唯一列 username 以及另一个唯一列 student_id,则从这两者构建的主键是一种浪费。处理这个问题的正常方法是使用一个作为主键,然后在另一个上有一个唯一的约束/索引。

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 2014-08-04
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多