我在数据库中有一些表。只有两个
1-Sports
2-Match<>
.......
In sports table there is columns SportType<br>
and In Match table there is column MatchType
选项1:
我可以选择创建SportType和MatchType表
选项2:
第二个选项是创建运动类型和匹配类型的枚举
由于查询中的额外联接,有些人不喜欢选项1 你的建议
我还需要展示SportType&amp; DropDownLists中的MatchType
答案 0 :(得分:1)
在查找表和枚举或类似的代码内常量之间进行选择时,需要考虑几个因素。这些因素中的主要问题是,如果不重新部署应用程序,您必须添加或修改任何这些值的可能性。
要记住的另一件事是,如果您使用内嵌代码值,则不太可能使用任何类型的代理键,因此如果您决定更改代码中某些内容的拼写,您可能会创建数据库中数据不匹配的问题。
由于您还需要在下拉列表中显示这些类型,因此我建议不要使用裸枚举,因为显示界面友好的版本(例如,单词之间有空格)会变得很容易。
最简单的替代方法是具有字符串常量的类:
public class SportType
{
public const string TeamSport = "Team Sport";
public const string IndividualSport = "IndividualSport";
}
更复杂的选项,但对于这个用例可能是不必要的,是使这些对象强类型化:
public class SportType
{
private readonly string _description;
private SportType(string description)
{
_description = description;
}
public static readonly SportType TeamSport = new SportType("Team Sport");
public static readonly SportType IndividualSport = new SportType("Individual Sport");
public static implicit operator SportType(string s)
{
return new SportType(s);
}
public static implicit operator string(SportType s)
{
return s._description;
}
// equality overrides etc.
}
这里的优点是您可以将这些值用作字符串
string sportType = SportType.TeamSport;
但您不必将变量和参数声明为裸字符串:
public void SetFavoriteSportType(SportType sportType)
同样,这些只是选项;最终归结为如何部署您的应用程序以及如何修改这些数据。
答案 1 :(得分:1)
我认为enum方法的问题在于你必须添加新的SportTypes和MatchTypes。如果您的下拉列表绑定到那些枚举,则每次更改时都必须重新部署