【发布时间】:2011-03-30 07:15:09
【问题描述】:
主键是唯一标识表中行的一个属性或一组属性。但是主键不仅要唯一,而且要最小。为什么这是必要的?
【问题讨论】:
标签: database primary-key composite-key composite-primary-key
主键是唯一标识表中行的一个属性或一组属性。但是主键不仅要唯一,而且要最小。为什么这是必要的?
【问题讨论】:
标签: database primary-key composite-key composite-primary-key
识别最小键很重要的原因是确保对这些键的依赖没有冗余。冗余可能导致异常和不正确的结果。
最小化本质上是一种语义问题,而不是纯粹的结构特征,因此数据库实现不一定需要它。例如,SQL 允许您在任何超键上创建“主键”,这可能不是不可约的超键。
最小与存储大小无关,因为最小意味着不可约,它并不意味着最小。
【讨论】:
主键应该是最小的,因为它们只需要足够大以唯一地识别行。就所使用的索引空间而言,其他任何东西都是浪费。
换句话说,如果我有一个唯一列 username 以及另一个唯一列 student_id,则从这两者构建的主键是一种浪费。处理这个问题的正常方法是使用一个作为主键,然后在另一个上有一个唯一的约束/索引。
【讨论】: