我有一个使用 Entity Framework 4 和 SQL Server 2008 R2 的 .NET 应用程序,其中所有数据访问层都将由 EF4 管理。
我有一个金融交易表:交易,其中的“状态”列可能包含以下值:“已打开”、“已发布”、“已验证”、“已关闭”。该表将始终被频繁访问以进行插入、更新和读取。我需要在这张 table 上达到更好的性能。
标准解决方案是使用 Id(int)、Name(varchar) 创建一个 TransactionStatuses,并在 Transactions 和 TransactionStatuses 之间建立关系.
但现在,我正在考虑不同的解决方案:仅创建带有 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/