Article View: pl.comp.bazy-danych
Article #194105Re: PostgreSQL - jak najlepiej definiować dynamiczne pola?
From: Marek
Date: Mon, 09 Feb 2015 14:49
Date: Mon, 09 Feb 2015 14:49
46 lines
3718 bytes
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-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> <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