【问题标题】:How strict should I be with creating a separate association table?创建单独的关联表应该有多严格?
【发布时间】:2016-08-14 02:01:03
【问题描述】:

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

【问题讨论】:

  • 取回后字段的值你在做什么?
  • @Joe:没什么,只是用来过滤的。

标签: database-design schema


【解决方案1】:

只要有可能,您应该始终计划规范化您的数据库并抽象您的代码。但是,您执行此操作的次数越多,您在系统中获得的“间接”就越多。更好的问题是,您在规范化表格方面会产生多少开销,而在未来重新设计代码的成本方面。

在这种情况下,我几乎可以肯定地说值得您花时间标准化数据库。

【讨论】:

    【解决方案2】:

    需要考虑的事项:

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

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

    【讨论】:

      【解决方案3】:

      如果您打算继续扩展的话。我认为真正的问题是,不值得多做一张桌子吗?

      【讨论】:

        【解决方案4】:

        我通常会建议对您的数据进行规范化,但这似乎是一个足够简单的案例,您可能不会从中看到太多好处。正如您所说,您仅使用该字段进行过滤,因此只需要使用数据本身中存在的值。

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

        【讨论】:

          【解决方案5】:

          如果所有报告都设置了相同的列,但您使用报告类型只是为了加快过滤速度,那么您可以简单地使用:

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

          如果每种报告类型都有不同的列集——例如,所有报告都有一些公共列(Col1Col2Col3),然后每种类型都有很少的特定列(Type1_Col1、@987654333 @) (Type2_Col1, Type2_Col2) -- 然后使用:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-03-20
            • 1970-01-01
            • 2012-10-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-26
            相关资源
            最近更新 更多