Article View: pl.comp.bazy-danych
Article #194088Re: PostgreSQL - jak najlepiej definiować dynamiczne pola?
From: Marek
Date: Thu, 05 Feb 2015 14:35
Date: Thu, 05 Feb 2015 14:35
56 lines
3466 bytes
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-mailReferences:
<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