[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
ethanak - 17-06-2007 00:16
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
Witam.
Sytuacja do?? prosta:
CREATE TABLE wartosci ( klient int references klienci(id) on update cascade on delete cascade, nazwa text, unique(klient,nazwa), /* czy potrzebny? */ wartosc text);
Chodzi o najprostsze praktyczne rozwi?zanie sytuacji, gdzie aplikacja robi INSERT, a je?li para klient-nazwa ju? istnieje, zamiast tego wykonywany jest UPDATE warto?ci.
Tabela jest niewielka, max. kilkaset tysi?cy rekordów.
Najprostsze wydaje mi si? co? w stylu:
CREATE RULE jakastam AS ON INSERT TO wartosci WHERE EXISTS (SELECT * FROM wartosci WHERE klient = NEW.klient AND nazwa=NEW.nazwa) DO INSTEAD UPDATE wartosci SET wartosc=NEW.wartosc WHERE klient = NEW.klient AND nazwa=NEW.nazwa;
Dobrze kombinuj? czy jakie? bardziej praktyczne rozwi?zanie?
W dokumentacji znalaz?em przypadkiem co? podobnego z u?yciem EXCEPTION ale ?rednio mi si? to podoba.
ethanak -- mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20='); standard error codes: ENOTOBACCO //pipe exhausted
Krzysztof =?iso-8859-2?Q?Krzy=BFaniak?= - 17-06-2007 00:16
ethanak <sweethanak@buziaczek.pl> writes:
[..] > Chodzi o najprostsze praktyczne rozwi?zanie sytuacji, gdzie aplikacja > robi INSERT, a je?li para klient-nazwa ju? istnieje, zamiast tego > wykonywany jest UPDATE warto?ci. > > Tabela jest niewielka, max. kilkaset tysi?cy rekordów. > > Najprostsze wydaje mi si? co? w stylu: > > CREATE RULE jakastam AS ON INSERT TO wartosci > WHERE EXISTS > (SELECT * FROM wartosci WHERE klient = NEW.klient AND nazwa=NEW.nazwa) > DO INSTEAD > UPDATE wartosci SET wartosc=NEW.wartosc > WHERE klient = NEW.klient AND nazwa=NEW.nazwa; > > Dobrze kombinuj? czy jakie? bardziej praktyczne rozwi?zanie?
Nie wiem czy praktyczniejsze ale w testach wysz?o nam ?e szybciej jest zrobi? DELETE + INSERT.
eloy -- -------e-l-o-y----------------------------e-l-o-y-@-k-o-f-e-i-n-a-.-n-e-t------
jak to dobrze, ?e s? oceany - bez nich by?oby jeszcze smutniej
ethanak - 17-06-2007 00:16
On 2007-05-26 20:13, Krzysztof Krzy?aniak wrote: [...] > Nie wiem czy praktyczniejsze ale w testach wysz?o nam ?e szybciej jest > zrobi? DELETE + INSERT.
A, tyle to wiem. Chodzi mi jednak o maksymalne uproszczenie aplikacji, która tego inserta robi w kilku ró?nych miejscach i wola?bym aby takimi pierdo?ami si? nie zajmowa?a. Szybko?? w tym przypadku ma niewielkie znaczenie (chocia? oczywi?cie bez przesady).
Ale co? w tym jest - spróbuj? z jakim? triggerem który mi usunie rekord przed wstawieniem. Ciekawe czy mi wyjdzie :)
ethanak -- mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20='); standard error codes: ENOTOBACCO //pipe exhausted
=?ISO-8859-2?Q?Artur_Muszy=F1ski?= - 17-06-2007 00:16
Krzysztof Krzy?aniak pisze: >> Chodzi o najprostsze praktyczne rozwi?zanie sytuacji, gdzie aplikacja >> robi INSERT, a je?li para klient-nazwa ju? istnieje, zamiast tego >> wykonywany jest UPDATE warto?ci.
IMHO wad? rozwi?zania na regule jest ukryty efekt, którego potencjalny przysz?y developer nie b?dzie si? spodziewa?. Chyba lepsza by?aby procedura. Ja pozostaj? przy r?cznym (w aplikacji) UPDATE+INSERT.
> Nie wiem czy praktyczniejsze ale w testach wysz?o nam ?e szybciej jest > zrobi? DELETE + INSERT.
To wi?zów integralno?ci nie u?ywacie?
artur
szaman - 17-06-2007 00:16
>> Nie wiem czy praktyczniejsze ale w testach wysz?o nam ?e szybciej jest >> zrobi? DELETE + INSERT. > > To wi?zów integralno?ci nie u?ywacie? Jedno chyba nie ma nic do drugiego. Gdyby chcie? oprze? si? na wi?zach to trzeba by to robi? w p?tli obs?ugi wyj?tków - o to Ci chodzi? Delete + insert w procedurze to dobre rozwi?zanie.
W oracle jest jeszcze instrukcja MERGE.
=?ISO-8859-2?Q?Artur_Muszy=F1ski?= - 17-06-2007 00:16
szaman pisze: >>> Nie wiem czy praktyczniejsze ale w testach wysz?o nam ?e szybciej jest >>> zrobi? DELETE + INSERT. >> >> To wi?zów integralno?ci nie u?ywacie? > Jedno chyba nie ma nic do drugiego. > Gdyby chcie? oprze? si? na wi?zach to trzeba by to robi? w p?tli obs?ugi > wyj?tków - o to Ci chodzi? > Delete + insert w procedurze to dobre rozwi?zanie.
Nawet je?li masz kaskadowe usuwanie?
artur
szaman - 17-06-2007 00:16
Artur Muszy?ski pisze: > szaman pisze: >>>> Nie wiem czy praktyczniejsze ale w testach wysz?o nam ?e szybciej jest >>>> zrobi? DELETE + INSERT. >>> >>> To wi?zów integralno?ci nie u?ywacie? >> Jedno chyba nie ma nic do drugiego. >> Gdyby chcie? oprze? si? na wi?zach to trzeba by to robi? w p?tli >> obs?ugi wyj?tków - o to Ci chodzi? >> Delete + insert w procedurze to dobre rozwi?zanie. > > Nawet je?li masz kaskadowe usuwanie? > Nie za bardzo rozumiem pytanie - ale je?eli pytasz czy warto si? potrudzi? i napisa? procedur? która kaskadowo usuwa zamiast skorzysta? z "gotowca" to odpowiem, ?e w wielu a w?a?ciwie w wi?kszo?ci przypadków warto (na pewno we wszystkich wi?kszych projektach, gdzie developerów jest co najmniej kilku).
sg - 17-06-2007 00:16
szaman pisze: > Artur Muszy?ski pisze: >> szaman pisze: >>>>> Nie wiem czy praktyczniejsze ale w testach wysz?o nam ?e szybciej jest >>>>> zrobi? DELETE + INSERT. >>>> >>>> To wi?zów integralno?ci nie u?ywacie? >>> Jedno chyba nie ma nic do drugiego. >>> Gdyby chcie? oprze? si? na wi?zach to trzeba by to robi? w p?tli >>> obs?ugi wyj?tków - o to Ci chodzi? >>> Delete + insert w procedurze to dobre rozwi?zanie. >> >> Nawet je?li masz kaskadowe usuwanie? >> > Nie za bardzo rozumiem pytanie - ale je?eli pytasz czy warto si? > potrudzi? i napisa? procedur? która kaskadowo usuwa zamiast skorzysta? z > "gotowca" to odpowiem, ?e w wielu a w?a?ciwie w wi?kszo?ci przypadków > warto (na pewno we wszystkich wi?kszych projektach, gdzie developerów > jest co najmniej kilku).
yyy, serio? a po co co? takiego pisa??
szaman - 17-06-2007 00:16
> yyy, serio? a po co co? takiego pisa??
A pracowa?e? kiedy? nad naprawd? du?ym projektem?
=?UTF-8?B?RmlsaXAgUmVtYmlhxYJrb3dza2k=?= - 17-06-2007 00:16
szaman wrote at 2007-05-30 11:10: > >> yyy, serio? a po co co?? takiego pisaÄ?? > > A pracowa??e?? kiedy?? nad naprawdÄ? du??ym projektem?
serio, napisz po co - chyba ??e nie wiesz...
sg - 17-06-2007 00:16
szaman pisze: > >> yyy, serio? a po co co? takiego pisa?? > > A pracowa?e? kiedy? nad naprawd? du?ym projektem?
nie wybacz, nie pracowa?em, siedz? w ma?ej pó?osobowej firmie i mam baz? wielko?ci 1b...
a tak na powa?nie: niewa?ne czy pracowa?em czy te? nie, to moja prywatna sprawa, zreszt? jak napisa? Filip: uzasadnij po co co? takiego pisa?.
szaman - 17-06-2007 00:16
Filip Rembia??kowski pisze: > szaman wrote at 2007-05-30 11:10: >>> yyy, serio? a po co co?? takiego pisaÄ?? >> A pracowa??e?? kiedy?? nad naprawdÄ? du??ym projektem? > > serio, napisz po co - chyba ??e nie wiesz...
Pisa??em o tym w innym e-mailu ! Powody sÄ? proste - i te same dlaczego lepiej nie stosowaÄ? kaskadowego usuwania opartego mechanizmach regu?? integralno??ci. C????, ??e dzia??a, jak powoduje nieporozumienia.
R??b jak chcesz ja prezentujÄ? jedynie swoje zdanie oparte niestety na do??wiadczeniu (kiedy?? stosowa??em takie regu??y usuwania ale to stare czasy i ma??e bazki - tzn ok 100 tabel i klika GB)
1. Powodem mo??e byÄ? chÄ?Ä? wykonania i inych dzia??aÄ? podczas takiego usuwania a kt??rych naturalnym miejscem by??a by w??a??nie taka procedura (np odpis do logu operacji , wys??anie SMS, ...).
2. NastÄ?pnym powodem mo??e byÄ? to, ??e danych do jednorazowego usuniÄ?cia z powodu usuniÄ?cia rekord??w nadrzÄ?dnych mo??e byÄ? tak wiele, ze jedna transakcja tego nie ud??wignie.
3. NastÄ?pnym jest fakt, ??e nie wszÄ?dzie siÄ? da zastosowaÄ? takie mechanizmy kaskadowego usuwania czy aktualizowania - a je??eli nie wszÄ?dzie to ju?? wprowadza ba??agan - je??eli oczywi??cie zale??y Ci na jakich?? zasadach , normach, wzorcach, ujednolicajÄ?cych chocia??by rodzaje procedur - kt??re to sa niezbÄ?dne w du??ych zespo??ach projektowych (przysz??o mi pracowaÄ? nawet w 130 osobowym - oko??o 100 samych programist??w a w tym oko??o 40 bazodanowc??w, tabel w jednym projekcie od 300 do 600, procedur sk??adowanych na cztery projekty ponad 1600 - baza jak widzisz nie by??a tak jak Twoja 1bitowa ;-)).
4. Mo??liwo??Ä? omy??kowego usuniÄ?cia danych. Lepiej gdy integralno??Ä? referencyjna zabroni Ci co?? usunÄ?Ä? zbyt szybko i ograniczy sie do tego. Takim regu??ami usuwania kaskadowego mo??na naprawdÄ? wyciachaÄ? ca??Ä? masÄ? danych bez jakiegokolwiek komunikatu ostrzegajÄ?cego - oczywi??cie przy ma??ym projekcie i to najlepiej prowadzonym przez jedna osobÄ? nie powinno sie zdarzyÄ? ale wraz z liczbÄ? ludzi prawdopodobie??stwo ro??nie wyk??adniczo (do jedynki ju?? po kilku ;-).
sg - 17-06-2007 00:16
szaman pisze: > Filip Rembia??kowski pisze: >> szaman wrote at 2007-05-30 11:10: >>>> yyy, serio? a po co co?? takiego pisaÄ?? >>> A pracowa??e?? kiedy?? nad naprawdÄ? du??ym projektem? >> >> serio, napisz po co - chyba ??e nie wiesz... > > Pisa??em o tym w innym e-mailu ! > Powody sÄ? proste - i te same dlaczego lepiej nie stosowaÄ? > kaskadowego usuwania opartego mechanizmach regu?? integralno??ci. > C????, ??e dzia??a, jak powoduje nieporozumienia. > > R??b jak chcesz ja prezentujÄ? jedynie swoje zdanie oparte niestety na > do??wiadczeniu (kiedy?? stosowa??em takie regu??y usuwania ale to stare > czasy i ma??e bazki - tzn ok 100 tabel i klika GB) > > > 1. Powodem mo??e byÄ? chÄ?Ä? wykonania i inych dzia??aÄ? podczas > takiego usuwania a kt??rych naturalnym miejscem by??a by w??a??nie taka > procedura (np odpis do logu operacji , wys??anie SMS, ...). >
do tego to mamy triggery przy usuwaniu rekordu, ta sama funkcjonalno??Ä?
> 2. NastÄ?pnym powodem mo??e byÄ? to, ??e danych do jednorazowego usuniÄ?cia z > powodu usuniÄ?cia rekord??w nadrzÄ?dnych mo??e byÄ? tak wiele, ze jedna > transakcja tego nie ud??wignie. >
yyy, to jak chcesz to zrobiÄ?? usunÄ?Ä? tylko czÄ???Ä? rekord??w i zako??czyÄ? transakcjÄ?, a klucze obce z innych tabel bÄ?dÄ? siÄ? odwo??ywaÄ? do czego?? co ju?? nie istnieje?
> 3. NastÄ?pnym jest fakt, ??e nie wszÄ?dzie siÄ? da zastosowaÄ? takie > mechanizmy kaskadowego usuwania czy aktualizowania - a je??eli nie > wszÄ?dzie to ju?? wprowadza ba??agan - je??eli oczywi??cie zale??y Ci na > jakich?? zasadach ,
no dobra, gdzie nie mo??na tego zastosowaÄ? i dlaczego? ??miem twierdziÄ?, ??e to nadaje siÄ? wszÄ?dzie
> normach, wzorcach, ujednolicajÄ?cych chocia??by rodzaje procedur - kt??re > to sa niezbÄ?dne w du??ych zespo??ach projektowych (przysz??o mi pracowaÄ? > nawet w 130 osobowym - oko??o 100 samych programist??w a w tym oko??o 40 > bazodanowc??w, tabel w jednym projekcie od 300 do 600, procedur > sk??adowanych na cztery projekty ponad 1600 - baza jak widzisz nie by??a > tak jak Twoja 1bitowa ;-)). >
a ja nie bÄ?dÄ? siÄ? licytowa??, bo ju?? z tego wyros??em, ale rozumiem, ??e uwa??asz siÄ? za wielkiego znawcÄ? tematu, w takim razie mam kilka pyta??:
1. jak w takim razie usuwaÄ? dane ??eby zachowaÄ? integralno??Ä? bazy? 2. jakim cudem uda??o Ci siÄ? nie usuwajÄ?c kaskadowo danych, usuwaÄ? je tak, ??e dostajesz komunikat o b??Ä?dzie? 3. czy jak jest du??y zesp???? to nie mo??e usuwaÄ? kaskadowo, bo siÄ? pomyli, ale zamiast tego robi sobie procedurÄ?, kt??ra robi to samo tylko taki zesp???? pisze jÄ? rÄ?cznie i wtedy pomy??ki nie bÄ?dzie?
> 4. Mo??liwo??Ä? omy??kowego usuniÄ?cia danych. Lepiej gdy integralno??Ä? > referencyjna zabroni Ci co?? usunÄ?Ä? zbyt szybko i ograniczy sie do tego. > Takim regu??ami usuwania kaskadowego mo??na naprawdÄ? wyciachaÄ? ca??Ä? masÄ? > danych bez jakiegokolwiek komunikatu ostrzegajÄ?cego - oczywi??cie przy > ma??ym projekcie i to najlepiej prowadzonym przez jedna osobÄ? nie powinno > sie zdarzyÄ? ale wraz z liczbÄ? ludzi prawdopodobie??stwo ro??nie > wyk??adniczo (do jedynki ju?? po kilku ;-). >
aha, to w takim razie skoro jeste?? takim znawcÄ? to o??wieÄ? nas jak to fachowcy usuwajÄ? sobie dane, robiÄ? najpierw usuwanie na tabelach z kt??rych dane by??yby kaskadowo usuniÄ?te i dziÄ?ki temu majÄ? komunikaty o b??Ä?dach?
Skoro ju?? mowa o du??ych bazach, to czego jeszcze powinni??my unikaÄ? przy takich bazach poza kaskadowym usuwaniem danych?
szaman - 17-06-2007 00:16
>> 3. NastÄ?pnym jest fakt, ??e nie wszÄ?dzie siÄ? da zastosowaÄ? takie >> mechanizmy kaskadowego usuwania czy aktualizowania - a je??eli nie >> wszÄ?dzie to ju?? wprowadza ba??agan - je??eli oczywi??cie zale??y Ci na >> jakich?? zasadach , > > no dobra, gdzie nie mo??na tego zastosowaÄ? i dlaczego? ??miem twierdziÄ?, > ??e to nadaje siÄ? wszÄ?dzie Czasem struktura powiÄ?za?? tabel jest taka, ze nie da siÄ? zastosowaÄ? usuwania kaskadowego. A czasem powiÄ?za?? zadeklarowanych jako constraint jest du??o za ma??o w stosunku do teoretycznych potrzeb bo baza by praktycznie przesta??a dzia??aÄ? gdyby chcieÄ? je wszystkie wdro??yÄ?.
> >> normach, wzorcach, ujednolicajÄ?cych chocia??by rodzaje procedur - kt??re >> to sa niezbÄ?dne w du??ych zespo??ach projektowych (przysz??o mi pracowaÄ? >> nawet w 130 osobowym - oko??o 100 samych programist??w a w tym oko??o 40 >> bazodanowc??w, tabel w jednym projekcie od 300 do 600, procedur >> sk??adowanych na cztery projekty ponad 1600 - baza jak widzisz nie by??a >> tak jak Twoja 1bitowa ;-)). >> > > a ja nie bÄ?dÄ? siÄ? licytowa??, bo ju?? z tego wyros??em, ale rozumiem, ??e > uwa??asz siÄ? za wielkiego znawcÄ? tematu, w takim razie mam kilka pyta??: > > 1. jak w takim razie usuwaÄ? dane ??eby zachowaÄ? integralno??Ä? bazy? Jak nie wiesz to trudno - nie chcÄ? Ci robic wyk??adu > 2. jakim cudem uda??o Ci siÄ? nie usuwajÄ?c kaskadowo danych, usuwaÄ? je > tak, ??e dostajesz komunikat o b??Ä?dzie? Ja nie dostajÄ? komunikatu , ponadto usuwam kaskadowo tylko nie zlecam tego usuwania automatowi. > 3. czy jak jest du??y zesp???? to nie mo??e usuwaÄ? kaskadowo, bo siÄ? pomyli, > ale zamiast tego robi sobie procedurÄ?, kt??ra robi to samo tylko taki > zesp???? pisze jÄ? rÄ?cznie i wtedy pomy??ki nie bÄ?dzie? Nie bÄ?dzie. Procedura jest i tak potrzebna, ma odpowiedniÄ? nazwÄ? i trzeba jej u??yÄ?. Pomy??ka mog??a by byc gdyby kto?? recznie usuwa?? jeden rekord a np. tak naprawdÄ? to chcial go tylko zmieniÄ? a dane ju?? posz??y do kosza. Nie bÄ?dÄ? wymy??la?? takich sytuacji dla Ciebie bo to ??mieszne - w zespole programist??w niestety zdarzajÄ? siÄ?. Co?? podejrzewam, ??e Ty jestes ten jedyny nieomylny i ponadto ufasz w nieomylno??Ä? innych. Tak ?! > >> 4. Mo??liwo??Ä? omy??kowego usuniÄ?cia danych. Lepiej gdy integralno??Ä? >> referencyjna zabroni Ci co?? usunÄ?Ä? zbyt szybko i ograniczy sie do tego. >> Takim regu??ami usuwania kaskadowego mo??na naprawdÄ? wyciachaÄ? ca??Ä? masÄ? >> danych bez jakiegokolwiek komunikatu ostrzegajÄ?cego - oczywi??cie przy >> ma??ym projekcie i to najlepiej prowadzonym przez jedna osobÄ? nie powinno >> sie zdarzyÄ? ale wraz z liczbÄ? ludzi prawdopodobie??stwo ro??nie >> wyk??adniczo (do jedynki ju?? po kilku ;-). >> > > aha, to w takim razie skoro jeste?? takim znawcÄ? to o??wieÄ? nas jak to > fachowcy usuwajÄ? sobie dane, robiÄ? najpierw usuwanie na tabelach z > kt??rych dane by??yby kaskadowo usuniÄ?te i dziÄ?ki temu majÄ? komunikaty o > b??Ä?dach? Nie wiem albo jeste?? zacietrzewiony albo nie nauczy??e?? sie czytaÄ? ze zrozumieniem.
> > Skoro ju?? mowa o du??ych bazach, to czego jeszcze powinni??my unikaÄ? przy > takich bazach poza kaskadowym usuwaniem danych? A co? To Ty nie wiesz czego ?
Ja my??lÄ?, ??e jak we wszystkich powa??nych zagadnieniach nale??y przede wszystkim unikaÄ? dopuszczania za blisko niedo??wiadczonych , butnych , zadufanych , chcÄ?cych postawiÄ? na swoim bo wiedzÄ? lepiej.
WracajÄ?c jednak do tematu. MogÄ? sobie wyobraziÄ? firme i projekt w kt??rym z za??o??enia stosujÄ? wszyscy i wszÄ?dzie kaskadowe usuwanie i aktualizowanie oparte na utomatach definiowanych przy tworzeniu powiÄ?za?? miÄ?dzy tabelami. W takim przypadku rzeczywi??cie mog??o by to sie jako?? sprawdzaÄ?. Ale jeszcze nie widzia??em takiego projektu (mo??liwe ??e ma??o widzia??em). Widzia??em jednak projekty w kt??rych robiono co?? po??redniego , czÄ?sto dublujÄ?c funkcjonalno??Ä? - po jakim?? czasie zawsze okazywa??o sie , ??e sa problemy w??a??nie z tymi cholernymi regu??ami , szczeg??lnie gdy jest du??a fluktuacja programist??w.
R??B SOBIE JAK CHCESZ.
sg - 17-06-2007 00:16
szaman pisze: > >>> 3. NastÄ?pnym jest fakt, ??e nie wszÄ?dzie siÄ? da zastosowaÄ? takie >>> mechanizmy kaskadowego usuwania czy aktualizowania - a je??eli nie >>> wszÄ?dzie to ju?? wprowadza ba??agan - je??eli oczywi??cie zale??y Ci na >>> jakich?? zasadach , >> >> no dobra, gdzie nie mo??na tego zastosowaÄ? i dlaczego? ??miem twierdziÄ?, >> ??e to nadaje siÄ? wszÄ?dzie > Czasem struktura powiÄ?za?? tabel jest taka, ze nie da siÄ? zastosowaÄ? > usuwania kaskadowego. A czasem powiÄ?za?? zadeklarowanych jako constraint > jest du??o za ma??o w stosunku do teoretycznych potrzeb bo baza by > praktycznie przesta??a dzia??aÄ? gdyby chcieÄ? je wszystkie wdro??yÄ?. >
no tak, ale nie chodzi??o mi o bazy ze spartolonÄ? strukturÄ?, to zupe??nie inna bajka
>> 1. jak w takim razie usuwaÄ? dane ??eby zachowaÄ? integralno??Ä? bazy? > Jak nie wiesz to trudno - nie chcÄ? Ci robic wyk??adu
nie chodzi mi o wyk??ad, tylko o Twoje podej??cie do tematu.
>> 2. jakim cudem uda??o Ci siÄ? nie usuwajÄ?c kaskadowo danych, usuwaÄ? je >> tak, ??e dostajesz komunikat o b??Ä?dzie? > Ja nie dostajÄ? komunikatu , ponadto usuwam kaskadowo tylko nie zlecam > tego usuwania automatowi.
OK, ale dlaczego takie usuwanie rÄ?czne mia??oby byÄ? lepsze?
>> 3. czy jak jest du??y zesp???? to nie mo??e usuwaÄ? kaskadowo, bo siÄ? >> pomyli, ale zamiast tego robi sobie procedurÄ?, kt??ra robi to samo >> tylko taki zesp???? pisze jÄ? rÄ?cznie i wtedy pomy??ki nie bÄ?dzie? > Nie bÄ?dzie. Procedura jest i tak potrzebna, ma odpowiedniÄ? nazwÄ? i > trzeba jej u??yÄ?. Pomy??ka mog??a by byc gdyby kto?? recznie usuwa?? jeden > rekord a np. tak naprawdÄ? to chcial go tylko zmieniÄ? a dane ju?? posz??y > do kosza. Nie bÄ?dÄ? wymy??la?? takich sytuacji dla Ciebie bo to ??mieszne - > w zespole programist??w niestety zdarzajÄ? siÄ?. Co?? podejrzewam, ??e Ty > jestes ten jedyny nieomylny i ponadto ufasz w nieomylno??Ä? innych. Tak ?!
nie, raczej m??wisz o sobie, zupe??nie mnie nie znajÄ?c zaczynasz wyje??d??aÄ?, ??e napewno nie pracowa??em z du??ymi bazami i w du??ych zespo??ach, hm... dla ??wiÄ?tego spokoju przyznam Ci racjÄ?.
>> >>> 4. Mo??liwo??Ä? omy??kowego usuniÄ?cia danych. Lepiej gdy integralno??Ä? >>> referencyjna zabroni Ci co?? usunÄ?Ä? zbyt szybko i ograniczy sie do tego. >>> Takim regu??ami usuwania kaskadowego mo??na naprawdÄ? wyciachaÄ? ca??Ä? masÄ? >>> danych bez jakiegokolwiek komunikatu ostrzegajÄ?cego - oczywi??cie przy >>> ma??ym projekcie i to najlepiej prowadzonym przez jedna osobÄ? nie powinno >>> sie zdarzyÄ? ale wraz z liczbÄ? ludzi prawdopodobie??stwo ro??nie >>> wyk??adniczo (do jedynki ju?? po kilku ;-). >>> >> >> aha, to w takim razie skoro jeste?? takim znawcÄ? to o??wieÄ? nas jak to >> fachowcy usuwajÄ? sobie dane, robiÄ? najpierw usuwanie na tabelach z >> kt??rych dane by??yby kaskadowo usuniÄ?te i dziÄ?ki temu majÄ? komunikaty o >> b??Ä?dach? > Nie wiem albo jeste?? zacietrzewiony albo nie nauczy??e?? sie czytaÄ? ze > zrozumieniem. >
No nie wiem, albo nie masz argument??w, albo widzisz ??e siÄ? zamota??e??.
>> >> Skoro ju?? mowa o du??ych bazach, to czego jeszcze powinni??my unikaÄ? >> przy takich bazach poza kaskadowym usuwaniem danych? > A co? To Ty nie wiesz czego ? > > Ja my??lÄ?, ??e jak we wszystkich powa??nych zagadnieniach nale??y przede > wszystkim unikaÄ? dopuszczania za blisko niedo??wiadczonych , butnych , > zadufanych , chcÄ?cych postawiÄ? na swoim bo wiedzÄ? lepiej. >
No w??a??nie, nie uwa??am, ??e wiem wszystko najlepiej dlatego chcia??bym siÄ? dowiedzieÄ? jak kto?? taki jak Ty takie problemy rozwiÄ?zuje, bo nie mogÄ? tego zrozumieÄ?.
> WracajÄ?c jednak do tematu. > MogÄ? sobie wyobraziÄ? firme i projekt w kt??rym z za??o??enia stosujÄ? > wszyscy i wszÄ?dzie kaskadowe usuwanie i aktualizowanie oparte na > utomatach definiowanych przy tworzeniu powiÄ?za?? miÄ?dzy tabelami. W takim > przypadku rzeczywi??cie mog??o by to sie jako?? sprawdzaÄ?. Ale jeszcze nie > widzia??em takiego projektu (mo??liwe ??e ma??o widzia??em). > Widzia??em jednak projekty w kt??rych robiono co?? po??redniego , czÄ?sto > dublujÄ?c funkcjonalno??Ä? - po jakim?? czasie zawsze okazywa??o sie , ??e sa > problemy w??a??nie z tymi cholernymi regu??ami , szczeg??lnie gdy jest du??a > fluktuacja programist??w. >
to tak wracajÄ?c do tematu: czyli z tego by wynika??o, ??e regu??y sÄ? OK, ale pod warunkiem, ??e struktura bazy jest tworzona przez kogo?? kto ma o tym pojÄ?cie, czyli nie przez zwyk??ego developera, ale przez kogo?? od baz danych i wtedy mo??na nad tym zapanowaÄ?, dobrze rozumiem?
> R??B SOBIE JAK CHCESZ.
dziÄ?ki
szaman - 20-06-2007 00:03
> > no tak, ale nie chodzi³o mi o bazy ze spartolon± struktur±, to zupe³nie > inna bajka Nie ma naprawdê du¿ej bazy która tak jak siê wyra¿asz ma "niespartolon± strukture bazy" i nikt tego nie traktuje jako spartolenie, ma³o tego to zawsze jest ¶wiadome i wynika ze wzglêdów wydajno¶ciowych. > >>> 1. jak w takim razie usuwaæ dane ¿eby zachowaæ integralno¶æ bazy? >> Jak nie wiesz to trudno - nie chcê Ci robic wyk³adu > > nie chodzi mi o wyk³ad, tylko o Twoje podej¶cie do tematu. > >>> 2. jakim cudem uda³o Ci siê nie usuwaj±c kaskadowo danych, usuwaæ je >>> tak, ¿e dostajesz komunikat o b³êdzie? >> Ja nie dostajê komunikatu , ponadto usuwam kaskadowo tylko nie zlecam >> tego usuwania automatowi. > > OK, ale dlaczego takie usuwanie rêczne mia³oby byæ lepsze? Poniewa¿ program (my¶lê o kodzie ¼ród³owym) tak naprawdê jest dla ludzi a nie dla komputera.
>> - w zespole programistów niestety zdarzaj± siê. Co¶ podejrzewam, ¿e Ty >> jestes ten jedyny nieomylny i ponadto ufasz w nieomylno¶æ innych. Tak ?! > > nie, raczej mówisz o sobie, zupe³nie mnie nie znaj±c zaczynasz > wyje¿d¿aæ, ¿e napewno nie pracowa³em z du¿ymi bazami i w du¿ych > zespo³ach, hm... dla ¶wiêtego spokoju przyznam Ci racjê. To jednak mam racjê. Naprawdê nie widzia³em bazy, która jest du¿a i nie jest zdenormalizowana a jako taka nie mo¿e mieæ tych Twoich ulubionych regu³ automatycznego usuwania.
> >>> >>>> 4. Mo¿liwo¶æ omy³kowego usuniêcia danych. Lepiej gdy integralno¶æ >>>> referencyjna zabroni Ci co¶ usun±æ zbyt szybko i ograniczy sie do tego. >>>> Takim regu³ami usuwania kaskadowego mo¿na naprawdê wyciachaæ ca³± masê >>>> danych bez jakiegokolwiek komunikatu ostrzegaj±cego - oczywi¶cie przy >>>> ma³ym projekcie i to najlepiej prowadzonym przez jedna osobê nie >>>> powinno >>>> sie zdarzyæ ale wraz z liczb± ludzi prawdopodobieñstwo ro¶nie >>>> wyk³adniczo (do jedynki ju¿ po kilku ;-). >>>> >>> >>> aha, to w takim razie skoro jeste¶ takim znawc± to o¶wieæ nas jak to >>> fachowcy usuwaj± sobie dane, robi± najpierw usuwanie na tabelach z >>> których dane by³yby kaskadowo usuniête i dziêki temu maj± komunikaty >>> o b³êdach? >> Nie wiem albo jeste¶ zacietrzewiony albo nie nauczy³e¶ sie czytaæ ze >> zrozumieniem. >> > > No nie wiem, albo nie masz argumentów, albo widzisz ¿e siê zamota³e¶.
Twoje pytanie ¶wiadczy o tym ¿e nie czytasz ze zrozumieniem.
Ci "fachowcy" przy próbie usuniêcia rekordu dostaja komunikat b³êdu o tym , ¿e usuniêcie jest niemo¿liwe i wtedy dochodza do wniosku , ¿e mo¿e jednak nie wszystko wiedza o tej bazie co moze sk³oni ich do przeczytania dokumentacji albo chocia¿ kodu co poniektórych procedur.
>>> >>> Skoro ju¿ mowa o du¿ych bazach, to czego jeszcze powinni¶my unikaæ >>> przy takich bazach poza kaskadowym usuwaniem danych? >> A co? To Ty nie wiesz czego ? >> >> Ja my¶lê, ¿e jak we wszystkich powa¿nych zagadnieniach nale¿y przede >> wszystkim unikaæ dopuszczania za blisko niedo¶wiadczonych , butnych , >> zadufanych , chc±cych postawiæ na swoim bo wiedz± lepiej. >> > > No w³a¶nie, nie uwa¿am, ¿e wiem wszystko najlepiej dlatego chcia³bym siê > dowiedzieæ jak kto¶ taki jak Ty takie problemy rozwi±zuje, bo nie mogê > tego zrozumieæ. Ja napisa³em jak a ¿e nie potrafisz zrozumieæ to te¿ zauwa¿y³em. W tym chyba w³a¶nie problem. > >> Wracaj±c jednak do tematu. >> Mogê sobie wyobraziæ firme i projekt w którym z za³o¿enia stosuj± >> wszyscy i wszêdzie kaskadowe usuwanie i aktualizowanie oparte na >> utomatach definiowanych przy tworzeniu powi±zañ miêdzy tabelami. W >> takim przypadku rzeczywi¶cie mog³o by to sie jako¶ sprawdzaæ. Ale >> jeszcze nie widzia³em takiego projektu (mo¿liwe ¿e ma³o widzia³em). >> Widzia³em jednak projekty w których robiono co¶ po¶redniego , czêsto >> dubluj±c funkcjonalno¶æ - po jakim¶ czasie zawsze okazywa³o sie , ¿e >> sa problemy w³a¶nie z tymi cholernymi regu³ami , szczególnie gdy jest >> du¿a fluktuacja programistów. >> > > to tak wracaj±c do tematu: czyli z tego by wynika³o, ¿e regu³y s± OK, > ale pod warunkiem, ¿e struktura bazy jest tworzona przez kogo¶ kto ma o > tym pojêcie, czyli nie przez zwyk³ego developera, ale przez kogo¶ od baz > danych i wtedy mo¿na nad tym zapanowaæ, dobrze rozumiem? > Nieco inaczej - one dzia³aj± i mo¿na je stosowaæ ale lepiej nie i to niezale¿nie od tego czy "struktura bazy jest tworzona przez kogo¶ kto ma o tym pojêcie". Z regu³y jest tak, ¿e takie regu³y stosuj± ci którzy maj± niewielkie pojêcie , a to przecie¿ tak ³atwo klin±æ na jakiego¶ checkbox'a i mieæ ju¿ ca³y k³opot z usuwaniem z g³owy (na tak± ³atwiznê to w³a¶nie id± ludzie bez do¶wiadczenia - i to w³a¶nie chcia³em powiedzieæ). No przyznaj, ¿e Ci siê to zwyczajnie podoba , klikniesz i masz z g³owy.
> > >> RÓB SOBIE JAK CHCESZ. > > dziêki
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?UTF-8?Q?=5Bmysql=5D_jak_pobra=C4=87_warto=C5=9B=C4=87_ AUTO=5F?==?UTF-8?Q?INCREMENT=3F?=
Wstawianie nowego wiersza w przypadku jego braku podczas SELECT w PostgreSQL
[Postgres] jak zastapic brakujaca funkcje regexp_replace w PG wersji 8.0
[postgresql] szukanie po indeksie tsearch'owym wlecze sie - da siejakos przyspieszyc?
[PostgreSQL] Konfiguracja w pg_hba.conf - dziala tylko "trust"
zanotowane.pldoc.pisz.plpdf.pisz.plmarcelq.xlx.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 |
|