繁体   English   中英

Webforms上的主键(最初加载还是保存)?

[英]Primary keys on webforms (load initially or on save)?

无论数据库的体系结构如何,这只是一个普遍的问题。 我正在维护一个ASP.NET Web应用程序。 结构是这样的,

“添加新员工”网络表单

  • 主键(或要保存的记录ID)最初在表单加载事件中加载并显示为标签
    • 因此,当表单加载时,要保存的记录ID会显示给用户

正面:

  • 最终用户已经知道表单的ID /序列号是什么(甚至在保存表单之前)
  • 因此,在保存表单时,当他被定向到Gridview屏幕(包含所有条目)时,他可以轻松地搜索记录(尽管最近的记录始终位于顶部)

劣势:

  • 如果他不保存表单,比如说他只是在加载数据输入表单后取消,那么最初获取的id /键就被浪费了(在我的情况下,这是从数据库加载表单时获取的序列字段)

你们在这些情况下会做什么? 您将为“ Web应用程序”推荐哪种方法? 以及如何以不同的方式方便用户? 是否建议使用我们当前的方法(对我来说,这浪费了数据库中的ID /序列)

我总是建议不要在创建记录之前不提供正在创建的记录的标识字段值。 如您提到的,“首先创建临时占位符记录以提前获取标识字段值”方法可能会导致浪费ID,除非您有适当的过程来回收它们。

当用户按下保存时,您总是可以弹出一个消息框,告诉他们新创建的记录的标识字段值。

在这种情况下,您可以使用由应用程序本身创建的GUID。 然后,数据库将仅将PK设置为唯一标识符(GUID),并且它不能为null。 在这种情况下,您不会浪费任何唯一键,因为每次获取新GUID的调用都应定义为生成(数学上)唯一的标识符。 值得注意的是,如果使用此方法,则最好确保未将PK设置为集群。 插入后产生的索引重组可能很快导致应用程序性能下降。

例如:我不会在乎浪费的id值。 当您有可能用尽int32值的危险时(最后一次发生这种情况是什么?),请使用int64。 用户体验比浪费一些id值重要得多。

话虽如此,我不希望主键是用户想要键入的任何内容。如果您拥有用户需要输入的主键,那么可能(或将要求输入)更多不仅仅是一个int32 / 64值,并且在其组成和/或格式中带有(将带有)含义。 主键不应具有该功能。 (出于各种原因,谷歌搜索了毫无意义的主键或其他类似术语)。

如果您需要一个有意义的键,则使其成为与主键完全无关的二级索引。 如果其中一部分仍然是从数据库中某个计数器值获取的序列号。 确定在功能上是否在序列中出现缺口是一个问题。 (税务人员通常不希望发票号有空白)。 如果在功能上没有问题,那么一定不要从技术上开始担心它。 如果从功能上来说是个问题,那么是的,您别无选择,只能等待保存才能显示给用户。 但是,请不要在弹出窗口中这样做。 他们非常令人讨厌,因为他们不得不被解雇。 只需在保存新员工之后在屏幕上显示一条提示性消​​息,向用户发送该消息。 就像gmail会告诉您有关您在邮件列表上方执行的操作一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM