-1

主键和 RRN 有什么区别?

4

2 回答 2

2

主键唯一且明确地标识给定记录(在数据库表/视图中)或给定行(在文本文件中)。尽管主键基于单个字段(单个“列”)可能很方便,但主键也可能基于多个字段/列。

RRN是首字母缩写词,可以理解为“记录行号”或“相对行号”。记录行号通常被理解为一个数字,通常(但不一定)通过简单的增量(基于先前分配的此类 RRN 的值)分配,该增量被“添加”到特定记录类型的其他字段/列. 许多 DBMS 提供了支持这种“自动递增”或更一般地自动分配的 RRN 的特性。

如上所述,RRN 可以用作主键。

与基于记录的 [一个或多个] 属性(字段或列)值的主键相比,拥有 [语义无效] RRN 有许多优点和缺点。这可能在其他 SO 问题中讨论过;以下是一些最常见的论点:

  • 主键可以修改,RRN 是“不可变的”。
    例如,如果主键是社会安全号码 (SSN),则有时可能会更新记录,因为 SSN 最初输入时有错字。当/如果发生这种情况,任何使用此 SSN 来引用更新记录的相关记录也需要更新。如果这些相关记录使用 [nonsignificative] RRN,它们将不受 SSN 值可能变化的影响。
  • 当没有基于单列的“自然”主键时,使用 RRN 可能更方便
  • RRN 通常更短
  • 通过非 RRN 主键引用原始记录的相关表和列表以某种方式复制了基础信息。这既是优点也是缺点:无需在原始表中查找即可知道基础字段值:如果您希望相关表包含此类信息则很好,如果不希望则不好(例如:社交安全号码可以被认为是敏感的等)
  • RRN 保证是唯一的(没有 RRN 生成逻辑的错误),因此基于属性值的键倾向于变成非唯一的(“哎呀!我们认为我们可以使用电话号码作为房屋 ID;该死!,电话公司开始重复使用号码......”)
于 2010-03-23T05:53:47.187 回答
0

主键标识表中的一行。

RRN(我假设您的意思是相对记录编号)还通过子集中的位置标识行(即查询结果)。

如果您需要推断与主键无关的一组记录的顺序,我发现它很有用。

于 2010-03-23T05:20:02.297 回答