Vastus (12.06.2023 16:27): Ei tekita.
Põhjendan vastust. Tegin katsetusi PostgreSQL 15 andmebaasis, millel on järgmine kontseptuaalne struktuur:
[Facility]-0..1-----------------0..*-[Health_care_visit]
Tabel
Facility: 50 000 rida
Tabel
Health_care_visit: 1 000 00 rida
Tabelis
Health_care_visit on 6 rida, kus
facility_id=200
Tabelis
Health_care_visit on indeks veerul
facility_id.
Katsetasin kahe ülesande täitmist:
- Ül1: Kustuta tervishoiuasutus, mille id=200 ja selle asutusega seotud külastused.
- Ül2: Kustuta kõik tervishoiuasutused ja nende asutustega seotud külastused.
Katsetasin nende ülesanne täitmist kahe andmebaasi disaini korral.
- D1: Välisvõtme kitsendusega on seotud ON DELETE CASCADE kompenseeriv tegevus. See tähendab, et kustutasin ridu ainult tabelist Facility ja seotud read kustutati kaskaadselt tabelist Health_care_visit.
DELETE FROM Facility WHERE facility_id=200;
DELETE FROM Facility;
- D2: Välisvõtme kitsendusel ei ole ON DELETE CASCADE kompenseerivat tegevust. See tähendab, et kõigepealt tuli kustutada read tabelist Health_care_visit ja siis sai kustutada read tabelist Facility.
DELETE FROM Health_care_visit WHERE facility_id=200;
DELETE FROM Facility WHERE facility_id=200;
DELETE FROM Health_care_visit;
DELETE FROM Facility;
Viisin iga ülesande ja disaini paari korral kustutamist läbi viis korda ja leidsin süsteemi kulutatud aja (lausete täitmisplaani koostamine + plaani täitmine) keskmise
Ül1, D1 (ON DELETE CASCADE): 0.94 ms
Ül1, D2 (ON DELETE NO ACTION): 0.77 ms
Ül2, D1 (ON DELETE CASCADE): 4975 ms
Ül2, D2 (ON DELETE NO ACTION): 7409,204 ms
Nagu näha, siis primaarsest tabelist (vanemtabelist) ühe rea kustutamisel oli ON DELETE CASCADE lahendus veidi aeglasem, kuid mõlemad lahendused olid aktsepteeritava töökiirusega.
Primaarsest tabelist (vanemtabelist) kõikide ridade kustutamisel oli ON DELETE CASCADE lahendus palju kiirem, kusjuures operatsiooni läbiviimine võttis mõlemal juhul palju aega.
Kokkuvõttes järeldan, et töökiirus ei peaks olema argument, miks ON DELETE CASCADE
mitte kasutada.
NB! Eelnev näide põhineb ühel andmebaasisüsteemi versioonil. Teistes andmebaasisüsteemides või versioonides võivad tulemused olla erinevad.