在关系数据库中存储整数数组
Store Arrays of Integers in a Relational Database
我正在编写一个允许用户跟踪健身锻炼的应用程序。
数据结构如下:
一个 exercise
有一个 set
的数组,其中每个 set
都有一个 reps
和 weight
的值。
我可以用两种方式在 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 感觉紧凑且高效(尽管我必须检查reps
和 weights
数组在写入数据之前长度相等。
但是,我不知道如何使用关系数据库(例如 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
这更灵活一些,例如,如果您将来可能需要重命名您的练习,或者如果您想要跟踪多个练习实例,每个实例都有自己的关联集。
我正在编写一个允许用户跟踪健身锻炼的应用程序。
数据结构如下:
一个 exercise
有一个 set
的数组,其中每个 set
都有一个 reps
和 weight
的值。
我可以用两种方式在 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 感觉紧凑且高效(尽管我必须检查reps
和 weights
数组在写入数据之前长度相等。
但是,我不知道如何使用关系数据库(例如 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
这更灵活一些,例如,如果您将来可能需要重命名您的练习,或者如果您想要跟踪多个练习实例,每个实例都有自己的关联集。