Triggery - zlo czy magiczny czarodziej dla aplikacji?

Triggery - zlo czy magiczny czarodziej dla aplikacji?
1

Siema mam do was szybkie pytanie, czy uwazacie ze triggery zaburzaja architekture aplikacji i powinno sie to wepchnac do kodu, czy jest to jak najbardziej w porzadku i to, czy bedzie to w kodzie, czy w bazie nie ma znaczenia, wystarczy tylko zapoznac sie z projektem?

Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 6 godzin
  • Postów:2792
0

Ma znaczenie. Powinnny być w bazie.

0

Dopnę się do pytania, do jakich celów zazwyczaj wykorzystuje się właśnie mechanizm triggerów?

KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

wpychanie logiki do triggeerow jest złe. bazodanowcy powiedzą że dobre programiści Java powiedzą że złe. teraz zależy komu bardziej ufasz. trigery są fajne np do rzeczy które często poprawiacie na produkcji z palca na bazce. np update timestampow changed i takie tam różne z rzeczy których korzysta potem appka a ręcznie robiąc xos na bazce można o tym zapomnieć


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około godziny
  • Postów:1855
0

Ja (nie wiem czy poprawnie ;)) często w ten sposób uzupełniam sobie kolumny z datami utworzenia/modyfikacji rekordu na przykład.

mariano901229
  • Rejestracja:ponad 10 lat
  • Ostatnio:7 miesięcy
  • Postów:597
0

Osobiście używam wyzwalaczy do prostych operacji. Typu nadzór nad modyfikacją danych lub/i wprowadzenie jakiejś wartości w inną kolumnę - np. daty utworzenia, modyfikacji, zaszyfrowanie danego pola itp. Twierdzę, że jest to bardzo przydatny mechanizm, który ułatwia wiele. Stworzenie tej samej logiki po stronie aplikacji może być po prostu bardziej czasochłonne. Jestem zwolennikiem tego, że to bardzo dobry mechanizm, ale do prostych zadań - bez przesady nie upychajmy tam nie wiadomo ile kodu.

BA
  • Rejestracja:około 9 lat
  • Ostatnio:około 6 lat
  • Postów:33
0

Dobre do zarządzania polami niektórymi polami technicznymi (ostatnia data aktualizacja, użytkownik insertujący/updatujący itp.).
Złe do uzupełniania pól biznesowych. Chyba, że jest jakaś specyficzna logika stosowana bez wyjątku na każdej tablicy w danej warstwie, i jest to zaakceptowane na poziomie architektury.

0

Sory, za moje newbie, ale nie jestem programista, dlatego niektorych pojec nie rozumiem, a wynika to z tego, ze nie pracuje w tym zawodzie jeszcze i takie pojecia sa mi obce.
@karolinaa , moglabys wytlumaczyc co to jest xos?
Albo co to tak naprawde jest **pole biznesowe **?

To teraz moze napisze do czego ja zastosowalem triggery w mojej aplikacji, a uzylem tego miedzy innymi do zmiany stanu tabeli, ktora odzialowywuje na druga, np. w bazie mam tabele "premium", ktora wspolgra z tabela "users", zalozmy, ze ktorys rekord z "premium" zostal usuniety to odpowiednio dziala na "users" albo pilnowanie timestampow, np. wlasnie do kont premium i takie duperele - jest to dobre wykorzystywanie triggerow?

Ogolnie chcialbym pojsc do pracy jako programista, zeby dowiedziec sie co to jest logika biznesowa itp. bo w domu sie tego nie naucze, ale cos pracodawcy mnie nie lubia, bo na 2 rozmowach bylem i konczylo sie na 2/3 etapie :D

0

Nie wiem, czy to trafne spostrzezenie bo nie jestem programista, ale mam wrazenie, ze takie wlasnie wywolacze powinny byc w bazie, nie mowie o duzych rzeczach, ale o tych co bylo ww. bo jest to czytelniejsze zarowno dla bazodanowca, jak i programisty. Gorzej jakby bylo w kodzie dla bazodanowca.

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:10 minut
  • Lokalizacja:Wrocław
1
Czarny Kot napisał(a):

Siema mam do was szybkie pytanie, czy uwazacie ze triggery zaburzaja architekture aplikacji i powinno sie to wepchnac do kodu, czy jest to jak najbardziej w porzadku i to, czy bedzie to w kodzie, czy w bazie nie ma znaczenia, wystarczy tylko zapoznac sie z projektem?

Tak, zaburzają.
Na czym polega "trigger w kodzie" Twoim zdaniem? Bo to z definicji mechanizm bazodanowy.

Złoty Kot napisał(a):

Dopnę się do pytania, do jakich celów zazwyczaj wykorzystuje się właśnie mechanizm triggerów?

Generalnie, to do wkurzania wprowadzających poprawki w aplikacji programistów, którzy nie mają szans tego zdebugować i dowiedzieć się, co za magia odbywa się w bazie.

Baza danych jest od danych, nie od logiki biznesowej.

hipekk napisał(a):

Ja (nie wiem czy poprawnie ;)) często w ten sposób uzupełniam sobie kolumny z datami utworzenia/modyfikacji rekordu na przykład.

Nie używasz ORMa?

mariano901229 napisał(a):

