Pôjdem hneď k veci
- Potrebujem ukladať medicínske dáta, ktoré chodia vo frameoch. Viem framerate, číslo frameu a hodnotu (real, resp. DECIMAL). Pekný príklad je meranie EMG.
Takže vám postupně chodí nějaká časová řada, tj. jedna skalární hodnota (+ ty doplňující informace ukládané do sloupců Parameter1, ..., Parametr5)? Potřebujete s těmi daty pak provádět něco dalšího (např. nad nimi provádět dotazy - počítat průměr apod.) nebo je potřebujete jenom uložit?
Jakou DB vlastně používáte? MySQL, PostgreSQL, něco komerčního?
Problém je v tom, že v súčasnosti sa dáta ukladajú ako parametre (5 FK do číselníkov) a k nim sa priradí 100 hodnôt do sto stĺpcov tabuľky. Tu je ten problém, že ak je počet frameov iný ako 100, tak sa to musí dopočítať, poprípade zahodiť. Preto by som chcel spraviť presnejšie ukladanie - to jest uloži sa len to, čo sa nameralo.
Súčasná tabuľka:
|Parameter1|Parameter2|Parameter3|Parameter4|Parameter5|0|1|2|......|100|
Rozmýšľal som, že spravím nasledujúcu zmenu:
|Parameter1|Parameter2|Parameter3|Parameter4|Parameter5|Cislo frameu|Hodnota|
Tu je problém, že sa mi počet záznamov prakticky zostonásobí. Ešte dodám, že pôvodných záznamov je niečo cez jeden milión. To, že by som mal 100 mega riadkov asi prežijem, ale horšie vidím plytvanie priestorom, pretože 100-krát zopakujem všetky parametre a budem meniť iba číslo frameu a hodnotu. Súčet veľkosť parametrov nedám pod 14 bytov, čo dáva 1.4kB odpadu na jedno meranie (ak predpokladáme 100 frameov - obecne sa počet frameov pohybuje od 50 do pár stoviek). Aby ste nemuseli počítať, tak po zmene by DB narástla o cca 1.4GB 
Nejaké nápady, ako ukladať takýto typ dát?
Tak z pohledu teorie je ta první varianta dost neoptimální - konec konců problémy jste popsal sám. Ta druhá varianta je "správnější" a pokud chcete jít ještě o krok dál tak ji dekomponujte na dvě. V jedné bude entita "měření" s umělým PK a ve druhé (kardinalita 1:*) budou naměřené hodnoty a FK odkazující na ten umělý PK. Tj. něco jako
mereni:
|PK|Parameter1|Parameter2|Parameter3|Parameter4|Parameter5|
hodnoty:
|PK|Cislo frameu|Hodnota|
Výhoda je v tom že nebudete pořád opakovat ty parametry - budou jenom 1x v té první tabulce, v druhé tabulce je jenom ten umělý PK (typicky integer). Kolik ušetříte závisí na velikosti těch parametrů (tj. čím jsou delší tím víc ušetříte) apod.
Nevýhoda je že pro dotazování musíte ty tabulky joinovat (a nebo si vyhledat PK v první tabulce a pak se v druhém kroku dotazovat do té druhé). Jak moc to vadí závisí na tom jak to používáte.
Další možností je využít různých specifických vlastností jednotlivých databází - např. PostgreSQL umí pracovat s poli, takže si tu tabulku můžete definovat takhle:
CREATE TABLE mereni (
PARAMETR1 INT,
PARAMETR2 INT,
PARAMETR3 INT,
PARAMETR4 INT,
PARAMETR5 INT,
HODNOTY DECIMAL[]
)
a pak do toho data vkládat jednoduše
INSERT INTO mereni
VALUES (1, 2, 3, 4, 5, ARRAY[20000, 25000, 25000, 25000]);
případně s tím manipulovat pomocí 'array_append(pole, prvek)' apod.
U MySQL o ničem takovém nevím, komerční DB podobné věci mají (např. Oracle má varrays).