🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: PostgreSQL - jak najlepiej definiować dynamiczne pola?

#194105
From: Marek
Date: Mon, 09 Feb 2015 14:49
46 lines
3718 bytes
W dniu 2015-02-09 o 09:40, nkab@toya.net.pl pisze:

> Przy księgowości bez indeksów ciężko byłoby zliczać dane powiązane
> z innymi tabelami, no ale to są sztywne rozwiązania, a kolega Marek
> chce dowolności w wyborze pól.

Czytam, czytam Waszą rozmowę :-)

Wyjaśnię: tak, chcę dowolności choć zależnie od przyjętego rozwiązania 
nie musi być to "frywolne powiązanie" bez indeksów. Jeśli przyjęlibyśmy 
koncepcję dublowania wartości pól:
a) W tabeli wartości pól
b) W dynamicznie dostawianych polach w tabeli właściwej (tzn. 
zawierającej dane, które rozszerzamy o dodatkowe pola) z narzuceniem 
typu pól i budowaniem na nich indeksów gdzie trzeba.

To wtedy nie ma problemu w tworzeniu relacji. Aczkolwiek dynamiczne 
dostawianie pól to nie jest profesjonalne podejście...

Na wszelki wypadek zobrazuję co mam na myśli. Jakaś tabela, powiedzmy, 
że to "dokument", ma pola A, B i C. W trakcie pracy aplikacji klient 
zażyczył sobie mieć pole D, które np. ma zawierać ID do innej tabeli. 
Wchodzi w edytor rozszerzeń, dodaje sobie nowe pole i informuje system 
"to pole ma linkować do ID autora dokumentu" przykładowo. I co się wtedy 
dzieje:

1. W tabeli dodatkowych pól powstaje pole D, jego opisy etc.
2. W tabeli wartości następuje skojarzenie w/w pola D z rekordem w 
tabeli "dokument" i w uniwersalnym typie text pola "wartość" jest 
przechowywana liczba oznaczająca ID użytkownika w tabeli userów. No ale 
raczej kiepsko byłoby budować indeksowanie na polu tekstowym, które raz 
jest liczbą a innym razem tekstem.
3. Z w/w powodu dostawiamy pole danych D do tabeli "dokument" (lub 
tabeli powiązanej poprzez dziedziczenie - inherit) już właściwego typu, 
czyli int4 i tworzymy na nim indeks (dynamicznie również - czyli z 
poziomu działania logiki aplikacji).

Zazwyczaj w polach rozszerzonych bardzo mało danych będzie 
przechowywanych (liczby, krótkie teksty) więc ich dublowanie nie będzie 
bolesne objętościowo. Jednocześnie otrzymujemy łatwy dostęp do tych 
danych poprzez select * from dokument, działają constrainy.


-- 
Pozdrawiam,
Marek
Technical Details
Message-ID: <mbahen$9em$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> <mavv3h$n7l$1@news.icm.edu.pl> <8e718611-b061-4aaa-9fb0-1687681dcb94@googlegroups.com> <mb25li$mon$1@news.icm.edu.pl> <f6a66af6-182a-47d7-a297-7a1b998ebee2@googlegroups.com> <mb2g3c$isp$1@news.icm.edu.pl> <e64d3758-bdb8-4f73-b75a-3aa9b5f789e6@googlegroups.com> <54d5e7a7$0$2188$65785112@news.neostrada.pl> <1e428ab3-3e7f-4a50-a7b0-d5d458ad2a65@googlegroups.com> <54d66936$0$2206$65785112@news.neostrada.pl> <89a37815-f4ab-423f-bdc8-13ff32bb4f7e@googlegroups.com> <ac14966e-c0e4-498b-9257-25d1e6363d0b@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: Mon, 09 Feb 2015 15:49:58 +0100
Organization: ICM, Uniwersytet Warszawski
Lines: 46
Message-ID: <mbahen$9em$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> <mavv3h$n7l$1@news.icm.edu.pl> <8e718611-b061-4aaa-9fb0-1687681dcb94@googlegroups.com> <mb25li$mon$1@news.icm.edu.pl> <f6a66af6-182a-47d7-a297-7a1b998ebee2@googlegroups.com> <mb2g3c$isp$1@news.icm.edu.pl> <e64d3758-bdb8-4f73-b75a-3aa9b5f789e6@googlegroups.com> <54d5e7a7$0$2188$65785112@news.neostrada.pl> <1e428ab3-3e7f-4a50-a7b0-d5d458ad2a65@googlegroups.com> <54d66936$0$2206$65785112@news.neostrada.pl> <89a37815-f4ab-423f-bdc8-13ff32bb4f7e@googlegroups.com> <ac14966e-c0e4-498b-9257-25d1e6363d0b@googlegroups.com>
NNTP-Posting-Host: 89-69-222-145.dynamic.chello.pl
Mime-Version: 1.0
X-Trace: news.icm.edu.pl 1423493399 9686 89.69.222.145 (9 Feb 2015 14:49:59 GMT)
X-Complaints-To: usenet@news.icm.edu.pl
NNTP-Posting-Date: Mon, 9 Feb 2015 14:49:59 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0
In-Reply-To: <ac14966e-c0e4-498b-9257-25d1e6363d0b@googlegroups.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit