我有一个使用Entity Framework 4和SQL Server 2008 R2的.NET应用程序,其中所有数据访问层都将由EF4管理。
我有一个金融交易表:交易,列名为可能值的状态:已打开,已下达,已验证,已关闭。对于插入,更新和读取,将始终非常访问此表。我需要在这张桌子上能够获得更好的表现。
标准解决方案是使用Id(int),Name(varchar)创建 TransactionStatuses ,并在交易和 TransactionStatuses 之间建立关系
但是现在,我正在考虑另一种解决方案:仅使用列Status(int)创建 Transactions 表,并创建一个约束,其中Status仅接受1,2,3,4。并且,在我的应用程序代码上创建一个Entensration,其中Opened = 1,Released = 2,Verified = 3,Closed = 4。
从性能角度看,第二种解决方案是更好的选择吗?
答案 0 :(得分:4)
如果您的TransactionStatuses是不可变的,并且您需要的只是一个值(在这种情况下,是一个与枚举值相关的整数),那么是的,我建议您忘记额外的TransactionStatuses表。
另一方面,如果您计划将其他信息附加到与您的业务层相关的状态,或者您计划让人们自定义状态,那么它应该是一个实体,因此有一个表。
答案 1 :(得分:4)
要么快,要么约束可能更容易检查,但数据库经过大量优化,可以非常快速地检查FK违规。
考虑到这两个,我更喜欢维护方面的FK选项
如果数据永远不会更改,那么这两种方法都是完全可行的,不会有任何偏见。