一个有趣的任务出现了,大约一周没有让我去。假设我们正在编写一个使用银行卡的应用程序。如您所知,卡号由 16 位数字组成。我知道有不同位数的数字,但在这件事上它并不那么重要。卡号是唯一的,非常适合主键的作用,很自然。在第一个近似值中,一切都很好。问题进一步开始。事实上,地图有许多属性。卡的主要属性,即其限额、类别、支付系统和类型由 BIN 确定。BIN - 银行识别号。这些是卡号的前 6 位数字。每张具有相同 BIN 的卡片具有相同的指定属性。因此,不要重复信息,而是将属性放在单独的表中是有意义的。可以将相同的 BIN 作为主键。现在是最有趣的。由于属性从映射表移动到 BIN 表,因此每个映射必须引用相应的 bin。也就是说,每张卡除了BIN之外,在卡号中还会有一个单独的字段,与BIN一样,与外键一样。也就是BIN号会重复。不好。解决方案是自己来的。卡号是合数!因此,您可以拆分号码。BIN 将是一个单独的字段和外键。剩下的12位数字(一般是11位,但不是本质)就是卡片标识。但请记住,16 位数字是主键。然后我们打破它..似乎没有问题。也可以将 12 位数字设为主要数字。是的,问题是这 12 位数字可能不再是唯一的。那么用什么作为主键呢?不输入身份证?那么用什么作为主键呢?不输入身份证?
第一个选项是计算字段及其索引。示意图:
第二个选项是表达式索引。示意图: