代码之家  ›  专栏  ›  技术社区  ›  leora Matt Lacey

当您有两种类型的记录时,此表的最佳数据库设计是什么

  •  2
  • leora Matt Lacey  · 技术社区  · 14 年前

    我在跟踪练习。我有一个 训练 带有的表

    • 身份证件
    • 练习 (在练习表中输入外键)

    现在,一些运动,如重量训练,将有以下领域: 重量,重复次数 (我刚举起10次,100磅)

    像跑步这样的其他练习也有以下领域: 时间、距离 (我刚跑了5英里,花了1个小时)

    我应该把这些都存储在同一个表中,并且只让一些记录填写两个字段,其他字段为空,还是应该将其分解为多个表。

    在一天结束时,我想查询一天中所有的练习(包括两种类型的练习),因此我必须在某个地方进行一些“切换”,以区分不同类型的练习。

    对于这种情况,最好的数据库设计是什么

    3 回复  |  直到 14 年前
        1
  •  3
  •   Anders Abel    14 年前

    在数据库表中,有几种不同的模式来建模面向对象的继承。最简单的存在 Single table inheritance 在这种情况下,这可能很有用。

    实现它主要是根据您自己的建议填写一些字段,其他字段则是空白的。

        2
  •  0
  •   Stuart Sierra    14 年前

    一种方法是有一个“exercise”表,其中有一个“type”字段,用于命名另一个特定于exercise的详细信息所在的表,以及该表中的一个外键。

        3
  •  0
  •   CheeseConQueso    14 年前

    如果你计划只保留两种类型,只要 exercise_id, value1, value2, type

    您可以筛选WHERE子句中的练习类型,并在同一语句中对列名称进行别名,这样结果就不会显示值1和值2,而是显示权重和重复次数或时间和距离。