Tema: MS SQL : rows vs columns
Autorius: bala nemate
Data: 2009-04-29 17:18:35
hoj hoj,

reiktų protingo patarimo, kaip optimaliau db struktųrą susidėlioti...

Yra tam tikros objetų klasės, kurios turi savo savybes. Dalis jų yra
bendros (kaip Gamintojas, ProduktoKodas), dalis – kiekvienai klasei savos
(vieni objektai turi Galiojimo Laiką, kiti – Kainą ir t.t.) Reikia
duombazėje sukrauti informaciją apie objektus, kurie priklauso tom klasėms. 
Misliju, kaip geriau lentelės struktūrą susidėlioti – ar standartiškai –
kiekvienai sąvybei po stulpą

Manufacturer | ProductCode | Price | ValidTo |ClassId |
-------------+-------------+-------+---------+--------+
ABB          | AC500       | 1000  | NULL    | 1      |
Siemens      | DKS45kW     | NULL  | 2015    | 2      |
Danfoss      | DKD6kW      | 500   | 2010    | 3      |

ar daryti stulpus tik tom sąvybėms, kurios yr vienodos visiems objektams, o
kitas – dėti į eilutes (PropertyName ir PropertyValue)

Manufacturer | ProductCode | PropertyName | PropertyValue | ClassId |
-------------+-------------+--------------+---------------+---------+
ABB          | AC500       | Price        | 1000          | 1       |
Siemens      | DKS45kW     | ValidTo      | 2015          | 2       |
Danfoss      | DKD6kW      | Price        | 500           | 3       |
Danfoss      | DKD6kW      | ValidTo      | 2010          | 3       |

Antras būdas gal painesnis, bet leidžia turėti didesnį objektų aprašo
lankstumą – jei atsirastų naujų sąvybių, tiem objetam pridedi po papildomą
eilutę ir viskas. Pirmu atveju, reikia keisti lentos struktūrą, pridedant
naują stulpą (arba atimant, jei sąvybė dingsta). Faktas, kad struktūra
dažnai keisis, todėl reikia kiek įmanoma lanksčiau pasidaryt.

Kitas klausimas dėl performanc’o – ar antru atveju jis ženkliai nekris?
Kalba eina apie lenta su <= 300k įrašų. Ar vienu ar kitu atveju, duomenys
pasiimami per view‘us, nes reiks join‘int su kitom lentom.

dėkui už pamastymus,
-- 
bn/mj
icq : 171288416
skype : bala.nemate
"The blues ain't about making yourself feel better.
it's about making other people feel worse."
					-- Bleeding Gums Murphy