【问题标题】:Database design for user weight history [closed]用户体重历史的数据库设计[关闭]
【发布时间】:2019-05-22 06:57:48
【问题描述】:

我正在开发一个简单的应用程序,用户可以在其中跟踪他们的体重历史。

我有以下表格:

出于演示的目的,我将使用 5 的用户 ID。

当我想保存用户的体重历史时,我会这样做:

INSERT INTO userWeight (userID, weight) VALUES (5, 76)

这会将权重保存到数据库中。

当我想检索特定用户的体重历史记录时,我会这样做:

SELECT weight, timee FROM userWeight WHERE userID = 5

我的问题是,这似乎是一种有趣的做事方式。我可以使用更好的数据库设计吗?

通过这种设计,所有用户的权重都存储在一个表中,这是正确的方法吗?

谢谢。

【问题讨论】:

  • 对我来说似乎是一个合理的方法。
  • 为什么你认为这是一种有趣的做事方式?这似乎是最自然的方式。您不希望在权重表中复制用户信息,因为这将是多余的。这是第一个标准化步骤。
  • 如果您正在考虑为每个用户创建一个单独的权重表,请立即将这个概念抛在脑后。变量信息应该在表数据中,而不是表或列名。
  • 50K 并不大,数据库的设计目的远不止于此。您可以使用数据库分区,而日期通常是更好的分区方案(因为较旧的记录通常不太有趣)。
  • 为了比较,我们将购买交易表按年份划分。每年的表格包含 1200 万行。

标签: mysql sql database


【解决方案1】:

您的设计是正确的,因为它在用户和在不同时间获取的许多权重之间实现了一对多 (1:M) 关系。

一个简单的搜索证实了这种安排。例如,这篇One-to-many relationship 文章或the Wikipedia definition

使用此模型,您可以从特定用户那里获得一系列权重,并按时间对它们进行排序。将权重保存在用户表上的实现是不正确的,因为每次添加新权重时用户表中的列数都必须增加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多