在关系数据库中存储整数数组

Store Arrays of Integers in a Relational Database

我正在编写一个允许用户跟踪健身锻炼的应用程序。

数据结构如下:

一个 exercise 有一个 set 的数组,其中每个 set 都有一个 repsweight 的值。

我可以用两种方式在 JSON 中显示它:

示例 1:

{
    "id": "primary_key",
    "name": "bench press",
    "sets": [
        {
            "reps": 8,
            "weight": 60
        },
        {
            "reps": 7,
            "weight": 50
        },
        {
            "reps": 6,
            "weight": 40
        }
    ]
}

或者,我可以将 set 数组展平为两个数组,一个用于 reps,一个用于 weights,其中 reps[0]weights[0] 配对等等。

示例 2:

{
    "id": "primary_key",
    "name": "bench press",
    "reps": [8, 7, 6],
    "weights": [60, 50, 40]
}

虽然示例 1 代表了一个更熟悉的锻炼模型(它有一组,每组都有一定数量的重复和重量),但示例 2 感觉紧凑且高效(尽管我必须检查repsweights 数组在写入数据之前长度相等。

但是,我不知道如何使用关系数据库(例如 SQL Server 中的表来表示此数据。

我不想将 reps 和 weights 数组序列化为 JSON 字符串,因为我需要查询数组中的值。

任何人都可以为我指明构建数据的正确方向吗?

SQL服务器中没有集合结构,所以需要使用1..n关系。

Table1
======
ID (pk)
Name

Table2
======
ID (pk identity)
Table1Ref
Reps
Weights

Table2 有一个指向 Table1 的外键 (Tablr1Ref)

这种设计还可以让您简单地 add/remove(次数和重量)

另一个解决方案是使用 XML 列并使用 XPath 查询。

有很多不同的选项,具体取决于您的一对多关系。这里有几种可能性:

创建一个 table,包含以下列:

 Exercise     SetNumber    Reps    Weight
 ----------------------------------------
 Bench Press  1            8       60
 Bench Press  2            7       50

这样做的好处是可以简单地关联上面显示的数据。

或者:

创建一个table练习:

Exercise_ID    Exercise_Name
----------------------------
1              Bench Press

还有一个 table 用于集合:

 Exercise_ID     SetNumber    Reps    Weight
 ----------------------------------------
 1               1            8       60
 1               2            7       50

这更灵活一些,例如,如果您将来可能需要重命名您的练习,或者如果您想要跟踪多个练习实例,每个实例都有自己的关联集。