.net - : Constraint or FK? 对于状态列有什么更好的

标签 .net sql-server performance sql-server-2008 entity-framework-4

我有一个使用 Entity Framework 4 和 SQL Server 2008 R2 的 .NET 应用程序,其中所有数据访问层都将由 EF4 管理。

我有一个金融交易表:交易,其中的“状态”列可能包含以下值:“已打开”、“已发布”、“已验证”、“已关闭”。该表将始终被频繁访问以进行插入、更新和读取。我需要在这张 table 上达到更好的性能。

标准解决方案是使用 Id(int)、Name(varchar) 创建一个 TransactionStatuses,并在 TransactionsTransactionStatuses 之间建立关系.

但现在,我正在考虑不同的解决方案:仅创建带有 Status(int) 列的 Transactions 表,并创建一个 Status 只接受 1,2,3,4 的约束。并且,在我的应用程序代码中创建一个枚举,其中 Opened = 1、Released = 2、Verified = 3 和 Closed = 4。

从性能角度来看,第二个解决方案是更好的选择吗?

最佳答案

要么速度快,要么速度快。约束也许更容易检查,但数据库经过大量优化,可以非常快速地检查 FK 违规。

考虑到这两个,从维护角度来看我更喜欢 FK 选项

  • 通过 DML 添加新的状态行确实很容易,而更改约束(可以说)更难部署,需要 DDL
  • 如果需要,您可以受益于其他元数据列 - 即与代码一起使用的描述,或许还有软删除日期(用于从 UI 中删除,而不会使旧数据无效)

如果数据永远不会改变,那么这两种方法都是完全可行的,不会产生偏见。

关于.net - : Constraint or FK? 对于状态列有什么更好的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8667582/

相关文章:

c# - 检索具有特殊字符的嵌入资源

sql - 外主键插入(增量问题)

sql - 将小数点添加到表中的数据

Android 模拟器在 Linux 上超慢

c# - .NET 可枚举联合/联接组合

.net - 有哪些库可用于在 .Net 中操作超大图像

c# - 有条件地将渲染片段传递给组件

sql - 从不同的表中获取原始数据

python - 拆分大量字符串并创建结果列表

c++ - 对一段独立于 CPU 性能的代码进行基准测试?