我有一个具有常量值的表...我在我的数据库(即SQL)中有这个表或者在我的代码中有一个枚举并删除我的表是否更好? 我的表只有2列,最多20行,这些行是固定的,并且第一次运行应用程序时会被填充一次。
答案 0 :(得分:1)
我依赖于那些常数的特征。
如果它们是一些永远不应该改变的低级系统常量(比如pi = 3.1415),那么最好只将它们保存在某个配置文件的代码部分中。而且,如果性能是关键参数,并且您经常使用它们(几乎每次请求),最好将它们保留在代码部分中。
如果它们是某些常量(可能是业务常量),将来可以更改它们可以将它们放在表中 - 那么您可以更灵活地更改它们(例如从管理面板)。
答案 1 :(得分:0)
我建议为你的案子创建一个Enum。由于值是固定的(,我假设表不会经常更改),您可以使用Enum。在数据库中创建表将需要不必要的数据库命中,并且需要数据库连接,如果您使用Enum,则可以跳过该数据库连接。
另外很多可能取决于你对你的价值做多少操作。例如:查询您的Enum值以从表中获取不同的值非常繁琐。然而,如果您将使用表方法,那么它将是一个简单的select distinct
。因此,您可能需要调查您的需求以及您将对这些值执行的操作。
就性能而言,您可以查看:Enum Fields VS Varchar VS Int + Joined table: What is Faster?
如您所见,ENUM和VARCHAR结果几乎相同,但加入 查询性能降低了30%。还要注意时间本身 - 遍历相同数量的行全表扫描执行大约25 比通过索引访问行更好(对于数据的情况) 适合记忆!)
所以,如果你有一个应用程序,你需要有一些表字段 有一小部分可能值,我仍然建议你使用 ENUM,但现在我们可以看到性能影响可能不会那么大 你期待。虽然又取决于您的数据和查询。
答案 2 :(得分:0)
这取决于您的需求。
您可能希望翻译枚举值(如果您在GUI中显示)并根据翻译的值排序一组记录。例如:假设您有一个Employees表和一个Position列。如果记录集很大,并且您想要按翻译的位置列进行排序或排序,那么您必须将枚举值+翻译保留在数据库中。
否则KISS并在代码中使用它。您将有空闲时间向数据库询问值。
答案 3 :(得分:0)
这实际上取决于你真正需要的东西。
使用Enum
使用DB
所以,如果你只在某些应用程序中使用它,那么Enum就足够了。但是如果有几个应用程序要使用它,那么DB将是更好的选择。