2010-03-23 71 views
-1

主键和RRN有什么区别?主键与RRN

+0

当然,这不是。不过,这个问题可以使用更多的上下文。 – 2010-03-23 05:16:57

+0

@Phenom,在最近的问题中回答了这个问题:http:// stackoverflow。com/questions/2497729 /记录中的文件 – paxdiablo 2010-03-23 05:33:48

+0

答案并不像这个那么明确。 – neuromancer 2010-03-23 05:58:39

回答

2

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

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

定义如上,RRN可以用作主键。

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

  • 主键可能被修改,RRN是“不可变的”。
    例如,如果主键是社会安全号码(SSN),则记录可能会在某个时间更新,因为SSN最初是由于输入错误而导致的。当/如果发生这种情况,任何使用此SSN引用更新记录的相关记录也需要更新。如果这些相关记录使用了[无意义] RRN,它们将不受SSN值可能发生的变化的影响。
  • 当有基于单个列中没有“天然”的主键,它可能是使用RRN
  • 的RRN通常较短
  • 相关表格,并列出其通过的方式是指原始记录更方便非RRN主键,以某种方式复制底层信息。这既是一个优点,也是一个缺点:人们可以知道底层的字段值,而不必在原始表中查找:如果希望相关表包含这样的信息,那么很好,如果不这样做,就很糟糕(例如:社交安全号码可以被认为是敏感的等)
  • RRNs被保证是唯一的(短于RRN生成逻辑的错误),基于属性值的键有倾向于导致非唯一性(“哎呀!我们认为我们可以使用电话号码作为房屋ID;当电话公司开始重复使用电话号码......“)
0

主键标识表中的一行。

一个RRN(我假定你的意思是相对记录数)也标识一个子集中的位置(即查询结果)。

我发现它很有用,如果你需要外推一系列与主键无关的记录的连续顺序。