[postgres] Dziedziczenie tabel.
Grzegorz Nowakowski - 13-03-2006 11:20
[postgres] Dziedziczenie tabel.
Witam i pozdrawiam.
Skrobię aplikację opartą na Postgresie no i jakoś przy okazji wyszło, że przyda mi się mechanizm dziedziczenia tabel. Ogólnie nie mam z tym problemów, lecz pojawiły się takie ciekawostki, których jakoś nie mogę doczytać się w dokumentacji.
Mamy bazę:
CREATE TABLE parent ( key int PRIMARY KEY, parent_data int );
CREATE TABLE child ( child_data int ) INHERITS (parent);
1) Czy istnieje możliwość wprowadzenia wiersza najpierw do tabeli parent a dopiero później 'wypromowanie' go do tabeli child?
2) Dodajmy tabelę:
CREATE TABLE uncle ( key int PRIMARY KEY, loves int REFERENCES child(key) );
Postgres w tym momencie pyskuje, że child(key) nie jest unikatowy. Wygląda na to, że indeksy nie są dziedziczone ani potomek nie korzysta z indeksów ojca. To jest bug czy feature?
Pozdrawiam. -- Grzegorz Nowakowski
Robert Grabowski - 13-03-2006 11:20
Grzegorz Nowakowski wrote: [...] Z indeksami będzie problem. Próbowałem używać dziedziczenia kilka lat temu jeszcze na 7.0 - 7.2 i też wychodziły różne kfiatki. Wg. mnie nie warto się w to pakować - lepiej zrobić do koszernie. Np. późniejsze przerzucenie zawartości bazy do innego RDBMS będzie problematyczne. Może ktoś ma pozytywne doświadczenia z dziedziczeniem. Chętnie poczytam.
pozdrawiam Robert Grabowski
Grzegorz Nowakowski - 13-03-2006 11:20
Robert Grabowski <grabba@env.pl> writes:
> Grzegorz Nowakowski wrote:
> [....] Wg. mnie nie > warto się w to pakować - lepiej zrobić do koszernie.
A co masz na myśli?
Pozdrawiam. -- Grzegorz Nowakowski
wloochacz - 13-03-2006 11:21
>> [....] Wg. mnie nie >> warto się w to pakować - lepiej zrobić do koszernie. > > A co masz na myśli? Jak Jehowa przykazał.
-- wloochacz
Grzegorz Nowakowski - 13-03-2006 11:21
wloochacz <wl@no.spam> writes:
>>> [....] Wg. mnie nie >>> warto się w to pakować - lepiej zrobić do koszernie. >> A co masz na myśli? > Jak Jehowa przykazał.
A tak nieco konkretniej?
Pozdrawiam. -- Grzegorz Nowakowski
Grzegorz Nowakowski - 13-03-2006 11:21
Grzegorz Nowakowski <krecik@rohlik.e-wro.net> writes:
> Wygląda na to, że indeksy nie są dziedziczone ani potomek nie korzysta > z indeksów ojca. To jest bug czy feature?
Feature. Co prawda cecha unikatowości jest de facto dziedziczona ale zbiór kluczy dziecka jest jakimś podzbiorem kluczy ojca, więc rodzicielski indeks jest tu nieprzydatny.
Czasem dobrze jest się wyspać.
Pozdrawiam. -- Grzegorz Nowakowski
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 13-03-2006 11:21
Grzegorz Nowakowski wrote: > Grzegorz Nowakowski <krecik@rohlik.e-wro.net> writes: > > >>Wygląda na to, że indeksy nie są dziedziczone ani potomek nie korzysta >>z indeksów ojca. To jest bug czy feature? > > > Feature. Co prawda cecha unikatowości jest de facto dziedziczona ale > zbiór kluczy dziecka jest jakimś podzbiorem kluczy ojca, więc > rodzicielski indeks jest tu nieprzydatny.
Hmmm....:
http://www.postgresql.org/docs/8.1/i...l-inherit.html
These deficiencies will probably be fixed in some future release, but in the meantime considerable care is needed in deciding whether inheritance is useful for your problem.
Feature, który będzie fixed? :)
-- P.M.
Robert Grabowski - 13-03-2006 11:21
Grzegorz Nowakowski wrote: > wloochacz <wl@no.spam> writes: > >>>> [....] Wg. mnie nie >>>> warto się w to pakować - lepiej zrobić do koszernie. >>> A co masz na myśli? >> Jak Jehowa przykazał. > > A tak nieco konkretniej? > > Pozdrawiam.
Robisz normalną strukturę bazy, którą normalizujesz, tzn. wydzielasz encje, dla których robisz osobne tabelki. Jeżeli masz ojca i syna, to robisz:
osoba id
ojciec osoba_id
syn osoba_id ojciec_id
To tak dla przykładu, bo model danych do przechowywania danych osobowych powinien być zupełnie inny :)
pozdrawiam Robert Grabowski
Grzegorz Nowakowski - 13-03-2006 11:21
Robert Grabowski <grabba@env.pl> writes:
> Robisz normalną strukturę bazy, którą normalizujesz, tzn. wydzielasz > encje, dla których robisz osobne tabelki. Jeżeli masz ojca i syna, to > robisz: > > osoba > id > > ojciec > osoba_id > > syn > osoba_id > ojciec_id
Zabawne, bo dokładnie od takiego schematu chciałem uciec. :)
Pozdrawiam. -- Grzegorz Nowakowski
Grzegorz Nowakowski - 13-03-2006 11:21
Paweł Matejski <madej@spam.madej.pl.eu.org> writes:
> Grzegorz Nowakowski wrote: >> Grzegorz Nowakowski <krecik@rohlik.e-wro.net> writes: >> >>>Wygląda na to, że indeksy nie są dziedziczone ani potomek nie korzysta >>>z indeksów ojca. To jest bug czy feature? >> Feature. Co prawda cecha unikatowości jest de facto dziedziczona ale >> zbiór kluczy dziecka jest jakimś podzbiorem kluczy ojca, więc >> rodzicielski indeks jest tu nieprzydatny. > > Hmmm....: > > http://www.postgresql.org/docs/8.1/i...l-inherit.html > > These deficiencies will probably be fixed in some future release, but > in the meantime considerable care is needed in deciding whether > inheritance is useful for your problem.
Holender! Z tego co tu piszą, to temat jest mocno zamotany. Aczkolwiek testy, które robiłem u siebie na 7.4, dawały spodziewane rezultaty.
> Feature, który będzie fixed? :)
Pażywiom, uwid'zim. :)
Pozdrawiam. -- Grzegorz Nowakowski
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
[postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
zanotowane.pldoc.pisz.plpdf.pisz.pladwokat.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|