是否值得将枚举值规范化为新表?

时间:2009-03-04 20:36:50

标签: database-design

使用数据库设计软件时,是否值得将枚举规范化为单独的表?

e.g。如果我有课:

public class Alert
{
    public int ID
    public System.DayOfWeek AlertDay;
    public string Message;
}

我的相应警报表应该是这样的:

CREATE TABLE Alert
(
    ID INT IDENTITY,
    AlertDay INT,
    Message VARCHAR(50)
)

或者我应该将一周的日期规范化为单独的表并将FK关系添加到我的警报表中?

这种设计决定是否有经验法则?

5 个答案:

答案 0 :(得分:2)

我没有。但是尽量保持字符串Message尽可能短,并在非规范化表上使用索引。

查看MySQL Performance Blog中的Enum Fields VS Varchar VS Int + Joined table: What is Faster?

答案 1 :(得分:1)

如果它是关于星期几的信息那么常量,我只需在代码中定义一个枚举并将整数存储在数据库中。

答案 2 :(得分:1)

通常不会。一周的日子不太可能改变,你不想进行不必要的加入。

另一方面,您确实希望确保“一周中的日子”的来源是一致的而不会改变(例如本地化,大小写,缩写等)。

答案 3 :(得分:0)

是否可以直接从数据库访问数据而无需通过对象?如果是这样,那么我会推荐一个查找表,或者每周写一份报告的人在他们必须写一个案例陈述来显示星期几的文本值或者他们犯了转换错误的错误时可能会有点恼火。使用系统函数将int设置为星期几,并发现其服务器上的startOfWeek设置与硬编码到对象中的设置不同。

答案 4 :(得分:0)

或者,您可以存储DateTime并让应用程序确定星期几。许多语言都有内置的方法来实现这一目标。