🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #194088

Re: PostgreSQL - jak najlepiej definiować dynamiczne pola?

#194088
From: Marek
Date: Thu, 05 Feb 2015 14:35
56 lines
3466 bytes
W dniu 2015-02-05 o 14:18, M.M. pisze:

> On Sunday, February 1, 2015 at 11:20:40 AM UTC+1, Marek wrote:
>> Hmm... jak pobieżnie się zorientowałem (bo to z tego co widzę spora
>> maszyna), to chodzi o programowe tworzenie struktur i przechowywanie ich
>> np. w jednym polu bazy danych czy pliku na dysku? Czy nie jest to armata
>> na wróble i to pracująca w oderwaniu od bazy danych?
> Nie wierzę w wydajność tych rozwiązań.

No ale nie wiem za bardzo, o których rozmawiamy: czy o rozwiązaniach 
bazodanowych czy o plikowych.

>> Bazując na PHP to żaden problem bez stosowania takich wyrafinowanych
>> dodatków. Wystarczy zastosować XML. Banalna nawigacja, dodawanie pól
>> jakie tylko chcesz itp operacje. Bez problemu koduje się to i dekoduje
>> jako string do przechowania w bazie.
> Jeśli tylko php, to chyba lepiej serializowanie zmiennych?

Niekoniecznie. Trawersowanie danych jest łatwiejsze w XML (Xpath). A po 
drugie nie wiem czy zaraz nie przyda się to dla JS. Lepiej stosować 
bardziej uniwersalny format niż potem głową w mur walić :-)

>> Jednakże kłopot jest w tym, że w ten sposób tworzymy wyłącznie dane do
>> odczytu. Sortowanie, wyszukiwanie po tak uwikłanych danych nie jest
>> możliwe z poziomu SQL.
> Niestety, to spory problem. Czasami pomaga przygotowanie osobnych
> zbiorów danych na każdą okoliczność.

Hmmm.. w zasadzie racja. Przemyślę to.

> Odpowiedzieli Ci już. Jest kilka sposobów.
> 1) Robisz dodatkową tabelę (klucz_obcy,pole,wartosc)

Sęk w tym, że wtedy wyszukiwanie po kilku polach bardzo rozbudowuje sql. 
Pojawiają się wielokrotne JOINy. Odczyt takich "dodatkowych" pól wymaga 
odrębnego zapytania sql. Sortowanie po takich polach to też wyzwanie.

> 2) Tablice

Czyli moja propozycja z wątku otwierającego... Chyba na to się zdecyduję 
mimo iż będzie potrzebne rzutowanie typów przy wyszukiwaniu / 
sortowaniu. Ale zastanawiam się nad dublowaniu danych (zgodnie z Twoją 
sugestią). Np. przechowujemy je zarówno w tablicy jak i w strukturze #1. 
Plpgsql pilnowałby synchronizacji wartości i ilości pól. Indeks pozycji 
w tablicy mógłby odpowiadać kluczowi głównemu pola z tabeli dostępnych pól.

> 3) Zwyczajnie dodajesz kolumnę do tabeli

Czyli nie przejmować się zasadami tworzenia baz danych i pozwolić 
aplikacji na modyfikowanie struktury tabeli?



-- 
Pozdrawiam,
Marek
Technical Details
Message-ID: <mavv3h$n7l$1@news.icm.edu.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!.POSTED!not-for-mail
References: <mag0cl$o93$1@news.icm.edu.pl> <slrnmcqmva.5h7.tom@tv2.dom.local> <makuln$8ps$1@news.icm.edu.pl> <00393f98-4afb-4213-934d-9156200c7bcb@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!.POSTED!not-for-mail
From: Marek <precz@spamowi.com>
Newsgroups: pl.comp.bazy-danych
Subject: Re: PostgreSQL - jak najlepiej definiować
 dynamiczne pola?
Date: Thu, 05 Feb 2015 15:35:25 +0100
Organization: ICM, Uniwersytet Warszawski
Lines: 56
Message-ID: <mavv3h$n7l$1@news.icm.edu.pl>
References: <mag0cl$o93$1@news.icm.edu.pl> <slrnmcqmva.5h7.tom@tv2.dom.local> <makuln$8ps$1@news.icm.edu.pl> <00393f98-4afb-4213-934d-9156200c7bcb@googlegroups.com>
NNTP-Posting-Host: 89-69-222-145.dynamic.chello.pl
Mime-Version: 1.0
X-Trace: news.icm.edu.pl 1423146929 23797 89.69.222.145 (5 Feb 2015 14:35:29 GMT)
X-Complaints-To: usenet@news.icm.edu.pl
NNTP-Posting-Date: Thu, 5 Feb 2015 14:35:29 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0
In-Reply-To: <00393f98-4afb-4213-934d-9156200c7bcb@googlegroups.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit