创建单独的关联表应该有多严格?

时间:2010-08-04 01:31:44

标签: database-design schema

假设我有一个包含report_type列的表格,我只有2种报告类型。是否值得用它们创建一个report_types表,然后用一个外键引用它到这个表?或者将报告类型存储为该列中的字符串是否可以接受?

5 个答案:

答案 0 :(得分:2)

只要有可能,您应该始终计划规范化数据库并抽象代码。但是,执行此操作的次数越多,系统中的“间接”就越多。更好的问题是,在将工作量标准化为与在未来进一步重新设计代码的成本方面相比,您将产生多少开销。

在这种情况下,我几乎肯定会说你值得花时间规范化数据库。

答案 1 :(得分:1)

需要考虑的事项:

  • 您将来可能会添加新的报告类型吗?
  • 您是否可能有其他表格也引用报告类型(例如,统计数据收集或审核)?
  • 您是否可能在其他上下文中使用这些值(例如GUI下拉窗口小部件)?
  • 您是否需要将其他数据(例如长说明)与报告类型相关联?

我知道现在建立一个表似乎有些过分,只能容纳两行。坦率地说,如果你决定坚持一个列和一个检查约束,Yagni的众神会支持你。但是,如果您已经有一堆代码查找表来强制执行受限制的值集,那么一致性也是有价值的。

答案 2 :(得分:0)

如果你有计划在路上扩展的话。我认为真正的问题是,不值得制作额外的桌子吗?

答案 3 :(得分:0)

我通常会建议对您的数据进行规范化,但这似乎是一个简单的案例,您可能不会从这样做中获益。如您所说,您只使用该字段进行过滤,因此只需要使用数据本身中存在的值。

如果您希望用户看到特定报告类型的记录为零,那么您可能希望使用关联的表。

答案 4 :(得分:0)

如果所有报告都设置了相同的列,但您只是使用报告类型来加速过滤,那么您只需使用:

report_model_v1

如果有一些额外的列与ReportType相关联 - 例如ReportTypeDescription - 那么请使用:

report_model_v2

如果每种报告类型都有不同的列集 - 例如,所有报告都有一些常见的列(Col1Col2Col3),那么每种类型的列都很少( Type1_Col1Type1_Col2)(Type2_Col1Type2_Col2) - 然后使用:

report_model_v3