Namų darbas — sulaužyk trigerį, išbandyk išorinį raktą
Augina programą. Suteik savo programai papildomą-tik pėdsaką, jei ji turi būseną, vertą audito, arba dirbk su SignFlow.
-
Bandyk perrašyti istoriją.
psqlUPDATEesamos audito eilutėsmessageirDELETEvieną. Abu atmeta trigeris su savo tikslia klaida. Dabar, kaip eksperimentą,DROP TRIGGER audit_events_no_update_delete ON audit_events;ir bandykUPDATEvėl — jis veikia. Grąžink trigerį. Parašyk du sakinius, ką tai įrodo apie garantijos ribą ir ką pridėtų „įrašų siuntimas už dėžės ribų". -
Kodėl ne išorinis raktas? Pridėk
REFERENCES documents(id) ON DELETE CASCADEpriedocument_id(juodraštinėje migracijos kopijoje), perseeduok, įkelk ir ištrink juodraštį, ir pažiūrėk įaudit_events. Eilutės dingusios. Dabar bandykON DELETE RESTRICT— trynimas užblokuotas. Paaiškink savais žodžiais, kodėl be išorinio rakto — vienintelis variantas, išlaikantis ir trynimą, ir įrodymą. -
Bendra laiko žyma. Pasirašyk paskutinį pasirašytoją dokumente ir užklausk
select seq, created_at, event_type from audit_events where document_id='<id>' order by seq.signedircompletedeilutės neša tą pačiącreated_at. Paaiškink kodėl (now()transakcijoje) ir kodėlseq— necreated_at— yraORDER BY. -
Užšaldyta prieš gyva. Audito žinutė saugo
alice@example.com signed as "Alice"kaip užšaldytą tekstą. Tarkim, vietoj to UI atkurtų tą sakinį atvaizdavimo metu, sujungdama susignerseilute. Įvardyk du būdus, kaip tai vėliau galėtų parodyti kažką kitokio nei iš tikrųjų įvyko — ir kodėl užšaldytas sakinys negali.
Dokumentų fazė baigta: įkėlimas, nuosavybė, kvietimai, pasirašymas ir nekintamas pėdsakas. Toliau — diegimas: viso to perkėlimas į Railway, kur laikinos failų sistemos įspėjimas iš įkėlimo pamokos pagaliau turi būti išspręstas.