Rozbudowane opisy kolumn w innej tabeli - wyciąganie danych

0

Cześć,
Korzystam z bazy danych w pliku MDB.
Mam następujące tabele:

tb1(ups_id, par1_value, par2_value, ...., par100_value)
tb2( par_id, name, description, unit)

tb1 zawiera ok 70 rekordów urządzeń, które charakteryzują się parametrami zawartymi w par_value
tb2 zawiera 100 rekordów, tyle ile par_value - jest to dodatkowa informacja odnośnie danego parametru. Name jest taki sam jak nazwa kolumny z tb1.

Proszę o pomoc w napisaniu zapytania, które pozwoli mi wyświetlić listę wszystkich parametrów danego urządzenia wraz z tymi dodatkowymi opisami do tych parametrów, czyli:

  1. par1_value, name, description, unit
  2. par2_value, name, description, unit
    ...
  3. par100_value, name, description, unit

Próbowałem dodać dodatkową tabelę tb12(id, ups_id, par_id) ale nie wiem jak ogarnąć więcej niż jeden par_value.

3

musisz zrobić joina z tb2 100 razy - po jednym dla każdego pola. Inna sprawa, że struktura jest do d**y jednym słowem

0

A un pivot by tu się nie sprawdził ?
Pierwszy z brzegu przykład dla demonstracji: https://stackoverflow.com/questions/19055902/unpivot-with-column-name

0

@abrakadaber: join 70 razy to mija się z celem. Już wolę zmienić strukturę. Czy masz jakiś pomysł? Na tę chwilę baza jest na MDB, docelowo będzie przeniesiona również do bazy plikowej ale zrobionej w czymś nowszym.

2

Nasuwa się taka struktura:

params(param_id, name, description, unit)
tbl2(ups_id, param_id, value, order) - order to jeśli potrzebowałbyś np. żeby parametry miały własną kolejność dla każdego ups_id
Najważniejszą zaletą takiej struktury jest rozszerzalność (bo dodanie kolejnego parametru nie wiąże się ze zmianą definicja żadnej tabeli i na dobrą sprawę nie potrzeba też modyfikować zapytań, chyba że pivota) oraz brak konieczności pisania 100 joinów :)
Natomiast największą wadą jest konieczność robienia pivota jeśli będziesz chciał mieć wynik w postaci tabelarycznej (to co teraz masz od razu), np. tak

x| par1 | par2 | par3
---------------- | -------------------
ups_id_1| value1_1 | value2_1 | value3_1
ups_id_2| value1_2 | value2_2 | value3_2

0

@leonarth:
a co zrobisz kiedy pojawią się kolejne atrybuty, dodasz następne ileś tam pól w tabeli ?

EAV :
https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model

0

@grzegorz_so: Wszystkie atrybuty są unikatowe, więc nie wiem czy rozdzielenie tego na kilka tabel miałoby sens. Gdy potrzebuję tylko samych wartości to ta struktura idealnie się sprawdza. Zachciałem natomiast, aby te wartości miały opisy, żebym nie musiał ich dodawać w kodzie programu aplikacji.

0

@leonarth:
nie kilka tabel tylko dwie, zamiast "tb1" masz "enities" i "attributes" i do tego trzecia , tb2, z opisami atrybutów

1 użytkowników online, w tym zalogowanych: 0, gości: 1