有没有需要一个包含32个字段的主键的情况?

时间:2014-07-18 15:57:50

标签: sql oracle oracle11g

这无疑是一个"星期五"题.. 当我查找the definition of"主键"它说:

  

在Oracle中,主键是单个字段或字段组合   唯一定义记录的。没有属于的字段   主键可以包含空值。一张桌子只能有一张   首要的关键。在Oracle中,主键不能包含超过32个   列。

为什么在主键中需要32列?那种情况会不会出现?

3 个答案:

答案 0 :(得分:5)

主键由索引支持,an index key can only have 32 columns。所以它是索引的继承限制。对主键本身添加额外限制可能没什么意义,因为索引可能存在于主键约束之前,并且如果删除约束则可以保留。

other constraints on the primary key不一定适用于索引本身。

索引的32列限制可能与它们的实现方式有关(正如Guffa所说),并且没有太多要问为什么他们选择32而不是16或64或其他什么。拥有32列索引而不是32列主键的略微更合理,但我认为它仍然很不寻常。从理论上讲,主键也可以有32个列并不意味着你会在野外遇到过一个主键。

回答你的问题:你不会;和不。 (有人现在会说他们曾经在一个这样做的系统上工作......)

答案 1 :(得分:1)

在星型Schema中有一个具有尽可能多的维度的情况表的情况。事实记录将由Dimension键标识。话虽如此,我并不认为实际创造这样的约束是有意义的。您通常可以控制ETL-Processes中的唯一性,并且此事实表在某些父子关系中永远不会是父级

答案 2 :(得分:0)

这样设置的限制取决于可以合理分配多少空间,可能需要多少空间,以及需要多少空间。

在这种情况下,你真的不应该达到极限。它被设置在你通常永远不会接近它的水平。它必须有一个限制,但显然没有必要保持低,所以它是一个不大的任意数字,它浪费空间。