SQL:插入和查询有组织数据列表的最佳方法是什么?

时间:2014-11-17 04:25:17

标签: sql list sorted

这是一个相当简单的用例,我认为得到是"标准"解决方案,但我找不到任何例子。

我对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]  

我将获得更多高度和速度数组,但它们都具有相同的秒/时间戳。

问题:

  • 创建用于存储此数据的表/表的最佳方法是什么?
    • 我目前的理解是,我必须创建一个表格,被命名为" 0"," 1",&#34 ; 2"," 3"等等 - 这是正确的???
  • 使用SQL命令实际存储此数据的最佳方法是什么?
  • 检索此数据的最佳方法是什么,以便所有内容都与我所说的相同?

同样,我认为这个问题应该很容易愚蠢,但如果这样的事情在SQL中不容易做到,我想知道它是否是我应该使用的数据库。

由于

感谢binderbound获得答案

我从Excel这样的角度思考问题,你不希望以列格式向下存储数据。但它现在非常有意义,因为你有sql的强大功能来生成你想要的查询。你可以把你的数据放在他的答案建议中,并且很容易查询它你想要的方式。

非常感谢!

1 个答案:

答案 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  ]