繁体   English   中英

ViewModel中的替代键而不是主键

[英]Surrogate-key in ViewModel instead of primary-key

是否有最佳实践,如何防止在ViewModel中显示数据库中的自动增量主键(ID),使最终用户看不到它们?

我知道表上可能还有其他唯一字段可以使用。 但是,如果不确定是否存在(或将保留)唯一的东西怎么办?

我当时正在考虑创建一个哈希并将其保存在数据库中名为ViewKey的列中。 例如在表格地址中。

最佳实践是您需要用户可见的,在业务域中有意义且可用的密钥 (通常称为业务密钥自然密钥 )。 如果您没有实现这样的密钥并使它们对用户可见,那么您如何期望用户识别数据库中的信息并在现实世界中正确使用它呢?

密钥是否为主键并没有多大区别。 重要的是它们是不可为空的,并且在数据库中具有唯一性约束。

如果您尚未在分析和设计过程中确定合适的密钥,那么请花些时间这样做。 业务需求必须是决定性因素。 显然,没有单一的“一刀切”的解决方案。

也许我误会了这个问题。 如果您不想向最终用户显示数据库字段,则...不要。 您是否使用某种工具让最终用户直接访问您的数据库表,而您无法控制他们看到的字段?

如果您的意思是,“用户如何在不使用这样的自动编号字段的情况下识别记录?” 如果该表具有一些自然键,即计算机外部世界中存在的标识符(例如社会保险号或标准国家/地区代码等),则可以将其用作主键,并且不需要自动编号。 如果没有保证唯一的真实值,则必须创建一个标识符,例如自动编号字段或guid。 如果创建供内部使用的标识符,则最好将其显示给用户,并允许用户使用它来标识记录。 除非需要,为什么要创建“内部标识符”和“外部标识符”? 如果出于某种原因不能接受自动编号字段(标识符必须具有校验位或类似的数字),则创建一个可接受的标识符,并在内部和外部使用它。

有时,自然键对于内部键来说是一个糟糕的选择,最常见的原因是因为它太长了,它会使索引和查找变大和变慢。 这是我看到拥有“内部密钥”和“外部密钥”的唯一原因。

暂无
暂无

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

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