Кстати, я хочу ответить на вопрос, насколько сложно управлять всеми данными в одной таблице, а не иметь несколько таблиц.
Исходное предположение: вы захотите по крайней мере иметь таблицу метаданных для хранения метаданных эксперимента и одну или несколько таблиц для хранения измерений.
Если вы используете подход «Я хочу таблицу для каждого набора измерений», вам нужно знать имя таблицы. Таким образом, ваша таблица метаданных будет выглядеть примерно так:
Metadata
----------
experimentName
experimentLocation
experimentDateTime
...
measurementTableName
И таблица для каждого эксперимента, каждый из которых выглядит одинаково:
Measurement0001 Measurement0002 Measurement0003 Measurementt0004
-------------- -------------- -------------- --------------
measurementNum measurementNum measurementNum measurementNum
voltage voltage voltage voltage
amps amps amps amps
Затем в вашей программе вам сначала нужно получить метаданные:
select * from Metadata where experimentName='Johnson Controls 1'
, который, помимо прочего, будет возвращать measureTableName для интересующего эксперимента (скажем, Measurement0002). Тогда ваш следующий запрос:
select * from Measurement0002 order by measurementNum
Теперь давайте возьмем подход «сохранить все данные в таблице измерений». Ваша таблица метаданных будет выглядеть так:
Metadata
----------
experimentName
experimentLocation
experimentDateTime
...
measurementSetID
И таблица для всех экспериментов.
Measurement
--------------
measurementSetID
measurementNum
voltage
amps
Затем, как и прежде, сначала нужно получить метаданные:
select * from Metadata where experimentName='Johnson Controls 1'
, который, помимо прочего, даст вам MeasureSetID, который вы будете использовать для получения только измерений из желаемого набора (скажем, id = 2). Тогда ваш следующий запрос:
select * from Measurement where measurementSetID=2 order by measurementNum
Итак, давайте сравним два подхода ... Запросы метаданных по существу идентичны. Единственное отличие состоит в том, что в первом случае вы извлекаете measureTableName для желаемой экспериментальной таблицы; в то время как во втором случае вы извлекаете measureSetId для нужных записей в таблице измерений.
Запросы на выборку измерений также практически одинаковы:
select * from Measurement0002 order by measurementNum
select * from Measurement where measurementSetID=2 order by measurementNum
Единственной переменной является либо имя таблицы, либо measureSetID:
select * from <tablename> order by measurementNum
select * from Measurement where measurementSetID=<setID> order by measurementNum
Результат запроса почти тот же, второй подход просто даст вам дополнительный столбец в ваших данных (measureSetID), который вы можете игнорировать, потому что все возвращаемые строки будут иметь одинаковый идентификатор набора.