3

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

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

4

2 回答 2

6

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

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

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

操作将是这样的:

  1. 使用新的 PK 值向主表添加新行
  2. 运行更新操作以将所有 FK 值更改为新的 PK 值
  3. 删除旧的PK行

我也会在事务中运行所有这些。但我再次声明,我不建议采取这种方法。

于 2012-04-05T19:58:46.823 回答
1

正如 aKzenT 指出的那样,在定义主键时,最好始终使用自动编号/身份或序列 (Oracle)。b-tree 处理器查找和连接数字键的效率要高得多,尤其是当文本键长到几个字节时。更小的键也会导致需要搜索的 b-tree 页面更少。

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

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

于 2012-04-05T20:12:52.260 回答