编辑主键

时间:2012-04-05 19:52:44

标签: c# asp.net asp.net-mvc-3

如果表中只包含主键字段,是否有一种在MVC3中编辑主键的方法。例如,我有一个控制台表,在其中我有控制台名称作为主键,我希望能够编辑它并更改它并保存编辑后的值。

如果您需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:6)

作为一般规则,您不应该编辑主键。 SQL Server中的主键通常在其上具有聚簇唯一索引,因此编辑主键意味着您可能必须重建索引(可能不是每次都有,但取决于偏差)。

相反,我会创建一个假主键,例如SQL Server中的IDENTITY列,并在Name列上放置一个UNIQUE约束。如果表变大,则检索int列上的项也将比在varchar()列上检索更快。

<强>更新 由于我被告知我没有回答问题(即使这是接受的答案),因此可以更改SQL Server中的主键值。但它在技术上不是编辑操作,因为参照完整性可能会阻止真正的编辑(我没有尝试过,所以请随意进行自己的实验!)

操作会是这样的:

  1. 使用新的PK值
  2. 向主表添加新行
  3. 运行更新操作以将所有FK值更改为新的PK值
  4. 删除旧的PK行
  5. 我也会在交易中运行所有这些。但我会再次声明记录,我不建议采用这种方法。

答案 1 :(得分:1)

正如aKzenT所指出的,最好在定义主键时始终使用自动编号/标识或序列(Oracle)。对于b-tree处理器来说,查找和连接数字键的效率要高得多,特别是当文本字符长度超过几个字节时。较小的键也会导致需要搜索的b树页较少。

另一个重要原因是无法修改自动生成的密钥。当使用可修改的文本键时,外键必须使用CASCADE UPDATE,其中许多(例如Oracle,DB2)RDBMS不以声明方式支持,并且必须使用触发器定义,这非常复杂。

在您的情况下,使用自动生成的主键替换文本键将消除此问题。