=?iso-8859-2?q?Jak_si=EA_robi_insert_do_tabel_z_relacj=B1_1:1 ?=
Piotrek_20 - 21-07-2007 00:08
=?iso-8859-2?q?Jak_si=EA_robi_insert_do_tabel_z_relacj=B1_1:1 ?=
Pewno dla Was to trywialne pytanie ale mam taki problem.
Baza stoi na postgresie 8.2, tabele nieco inne są ale uproszę to do takiego prostego przykładu.
Mam 2 tabele Mama(idMama (PK), imie) oraz Tata (idTata(PK), Mama_idMama(FK), imie). Relacja miedzy nimi 1:1.
Zastanawiam się jak zrobić jednoczesnie inserta sql do obu tabel tak: ze wrzucają najpierw nowy rekord do tabeli mama, znac juz jego wartosc, aby pozniej przypisać tą wartość do mojego FK -> Mama_idMama,
A mianowicie robie: insert into mama values (blablabla) i tutaj doda mi np. idMama = 21434, a pozniej chce zrobic insert into Tata i w miejsce Mama_idMama wrzucic moje = 21434.
Problem polega na tym ze klucze glowne w Mama i Tata nie są identyczne mogą miec rozne wartosci. np Mama się rozwiedzie z tatą, to wywalamy tatę i pozniej dopisujemy nowego tatusia z kluczem mamy:P
A tak powaznie ot nie wiem jak podczas tych dwóch insertów wykombinować skąd wziąść wartosc klucza. Myslalem nad zrobieniem selecta zaraz po insercie do tabeli mama i zczytywac wartosc klucza mamy, ale czy przy duzym obciążeniu bazy tzn czestych insertach to się nie zchrzani. Pozdrawiam
A.L.E.C - 21-07-2007 00:08
Piotrek_20 wrote:
> > A tak powaznie ot nie wiem jak podczas tych dwóch insertów > wykombinować skąd wziąść wartosc klucza. > Myslalem nad zrobieniem selecta zaraz po insercie do tabeli mama i > zczytywac wartosc klucza mamy, ale czy przy duzym obciążeniu bazy tzn > czestych insertach to się nie zchrzani.
w postgresie 8.2 masz INSERT INTO ... RETURNING ...., ale osobiście nie widzę problemu w odczytaniu wartości sekwencji między insertami.
-- Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252 LAN Management System Developer http://lms.org.pl
Piotrek_20 - 21-07-2007 00:08
=?iso-8859-2?q?Re:_Jak_si=EA_robi_insert_do_tabel_z_relacj=B1 _1:1?= > ale osobiście nie > widzę problemu w odczytaniu wartości sekwencji między insertami.
A czy moglbys mi rozwinąć to zdanie jak to powinienem zrobic..?
Szuwarek - 21-07-2007 00:08
> Problem polega na tym ze klucze glowne w Mama i Tata nie są identyczne > mogą miec rozne wartosci. np Mama się rozwiedzie z tatą, to wywalamy > tatę i pozniej dopisujemy nowego tatusia z kluczem mamy:P Jeżeli myślisz o rozwodach, jednocześnie piszesz o relacji 1:1 to wg mnie nie powinieneś na ID zakładać PK, tylko zrobić trzecią tabelę np. małżeństowo (id_Mama, id_Tata), a wyrzucić id_mama z tabeli taty. Wtedy wpisywać aktualny związek. Jeżeli do tej tabeli dodasz datę końca lub początku związku to przez datemax() wybierać aktualny związek, a jednocześnie masz możliwość wyświetlenia historii związków. Jeżeli dodasz obie daty to możesz wyselekcjonować osoby aktualnie do wzięcia lub pozostające w związku. Być może jednak moje rozważania idą zbyt daleko. Pozdrawiam Szuwarek
hubert depesz lubaczewski - 21-07-2007 00:08
Dnia 20.07.2007 Piotrek_20 <anna_kotek@o2.pl> napisał/a: > A czy moglbys mi rozwinąć to zdanie jak to powinienem zrobic..?
zakładam, że id nadajesz z sekwencji/seriala. poczytaj o funkcji currval()
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
chester - 21-07-2007 00:08
Szuwarek pisze: >> Problem polega na tym ze klucze glowne w Mama i Tata nie są identyczne >> mogą miec rozne wartosci. np Mama się rozwiedzie z tatą, to wywalamy >> tatę i pozniej dopisujemy nowego tatusia z kluczem mamy:P > Jeżeli myślisz o rozwodach, jednocześnie piszesz o relacji 1:1 to wg > mnie nie powinieneś na ID zakładać PK, tylko zrobić trzecią tabelę np. > małżeństowo (id_Mama, id_Tata), a wyrzucić id_mama z tabeli taty. Wtedy > wpisywać aktualny związek. Jeżeli do tej tabeli dodasz datę końca lub > początku związku to przez datemax() wybierać aktualny związek, a > jednocześnie masz możliwość wyświetlenia historii związków. Jeżeli > dodasz obie daty to możesz wyselekcjonować osoby aktualnie do wzięcia > lub pozostające w związku. Być może jednak moje rozważania idą zbyt daleko.
Raczej nie, wszak nikt nie mówił że tatuś może być przyporządkowany *rownoczesnie* tylko jednej mamusi (lub odwrotnie, ale to chyba dość rzadkie przypadki). IMHO bez trzeciej tabeli się nie obejdzie. ;-) A pomyśl nad układem relacji gdy chcesz też mieć babcie i mamy w osobnych tabelach a masz do czynienia z kazirodztwem? :]
chester
PS. Tak to jest jak się nie podaje rzeczywistych danych tylko się wymyśla 'życiowe' przykłady, a jest piątkowy wieczór ;-)
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO
Czy zna (obsługuje) ktoś program Iso Draw ?
MYSQL - kodowanie w ISO-PL
strona plus baza w iso do utf-8
Kodowanie: z iso na utf
Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8
=?iso-8859-2?q?Co_oznacza_b=B3=B1d_Warning:_mysql=5Fconnect() _[function.mysql-connect]:_Can't_connect_to_local_MySQL_server_through_sock et_'/var/run/mysqld/mysqld.sock'_(2)_in?=
=?iso-8859-2?q?Ati_Mobility_Radeon_X300_W_Notebooku_Jak_Zwi=E Akszy=E6_Ilo=B6=E6_Grafiki_Poprzez_Wsp=F3=B3dziele nie_Z_Ramu=3F=3F=3F?=
Manager =?ISO-8859-2?Q?font=F3w=2E=2E=2E?=
=?iso-8859-2?q?gdzie_naprawi=E6_tablet_wacoma=3F=3F=3F=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plfantazia.htw.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 |
|