Triggery w MySQL

0

Hej.
Temat posta ogólny ponieważ nie wiem jak go zdefiniować.

Zarys:
W aplikacji mam tabele BOOK, AUTHOR, i HISTORY.
BOOK może mieć wiele AUTHOR. AUTHOR ma referencje do BOOK.
Przy każdej operacji CRUD w tabeli AUTHOR, w tabeli HISTORY powstaje nowy rekord że nastąpiła taka operacja.
Na tabeli AUTHOR mam Triggery które wstawiają rekord do HISTORY w przypadku CRUD na autorze (AFTER INSERT, AFTER UPDATE, BEFORE DELETE).

Dostałem pewnien kod aplikacji który działa w taki sposób że:

  • BOOK ma 1 autora, powiedzmy: Jan Nowak
  • Dodaję współautora do BOOK, powiedzmy Marek Kowalski.
    Po kliknięciu ZAPISZ
  • wszyscy obecni autorzy (czyli Jan Nowak) zostają usunięci (Tworzy się rekord z akcją Delete)
  • do AUTHOR zostaje dodany rekord Marek Kowalski (Tworzy się rekord z akcją Insert)
  • do AUTHOR zostaje dodany rekord Jan Nowak (tworzy się identyczny jak był wcześniej, który został usunięty) (Tworzy się rekord z akcją Insert)

W powyższym przykładzie stworzą się 3 rekordy w HISTORY: 1 z Delete, i 2 z Insert.

Chciałbym żeby się tworzył tylko 1 rekord: z akcją  Insert dla Marek Kowalski

Czy ma ktoś jakiś pomysł jak to można by rozwiązać za pomocą triggerów? Siedzę już nad tym sporo czasu i nic mi do głowy nie przychodzi.

Nie mam dostępu do kodu aby móc go edytować.

0

c.d.

Tak samo z edycją.
Fizycznie nie ma robionego UPDATE (trigger jest do wywalenia).
W przypadku zmiany np. nazwiska w rekordzie AUTHOR, np. z Jan Kowalski na Jan Wrona:

  • Jan Kowalski jest usuwany - tworzy się rekord w HISTORY z akcją Delete
  • Jan wrona jest tworzony - tworzy się rekord w HISTORY z akcją Insert
0

nie zrobisz tego sensownie na poziomie bazy - to trzeba zmienić w aplikacji

0

Też tak właśnie myślę. Ale chciałem się upewnić na forum.
Zacząłem kombinować w aplikacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1