其中常量应存储在数据库中

时间:2010-03-07 14:50:01

标签: database-design constants

我一直在想是否应该将“已批准,已批准,未决”或“单身,已婚,已离婚”等常量分组到一个表中,该表中包含对数据库中使用的模块或单独表格的引用对于每个相关模块。哪一个更实用?

5 个答案:

答案 0 :(得分:8)

单独的表,以便数据库强制执行仅适用于引用表的外键约束。

答案 1 :(得分:2)

我同意mnemosyn - 只要有可能,我会强制执行具有约束而不是外键的用户无法修改的内容。

但是,如果您需要在针对报告,BI或临时用户的查询中包含用户友好名称,那么就会出现一个问题。然后一个外键表非常方便。

答案 2 :(得分:1)

这些常数是多么“恒定”?我目前正在代码中存储常量,因为根据定义它们可以不改变。如果它不是用户配置的,请不要将其放入数据库中。

在数据库中拥有该类型的大量外键约束是无用的,如果这有任何问题,将使您的性能受到严重影响。

但我知道我对此的看法很少被分享。

答案 3 :(得分:1)

它们应该放在单独的表中,因此您可以使用外键。例如,假设您在这里讨论的是用户表,其设计如下:

UserId           int
Status           int
MaritalStatus    int

您可以定义UserStatuses表

StatusId    int
Name        nvarchar

包含Approved,Disapproved和Pending的行,然后对UserMaritalStatuses执行相同的操作。当你引用这些表时,这也可以很好地映射到代码中的相同常量。

答案 4 :(得分:1)

我不应该在数据库中存储常量,将它们保存在代码中。

您给出的两个示例我都会将ENUM存储在数据库中。