1

Temat: Dynamiczna struktura bazy danych-Wydajność

Witam,

Chciałbym przedstawić mój problem. Otóż piszę prosty program do prowadzenia magazynu (+faktury itp) i zrobiłem możliwość dodawania pluginów. Niestety przez to nie sposób jest przewidzieć jak będzie wyglądała struktura bazy danych. Wiem, że struktura powinna być stała, ale nie uniknę dodawania dodatkowych tabel/kolumn.

Moje pytanie brzmi, co jest wydajniejsze dodawanie dodatkowych kolumn(co pewnie spowoduje poszatkowanie danych) czy dodawanie tabel z relacjami do tabeli głównej (co pewnie wydłuży czas przy łączeniu tabel). Zakładam, że plugin obejmuje wszystkie towary (np. czytnik kodów paskowych). A może jest jeszcze jakieś inne wyjście z tego typu sytuacji?

Pozdrawiam

2

Odp: Dynamiczna struktura bazy danych-Wydajność

trcohę nie rozumiem jaka jest relacja pomiędzy pluginem a kolumną.
Możesz podać jakis konkretny przykład bazy i w jaki sposób sie zmieni po dodaniu pluginu,

3

Odp: Dynamiczna struktura bazy danych-Wydajność

np. Mam Tabele towary w której mam:
id, Symbol, Nazwa, Podatek, Opis

(Teraz załóżmy, że ktoś używa programu np. przez pół roku i ta tabela ma już dość sporo rekordów)
Użytkownik instaluje plugin, np. Kody paskowe i trzeba dodać dodatkową kolumnę lub stworzyć tabelę (którą potem trzeba będzie łączyć z główną przez JOIN)
Kody Paskowe:
TowarID,Kod

I teraz chodzi o wydajność, nie znam się dokładnie na tym co jest wewnątrz bazy ale wyobrażam sobie to tak, że dane były poukładane czyli obok siebie kolumny jednego rekordu (albo blisko), ale jeśli ja dodam nową kolumnę to dane z tej kolumny polecą gdzieć na koniec chyba ze jest możliwość takiej "defragmentacji" bazy danych.

4

Odp: Dynamiczna struktura bazy danych-Wydajność

Wiersze w tabli są przechowywane na stronach (blokach bajtów) w systemie plików.
Nie ma możliwości aby jeden wiersz był na więcej niż jednej stronie (no chyba że wspomnimy tu o TOAST, ale o tym chyba nie chcesz sluchac smile ). Wiec dane zazwyczaj beda blisko siebie.
Ale problem upatruje tu w czymś innym. Jeśli tabela jest duża i dodasz do nie jakąś kolumnę to jeszcze chyba jakiś UPDATE trzeba bedzie puścić co? To nie stanowi dla ciebie problemu?

5

Odp: Dynamiczna struktura bazy danych-Wydajność

UPDATE w sensie całej tabeli? Raczej nie jest mi potrzebny smile nakładam, że domyślnie jest NULL i użytkownik sobie będzie kolejno zmieniał.
Czyli wydajniej jest dodać kolumnę niż tworzyć nową tabelę i używać JOIN?

Jeszcze takie małe pytanko (bo nie opłaca się chyba nowego tematu zakładać) jeżeli mamy jakąś tabelę B, która dziedziczy po tabeli A można jakoś łatwo przenieść rekord z A do B?

6

Odp: Dynamiczna struktura bazy danych-Wydajność

Jesli dziedziczy to pewnie ma tez jakies dodatkowe kolumny?
Nie wiem co znaczy 'łatwo przenieść', najprościej

insert into b select * from a where <warnuek na kolumny do prezeniesienia>;