sql >> Database >  >> RDS >> Oracle

Activeer alternatieven voor twee tabellen die elkaar wederzijds moeten bijwerken

Het gebruik van triggers hier is gewoon vragen om problemen.

Bovendien is de keuze om de planner te gebruiken waarschijnlijk niet het beste idee, aangezien de geplande taken alleen vastgelegde gegevens kunnen zien. Dus ofwel commit je je aan de trigger die de transactielogica uit het raam gooit, ofwel worden de wijzigingen aan de tabellen uitgesteld tot het einde van de transactie.

U moet ofwel:

  1. Gebruik procedures. Het eenvoudigste antwoord. Als je meerdere applicaties hebt, moeten ze de DML/bedrijfslogica niet rechtstreeks uitvoeren, ze moeten dit altijd doen met procedures zodat ze allemaal dezelfde code uitvoeren. Verbied directe DML met subsidies of views. Mogelijk moet u het gebruik van procedures forceren via INSTEAD OF triggers op weergaven (overweeg dit alleen als u de toepassing niet kunt wijzigen).

  2. Waarschijnlijk zelfs beter dan procedures in jouw geval:gebruik een schema dat geen dubbele gegevens bevat. U wilt geen overbodige data opslaan:dit maakt applicatieontwikkeling complexer dan nodig. In termen van prestatie, middelen en energie, is de beste manier om een ​​probleem op te lossen, wanneer je je realiseert dat de taak niet nodig is.

    Uit de beschrijving van uw model zijn hier de kolommen die u zou kunnen verwijderen:

    • task.duration_in_days
    • task.end_date
    • task.needs_recomputation
    • subtask.start_date
    • subtask.end_date


    De task tabel zou alleen de startdatum bevatten en elke subtaak zou alleen de duur ervan opslaan. Gebruik joins als u de verzamelde informatie nodig hebt. U kunt weergaven gebruiken om de applicaties transparant toegang te geven tot de gegevens.

  3. Gebruik een oplossing voor het muteren van triggers die pakketvariabelen gebruikt om gewijzigde rijen te identificeren met BEFORE en AFTER verklaring triggert. Het is duidelijk dat dit veel code met zich meebrengt die moeilijk te coderen, testen en onderhouden is, dus u moet in plaats daarvan waar mogelijk de opties (1) en (2) gebruiken.



  1. Back-ups maken van SQL-databases met de VDP Advanced SQL Agent

  2. MYSQL selecteer 2 willekeurige rijen uit elke categorie

  3. jOOQ EXTRACT (EPOCH VAN [veld]) oplossing?

  4. Exporteer MySQL naar CSV, sommige kolommen met aanhalingstekens en sommige zonder