如何向用户解释哑主键的优点?

Hao*_*Hao 4 database-design primary-key

主要吸引力

我有一个老板(以及用户)希望主键是复杂/智能/有吸引力的控制号码(有点像社会安全号码或信用卡号码格式)

我只是用零填充主键(在视图中)来安抚他们希望使控件编号复杂,智能和有吸引力的愿望.但他们希望它是:前2位的客户端代码,然后4个位数的同比,那么最后4位数字作为交易号该客户端上给定的一年,那么客户的交易数量重置为1的时候,明年流动.每个客户的交易以1开头.例如WM20090001,WM20090002,BB2009001,WM20100001,BB20100001

但是,由于我想尽可能简单,我放弃了他们建议的智能在主键中,我只是保持主键自动增量,无论客户端和年份.但是为了让它看起来不那么沉闷(他们真的坚持把主键作为智能控制号),我让主键看起来很聪明,在查看查询时,我把客户端代码和四位数年份代码放在前面八零填充自动增量键,即WM200900000001.在自动增量主键上排序类似slug的信息.

保持主键自动递增而不管任何其他信息,我们能够在编辑记录时保留其他潜在的副作用问题,例如,如果他们在WM上输入事务时出错,那么他们将客户端代码编辑为BB,如果我们使用智能主键,WM客户的主键在控制数量上会有差距.或者更糟糕的是,而不是让控制数字有差距/孔,用户将要求这些差距的后续记录应该转移达到这些差距,并有后续记录主键重新调整(递减).

  • 您如何处理这些用户请求(合理或其他)?
  • 你屈服于他们的要求吗?
  • 或者只是继续使用哑主键并向他们解释拥有一个非常智能/复杂的主键的影响,并教育他们拥有一个愚蠢的主键的显着优势?

PS

新书报价(https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-1044961.html):

"如果你第一次用舌头问他们对他们来说是合理的要求,那么事情最终会好起来的."

msw*_*msw 7

是否存在一些串联连接,这些键是一个自然的合成唯一键?我想不是,或者你不会问这个问题.

就像你的用户不想知道存储感兴趣的记录的柱面/块/头一样,他们不需要知道哑主键; 这是一个实现细节.愚蠢的主键有充分的理由,但它们不是商业原因.隐藏在业务级别有意义的外观后面的哑键的实现细节.

解释他们是自行车可能不会对您有利.解决客户表达的需求,这是你的工作.

  • 让他们注意屏幕显示的颜色.虽然他们分心,但插入愚蠢的数字! (2认同)