我可以在表中添加标识列(非PK)以便在应用程序中使用吗?

时间:2016-02-02 19:45:43

标签: asp.net-mvc database database-design primary-key

我正在sql server中构建一个db,然后我将构建web应用程序。数据有一些非常好的自然键列,我将用作PK。但是,其中有几个是复合键,在应用程序方面有点笨拙。

例如,高尔夫球场在一个位置可以有1,2或3个球场。该位置有一个数字(32201),每个课程都有一个名称(河口前面,河口后面,河口执行)所以我会从数字和名称制作一个复合键。

但是,在应用程序(asp mvc)中,内部路由允许从控制器向视图等传递单个整数id,以用于识别内容。所以我想在高尔夫球场表中添加一个非关键的标识列,以及其他喜欢它的人,所以我可以在应用程序中提交身份。所以有人可以在应用程序的索引页面上选择一个后卫课程,我会将非密钥身份识别号码传递给控制器​​,从数据库中选择课程的详细信息并将其传递给视图。

首先,似乎我会通过使用这个非键整数来绕过主键的目的,但是在进行更新,插入等时,PK会在参考完整性等方面发挥作用。

思想?

1 个答案:

答案 0 :(得分:1)

你在说什么听起来像surrogate key(而不是自然键)。使用每种方法都有利有弊,我认为这两种方法都是discussed before,相当广泛。

从答案here:继续使用两者。它们都是工具,当它是工作的最佳工具时,应该使用它们。

我唯一能为你的情况添加的是,因为你的表在同一个表上都有代理和自然键,所以确保一个(自然键或代理键)是实际的PK和另一个有一个唯一的键或索引。这样,任何一个都可用于唯一标识表中的行。