Asp.net mvc 我可以向表中添加一个标识列(非PK)以在应用程序中使用吗?

Asp.net mvc 我可以向表中添加一个标识列(非PK)以在应用程序中使用吗?,asp.net-mvc,database,database-design,primary-key,Asp.net Mvc,Database,Database Design,Primary Key,我正在sql server中构建数据库,然后我将构建web应用程序。数据中有一些非常好的自然键列,我将使用它们作为PKs。然而,其中有几个是复合密钥,这在应用程序端会有点笨拙 例如,一个高尔夫球场在一个位置可以有1个、2个或3个球场。该位置有一个编号(32201),每个球场都有一个名称(bayou front、bayou back、bayou exec),因此我将根据编号和名称制作一个复合键 然而,在应用程序(asp mvc)中,内部路由允许将单个整数id从控制器传递到视图等,以用于标识内容。因

我正在sql server中构建数据库,然后我将构建web应用程序。数据中有一些非常好的自然键列,我将使用它们作为PKs。然而,其中有几个是复合密钥,这在应用程序端会有点笨拙

例如,一个高尔夫球场在一个位置可以有1个、2个或3个球场。该位置有一个编号(32201),每个球场都有一个名称(bayou front、bayou back、bayou exec),因此我将根据编号和名称制作一个复合键

然而,在应用程序(asp mvc)中,内部路由允许将单个整数id从控制器传递到视图等,以用于标识内容。因此,我考虑在高尔夫球场表中添加一个非关键标识栏,以及其他类似的栏,这样我就可以在应用程序中为我们提供标识字段。因此,有人可以在应用程序的索引页面上选择bayou back课程,我会将非关键标识id号传递给控制器,以便从DB中选择课程的详细信息,并将其传递给视图

一开始,我似乎会通过使用这个非键整数绕过主键的用途,但PK会在执行更新、插入等操作时发挥作用,比如引用完整性


想法?

你所说的听起来像是一把钥匙(与自然钥匙相反)。使用每种方法都有利弊,我认为这两种方法都是相当广泛的

答案是:两个都用。它们都是工具,当它们是工作的最佳工具时,应该使用它们


对于您的情况,我要补充的唯一一点是,由于您的表在同一个表上同时具有代理键和自然键,因此请确保其中一个(自然键或代理键)是实际的PK,而另一个表上具有唯一的键或索引。这样,任何一个都可以用来唯一标识表中的行。

您所说的“内部路由允许将单个整数id从控制器传递到视图等以用于标识内容”是什么意思?您可以将viewmodel中的任何内容传递给视图,并可以使用您实现的任何逻辑识别内容。您是指默认路线的可选id参数吗?它也不必是整数,也可以是多个。您的表应该有您所需要的任意多个键,并且哪一个成为主键几乎没有区别。如果您认为需要备用密钥,那么重要的是添加唯一性约束以保证其唯一性。注意:没有唯一性约束的标识不一定是唯一的。