Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyzwalaj alternatywy dla dwóch tabel, które muszą się wzajemnie aktualizować

Korzystanie z wyzwalaczy to po prostu proszenie o kłopoty.

Ponadto wybór korzystania z programu planującego nie jest prawdopodobnie najlepszym pomysłem, ponieważ zaplanowane zadania mogą wyświetlać tylko zatwierdzone dane. Więc albo zatwierdzasz wyzwalacz, który wyrzuca logikę transakcji poza okno, albo zmiany w tabelach są opóźniane do końca transakcji.

Powinieneś:

  1. Stosuj procedury. Najprostsza odpowiedź. Gdy masz wiele aplikacji, nie powinny one bezpośrednio wykonywać logiki DML/businees, powinny zawsze robić to za pomocą procedur, aby wszystkie uruchamiały ten sam kod. Zabroń bezpośredniego DML z dotacjami lub widokami. Może być konieczne wymuszenie użycia procedur poprzez INSTEAD OF wyzwala na widokach (rozważ to tylko wtedy, gdy nie możesz modyfikować aplikacji).

  2. Prawdopodobnie nawet lepsze niż procedury w Twoim przypadku:użyj schematu, który nie zawiera zduplikowanych danych. Nie chcesz przechowywać nadmiarowych danych:to sprawia, że ​​tworzenie aplikacji jest bardziej złożone niż to konieczne. Jeśli chodzi o wydajność, zasoby i energię, najlepszym sposobem rozwiązania problemu jest uświadomienie sobie, że zadanie jest niepotrzebne.

    W opisie modelu znajdują się kolumny, które możesz usunąć:

    • zadanie.duration_in_days
    • data.end_zadania
    • task.needs_recomputation
    • podzadanie.data_początkowa
    • podzadanie.data_końcowa


    task tabela zawierałaby tylko datę rozpoczęcia, a każde podzadanie przechowywałoby tylko czas trwania. Gdy potrzebujesz informacji zagregowanych, użyj złączeń. Możesz użyć widoków, aby umożliwić aplikacjom przejrzysty dostęp do danych.

  3. Użyj obejścia wyzwalacza mutacji który używa zmiennych pakietu do identyfikowania zmodyfikowanych wierszy za pomocą BEFORE i AFTER wyzwalacze instrukcji. Oczywiście będzie to wymagało dużej ilości kodu, który będzie trudny do zakodowania, przetestowania i utrzymania, więc powinieneś zamiast tego używać opcji (1) i (2), gdy tylko jest to możliwe.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolejność usuwania z kolejki Oracle AQ

  2. Problemy z wyzwalaczem PL/SQL

  3. Return List<String> przy użyciu Spring jdbc z procedury składowanej Oracle posiadającej niestandardowy obiekt

  4. Podziel wyniki zapytania po załadowaniu XML za pomocą fn:string-join w tabeli Oracle

  5. Funkcja EXP() w Oracle