我正在编写一个允许用户跟踪体育锻炼的应用程序。
数据结构如下:
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字符串,因为我需要查询数组中的值。
有人可以指出我在构造数据方面的正确方向吗?
答案 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
这有点灵活,例如,如果您将来可能需要重命名练习,或者如果您想跟踪多个练习实例,每个实例都有自己的关联集。