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

时间:2019-03-16 23:41:15

标签: sql-server database data-structures database-design 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字符串,因为我需要查询数组中的值。

有人可以指出我在构造数据方面的正确方向吗?

2 个答案:

答案 0 :(得分:1)

SQL Server中没有设置结构,因此您需要使用1..n关系。

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

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

表2具有表1的外键(Tablr1Ref)

此设计还允许您简单地添加/删除(重复和权重)

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

答案 1 :(得分:1)

有许多不同的选择,具体取决于您的一对多关系。这有两种可能:

使用列创建单个表:

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

这具有简单地关联您上面显示的数据的优势。

或者:

创建练习表:

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

还有另一个表格:

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

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