Historia wymaga pasterzy, nie rzeźników.

Niektóre z nich uruchamiane są jednorazowo w momencie tworzenia bazy lub też jej kasowania. Inne pozwalają na wykonanie pewnych analiz
(na obecnym etapie rozwoju aplikacji jedynie w minimalnym zakresie). Większość danych ładowana jest bez natychmiastowego indeksowania co znacząco przyśpiesza całą operację.
Dopiero po załadowaniu danych do tabel następuje zaindeksowanie wszystkich wymaganych pól w konkretnych tabelach. Na samym końcu wykonywana jest „odkurzenie” bazy
pozwalająca PostgreSQL’owi na empiryczną i statystyczną optymalizację wyszukiwania
danych. Poniższe zestawienie prezentuje i omawia wywołania wszystkich skryptów.
#!/bin/sh
# skrypt 20-zaloztabele
#
echo Zalozenie tabel bazy emarket SQL...
#
KAT_SQL='/home/bazy/emarket/sql'
SQL='/usr/local/pgsql/bin/psql -d emarket -q -f'
echo
echo cennik...
$SQL $KAT_SQL/create/create_table_cennik.sql
echo cenydew...
$SQL $KAT_SQL/create/create_table_cenydew.sql
echo dostawcy...
$SQL $KAT_SQL/create/create_table_dostawcy.sql
echo magazyn...
$SQL $KAT_SQL/create/create_table_magazyn.sql
echo odbiorcy...
$SQL $KAT_SQL/create/create_table_odbiorcy.sql
#echo informacje...
$SQL $KAT_SQL/create/create_table_informacje.sql
echo
echo Koniec.
Powyższy pod-skrypt „20-zaloztabele” odpowiedzialny jest za początkowe założenie
niezbędnych tabel w bazie SQL. Wywołuje już bezpośrednio, napisane w dialekcie języka SQL92 polecenia zakładające poszczególne tabele z polami określonego typu.
24
#!/bin/sh
# skrypt 20-zaladujtabele
#
echo Zaladowanie danych do tabel bazy emarket SQL...
#
KAT_SQL='/home/bazy/emarket/sql'
SQL='/usr/local/pgsql/bin/psql -d emarket -q -f'
echo
echo cennik...
$SQL $KAT_SQL/load/load_table_cennik.sql
echo cenydew...
$SQL $KAT_SQL/load/load_table_cenydew.sql
#echo dostawcy...
#$SQL $KAT_SQL/load/load_table_dostawcy.sql
#echo odbiorcy...
#$SQL $KAT_SQL/load/load_table_odbiorcy.sql
echo magazyn...
$SQL $KAT_SQL/load/load_table_magazyn.sql
echo
echo Przy okazji skorygujemy bledne dane...
# pewne dane w zasilajacych zbiorach sa zduplikowane lub nie maja
# wypelnionych wymaganych pol (zaszlosc historyczna) poprawiamy to tutaj
SQL='/usr/local/pgsql/bin/psql -d emarket -q -c'
$SQL "UPDATE magazyn SET data='19940505' where data=' ';"
#$SQL "DELETE FROM cenydew where indeks='984001' and cenat='1036.07';"
SQL='/usr/local/pgsql/bin/psql -d emarket -q -f'
echo uniqmagazyn...
$SQL $KAT_SQL/load/load_table_uniqmagazyn.sql
echo Koniec.
Powyższy pod-skrypt „20-zaladujtabele” wywołuje skrypty SQL92 wczytujące i korygujące dane bezpośrednio do tabel w bazie. Niektóre dane (np. odbiorcy i dostawcy) nie są
wczytywane na obecnym etapie rozwoju sklepu internetowego aż do momentu gdy aplikacja zostanie rozbudowana o moduły współpracy z partnerami handlowymi (B2B), realizację
wymiany partnerskiej, dynamicznie konstruowane cenniki w zależności od podpisanych
umów na upusty globalne itp.
#!/bin/sh
# Skrypt 40-zaladujkatalog
#
echo Zaladowanie danych do tabel bazy emarket SQL...
#
KAT_SQL='/home/bazy/emarket/sql'
SQL='/usr/local/pgsql/bin/psql -d emarket -q -f'
echo
echo ladujemy dane do tabeli katalog...
$SQL $KAT_SQL/load/load_table_katalog.sql
echo indeksujemy tabele katalog...
$SQL $KAT_SQL/create/create_index_katalog.sql
echo
echo Koniec.
25
Powyższy pod-skrypt generuje dane do dodatkowo tworzonej tabeli zawierającej wyfiltrowane dane z tabeli zawierającej dane ze wszystkich magazynów. W aplikacji
finansowo księgowej firmy, każdy magazyn zawiera towary współistniejące w innych
magazynach. Każdy z magazynów posiada ten sam indeks dla towaru, zgodny z innymi
indeksami w pozostałych magazynach. Każdy z nich ma swój własny stan magazynowy
(dyspozycyjny i księgowy) oraz cenę. Istnieje także globalna tabela cen dewizowych
przechowująca wspólną cenę dla wszystkich magazynów. Idea działania aplikacji
magazynowej w firmie jest taka, iż gdy istnieje dla danego towaru cena w centralnym cenniku to właśnie ona ma przewagę nad ceną lokalną w danym magazynie, dlatego tutaj właśnie zdecydowano się na zagregowanie tych danych w jeden wspólny rekord będący podstawą do dalszego działania sklepu.
#!/bin/sh
# skrypt 40-zalozindeksy
echo Zalozenie indeksow bazy emarket SQL...
#
KAT_SQL='/home/bazy/emarket/sql'
SQL='/usr/local/pgsql/bin/psql -d emarket -q -f'
echo
echo cennik...
$SQL $KAT_SQL/create/create_index_cennik.sql
echo cenydew...
$SQL $KAT_SQL/create/create_index_cenydew.sql
#echo dostawcy...
#$SQL $KAT_SQL/create/create_index_dostawcy.sql
#echo magazyn...
#$SQL $KAT_SQL/create/create_index_magazyn.sql
#echo odbiorcy...
#$SQL $KAT_SQL/create/create_index_odbiorcy.sql
echo uniqmagazyn...
$SQL $KAT_SQL/create/create_index_uniqmagazyn.sql
echo informacje...
$SQL $KAT_SQL/create/create_index_informacje.sql
echo
echo Koniec.
Powyższy pod-skrypt indeksuje wszystkie potrzebne pola w tabelach. Wykonywane jest to dopiero po wczytaniu całości danych gdyż w ten sposób uniknięto przebudowywania
indeksów przy wczytywaniu danych do tabel i uzyskano znaczny wzrost szybkości całej
operacji importu danych. Silnik bazy danych w takim przypadku nie wykonuje blokad przy dodawaniu rekordów a i same dane są fizycznie na dysku nie pofragmentowane, co miało by miejsce, gdyby równocześnie trwało przeplatanie wczytania rekordu i zaktualizowanie
indeksu. Co prawda leżący u podstaw systemu plików mechanizm dba o takie
26