主要关键吸引力
我有一个老板(以及用户)希望主键是复杂/智能/有吸引力的控制号码(有点像社会安全号码或信用卡号码格式)
我只是用零填充主键(在视图中)来安抚他们想要使控制号变得复杂,聪明和有吸引力的愿望。但他们希望它为:前2位数作为客户代码,然后4位数作为年份,然后最后4位数作为该客户在给定年份的交易号,然后在明年流量时将客户的交易数重置为1。每个客户的交易以1开始。 WM20090001,WM20090002,BB2009001,WM20100001,BB20100001
但是因为我想尽可能简单,我放弃在主键中嵌入他们建议的智能,我只是保持主键自动增量,无论客户端和年份如何。但是为了让它看起来不那么沉闷(他们真的坚持把主键作为智能控制号),我让主键看起来很聪明,在查看查询时,我把客户端代码和四位数年份代码放在前面八零填充自动增量键,即WM200900000001。有关自动增量主键的{{3}}信息的排序。
保持主键自动递增而不管其他任何信息,我们能够在编辑记录时保留其他潜在的副作用问题,例如,如果他们错误地在WM上输入事务,那么他们编辑客户端代码到BB,如果我们使用智能主键,WM客户的主键将在其控制号码中存在间隙。或者更糟糕的是,用户不会让控制号有间隙/漏洞,而是要求这些间隙的后续记录转移到这些间隙,并使后续记录的主键重新调整(递减)。
P.S。
引用引号(slug-like):
“如果你先抓住你的舌头 时间用户问他们是什么的 合理的要求,事情会有所作为 最后好多了。“
答案 0 :(得分:7)
是否有一些键连接成为一个自然的合成唯一键?我想不是,或者你不会问这个问题。
就像你的用户不想知道存储感兴趣的记录的柱面/块/头一样,他们不需要知道哑主键;这是一个实现细节。愚蠢的主键有充分的理由,但它们不是商业原因。隐藏在业务层面有意义的外观背后的哑键的实现细节。
解释它们bikeshedding可能不会对你有利。解决客户表达的需求,这是你的工作。
答案 1 :(得分:3)
我赞同你的轻微手。你必须满足毛毡的需要。在可能的情况下,我解释说,精神保留或对数据记录的理解是计算机前的需要,人们应该相信机器和系统......好吧,没有措辞就像那样,但你明白了。但通常我只是点头,给他们认为他们需要的东西 - 但并不像他们想象的那样成为表键,。 但是在查询级别。
事实上,我最好的数据库工作 - 我目前的工作 - 来找我,主要是因为我之前的那个人没有得到这个。他会无休止地与管理人员争论愚蠢的数字,坚决拒绝提供其他任何东西。我所要做的就是承诺“不要那样。”
答案 2 :(得分:0)
IMO,最终用户不需要知道不同类型主键的优缺点。
数据库中数据的确切设计和实现应被视为最终用户的黑匣子。最重要的是,这个黑匣子的输出是他们需要的正确格式的数据:用户不应该或不必知道所讨论的特定字段是实际上是PK还是从中生成的。
答案 3 :(得分:0)
根据爱因斯坦的说法,一切都应该尽可能简单,但并不简单。简直有时候是旁观者的眼睛。如果用户认为智能键比哑键更简单,那么在视图中你可以很好地适应它们。
通过继续在基表中使用哑键,可以避免在使用智能密钥时最终出现的一些陷阱。
知识就是力量。数据也是如此。共享数据时,可以共享电源。当权力分享时,政治就会发生。外交是这项工作的一部分。