【问题标题】:Database table design for a user referencing a particular outcome为引用特定结果的用户设计数据库表
【发布时间】:2016-06-10 11:42:22
【问题描述】:

设想: 用户输入名称、目标和大小。目标是“长”、“平均”、“短”。尺寸有“大”、“中”、“小”。有3张桌子。 User 存储每个用户的名称、目标和大小。 Final 根据目标/大小组合存储结果。 UserFinal 用作关联表,用于存储具有相应结果的适当用户。目标和规模的特定组合会产生分配给该用户的特定结果(请参阅下表)。

GOAL        SIZE    OUTCOME
Long        Big     12
Long        Medium  14
Long        Small   18
Average     Big     13
Average     Medium  16
Average     Small   19
Short       Big     15
Short       Medium  17
Short       Small   20

目标:表Final 不应增长,仅用作用户提交目标和大小时的“查找”表(不确定预期不会增长的表是否是一个好的设计?)。 outcome 值将用于每个特定用户的进一步计算。

问题:图示的表格设计是反映这种情况的正确方式吗?如果不是,那么实现此目的的最佳方法是什么?

【问题讨论】:

  • 用户中的目标和大小似乎是多余的
  • @Tassadaque - 同意,但我不知道如何理解它。

标签: sql database postgresql database-design database-schema


【解决方案1】:

似乎目标和规模确定了结果,并且每个用户设置了一个结果。 请参阅以下数据模型:

样本数据:

目标 -------- L长 平均 S 短 尺寸 -------- B大 中号 小号 结果 -------- LB 12 中号 14 大号 18 A B 13 中号 16 19 SB 15 SM 17 不锈钢 20

【讨论】:

    【解决方案2】:

    我删除了我的答案并正在提交另一个答案,因为这些编辑大大改变了问题的清晰度。

    拥有一个纯粹作为查找表的最终表似乎不是好的数据库设计。

    我会做一个简单的一对多关系。

    每个user 都有很多outcomes 像这样:

    用户

    user_id [pk]
    name
    

    成果

    outcome_id [pk]
    user_id [fk]
    goal
    size
    outcome
    

    【讨论】:

    • 我在听你说的话,但是在用户提交他们的goalsize 之后,outcome 列将如何填充? outcome 列如何知道要使用哪个值?
    • 无论您的用户通过什么系统提交他们的目标和大小,都可以包含更新结果字段的逻辑。 DB 大部分用于存储观察记录,但在这种情况下,结果是一个计算字段,可以从已存储在数据库中的数据(目标和大小)中创建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2018-03-30
    • 2011-06-09
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多