Osobiście używam wyzwalaczy do prostych operacji. Typu nadzór nad modyfikacją danych lub/i wprowadzenie jakiejś wartości w inną kolumnę - np. daty utworzenia, modyfikacji, zaszyfrowanie danego pola itp. Twierdzę, że jest to bardzo przydatny mechanizm, który ułatwia wiele. Stworzenie tej samej logiki po stronie aplikacji może być po prostu bardziej czasochłonne.

Co jest bardziej czasochłonne?

  1. Napisać raz mechanizm na około 100 linijek kodu (z dużą górką), który zadziała później dla każdej nowej tabeli.
  2. Pisać triggery dla każdej tabeli oddzielnie, i poprawiać za każdym razem, gdy np. zmienisz jej nazwę.
0

Na czym polega "trigger w kodzie" Twoim zdaniem? Bo to z definicji mechanizm bazodanowy.
Chodzi o to, zeby gdzies w kodzie byla jakas funckja/metoda informujaca o tym co w tym momencie sie dzieje, np. usuniemy wiersz z tabeli, a trigger nam zrobi 3 inne rzeczy na tabelach, to zeby to bylo widac w kodzie, to trzeba jakas metode jednak wykonac.

Widze, ze ile programistow, tyle roznych opinii. Jedni mowia tak, drudzy tak. Trigger na pewno z pozoru wydaje sie wygodniejszy, ale w zmianach jest raczej gorszy.

WL
  • Rejestracja:około 21 lat
  • Ostatnio:około 2 miesiące
  • Postów:1082
0
Czarny Kot napisał(a):

Na czym polega "trigger w kodzie" Twoim zdaniem? Bo to z definicji mechanizm bazodanowy.
Chodzi o to, zeby gdzies w kodzie byla jakas funckja/metoda informujaca o tym co w tym momencie sie dzieje, np. usuniemy wiersz z tabeli, a trigger nam zrobi 3 inne rzeczy na tabelach, to zeby to bylo widac w kodzie, to trzeba jakas metode jednak wykonac.

Widze, ze ile programistow, tyle roznych opinii. Jedni mowia tak, drudzy tak. Trigger na pewno z pozoru wydaje sie wygodniejszy, ale w zmianach jest raczej gorszy.

Te odmienne opinie wynikają z doświadczenia (lub jego braku) konkretnej osoby, imho.
Gdyby taki programista-piewca triggerów miał do czynienia z systemem, który obsługuje setki (lub więcej) obiektów biznesowych o zmiennej logice lub z wysoką dynamiką zmian, to 10x by się zastanowił czy lepiej pisać trigger/procedurę czy jednak mieć to w modelu obiektowym.
I, jak słusznie zauważyłeś, trigger wymaga utrzymania. Oczywiście kod też, ale z dwojga złego wolę mieć logikę w kodzie a nie część w kodzie i bazie danych. Zwłaszcza, jeśli coś ma działać inaczej w zależności od XYZ...

Generalnie to temat rzeka (również w kontekście jak te metody wywołać w kodzie, bo przecież można po chamsku stosować IFologię, ale można też przy pomocy IoC/DI) i nie ma jednej prostej odpowiedzi. To zależy.

0

Heh, chyba dosc gleboki temat poruszylem. Generalnie Robie mala aplikacja, tak zebym chociaz troche odroznil sie od innych kandydujacych, wiec na razie pozostane przy tym, na czym stoje. Nie ma tam nic skomplikowanego, takich rzeczy to chcialbym sie nauczyc w pracy, wiec nie ma chyba co szarzowac. To moze tak na koniec, czym powinienem sie zainteresowac, jesli chodzi o back-end ujmujac problematyke wlasnei takich "triggerow" w "kodzie" ? Ogolnie pisze w PHP-ie bo obok pythona jest chyba najbardziej przyjazny dla osob ktore nie pisaly nigdy backendu. Ale rowniez jestem otwarty na propozycje z jezyka C#, bo cos tam go miznalem i byc moze pojde tez w ta strone.

KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
1
somekind napisał(a):

Generalnie, to do wkurzania wprowadzających poprawki w aplikacji programistów, którzy nie mają szans tego zdebugować i dowiedzieć się, co za magia odbywa się w bazie.

To jest bardzo ważna rzecz. Później my programistki dostajemy jakiś WTF błąd, debugujemy się i trudno jest ustalić nagle czemu jakieś pole gdzieś w któreś encji zmieniło sobie jakieś pole STATUS, bo na 4 głębokości triggera w innej tabelce na ktorej to cos zupdateowal inny trigger cos sie zmienilo.

BAZODANOWCY OGARNIJCIE SIE!


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
edytowany 2x, ostatnio: karolinaa
AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
hipekk napisał(a):

Ja (nie wiem czy poprawnie ;)) często w ten sposób uzupełniam sobie kolumny z datami utworzenia/modyfikacji rekordu na przykład.

Czy nie lepiej użyć default do tego celu?

Zobacz pozostałe 11 komentarzy
AB
uzupełnianie = insert
AB
po drugie, w bazach z wersjami modyfikacja = insert.
HI
Ok, masz racje.
AB
Dzielenie włosa na czworo...
HI
Czasem i na ośmioro.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)