DBMS 中有哪些不同的散列方法?
散列文件组织也称为直接文件组织。
在这个方法中,为了存储记录,计算了一个哈希函数,它提供了存储记录的块的地址。任何类型的数学函数都可以用作散列函数。它可以很简单也可以很复杂。
哈希函数应用于列或属性以获取块地址。记录是随机存储的。因此,它也被称为直接或随机文件组织。
如果生成的哈希函数在被视为键的列上,则该列可以称为哈希键,如果生成的哈希函数在被视为非键的列上,则该列可以称为哈希柱子。
假设,一个文件有n条记录,每条记录都有一个key,唯一的决定了这条记录。设K为键,L为内存位置。哈希函数定义为H:K->L
示例
下面给出了一个散列文件组织的例子-
这里城市的STD代码是关键。哈希函数只需添加密钥的数字即可将这些密钥映射到地址2、4、6、8。
Hash函数的方法
哈希函数的方法H(k)解释如下-
除法
哈希函数H(k)=k(modm),其中m是大于键数的素数方法。
示例
让76名学生拥有独一无二的10位regno。这里regno是关键。
m=79(大于76)
L包含100个内存位置00,01,02,.....99
对于regno0148105102,0148105124,0148105405H(k)如下所示-
H(0148105102) = 0148105102 % 79 = 10 H(0148105124) = 0148105124 % 79 = 32 H(0148105405) = 0148105405 % 79 = 76
中方法
密钥k被平方,然后取中间数字得到地址。
示例
让200名员工拥有唯一的3位数empid。在这里,empid是关键。
H(k) = 2nd and 3rd digit of k2K: 067 048 146 K2: 4489 2304 21316 H(k): 48 30 13
折叠方式
密钥被分成若干部分k1,k2,…….kn然后通过忽略进位将这些部分加在一起,即H(k)=k1+k2+……..+kn
示例
让2000名员工拥有独一无二的4位empid。在这里,empid是关键。
H(1643) =16+43 =57 H(1999) =19+99 = 18 (The leading digit 1 is ignored) H(1176) = 11 + 76 = 87 H( 1374) = 13+ 74 =87
当多个键引用同一内存位置时,该问题称为碰撞。