这是一个相当简单的用例,我认为得到是"标准"解决方案,但我找不到任何例子。
我对SQL很新(刚刚开始学习),所以也许它显而易见。
假设我有三个数据阵列:
seconds: [0, 1, 2, 3, 4, 5, 6]
height: [0, 10, 20, 25, 20, 10, 0]
speed: [10,10, 5, 0, -5,-10, 0]
我将获得更多高度和速度数组,但它们都具有相同的秒/时间戳。
问题:
同样,我认为这个问题应该很容易愚蠢,但如果这样的事情在SQL中不容易做到,我想知道它是否是我应该使用的数据库。
由于
感谢binderbound获得答案
我从Excel这样的角度思考问题,你不希望以列格式向下存储数据。但它现在非常有意义,因为你有sql的强大功能来生成你想要的查询。你可以把你的数据放在他的答案建议中,并且很容易查询它你想要的方式。
非常感谢!
答案 0 :(得分:2)
您不必创建包含0,1,2,3等列的表格。我不建议使用6列。它只是糟糕的架构设计,即使它可能适用于您的情况。 而不是连续存储整个试验,每行应该只存储一个单独的秒。这样,将来添加更多秒是一个相当简单的过程
遵循这个原则,这是一个粗略的架构
HeightSpeedEntry
_______________
TrialId PK int
Seconds PK int
Height PK int
Speed PK int
要创建此表:
CREATE TABLE HeightSpeedEntry(
TrialId int,
Seconds int,
Height int,
Speed int,
CONSTRAINT pk_trial_seconds PRIMARY KEY (TrialId, Seconds));
逐行插入数据
INSERT INTO HeightSpeedEntry(TrialId, Seconds, Height, Speed)
VALUES (1, 0, 0, 10)
INSERT INTO HeightSpeedEntry(TrialId, Seconds, Height, Speed)
VALUES (1, 1, 10, 10)
检索一组记录
SELECT * FROM HeightSpeedEntry
WHERE TrialId = 1
ORDER BY Seconds
如何以非手动方式将数组实际传递到insert语句取决于数组的来源。
重新澄清一下,我们在这里做的是将您的记录转换为:
seconds: [0, 1, 2, 3, 4, 5, 6]
height: [0, 10, 20, 25, 20, 10, 0]
speed: [10,10, 5, 0, -5,-10, 0]
到此:
HeightSpeedEntry: [1, 0, 0, 10 ]
HeightSpeedEntry: [1, 1, 10, 10 ]
HeightSpeedEntry: [1, 2, 20, 5 ]
HeightSpeedEntry: [1, 3, 25, 0 ]
HeightSpeedEntry: [1, 4, 20, -5 ]
HeightSpeedEntry: [1, 5, 10, -10]
HeightSpeedEntry: [1, 6, 0, 0 ]