Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kaip polimorfiniai ryšiai veikia užklausos sudėtingumą


Kaip polimorfiniai ryšiai veikia užklausos sudėtingumą


Polimorfiniai ryšiai Laravel gali padidinti užklausos sudėtingumą keliais būdais:

1. Papildomi stulpeliai: polimorfiniams ryšiams reikia papildomo stulpelio suvestinės lentelėje, kad būtų išsaugotas susijusios objekto tipas. Dėl to gali atsirasti sudėtingesnių užklausų, nes duomenų bazėje reikia filtruoti pagal šį papildomą stulpelį[1][2].

2. Kelių lentelių sujungimas: nuskaitant susijusius objektus, polimorfiniai ryšiai dažnai apima kelių lentelių sujungimą pagal susieto objekto tipą. Dėl to užklausos gali būti sudėtingesnės ir mažiau intuityvios, ypač kai kalbama apie didelius duomenų rinkinius[1][2].

3. Filtravimas pagal tipą: užklausos, susijusios su polimorfinėmis asociacijomis, turi būti filtruojamos pagal susieto objekto tipą, todėl užklausa gali būti sudėtingesnė. Tai ypač aktualu, kai tipas nėra fiksuotas ir gali dinamiškai kisti[1][2].

4. Poveikis našumui: poreikis filtruoti pagal papildomą stulpelį ir galimai sujungti kelias lenteles gali neigiamai paveikti našumą, ypač didėjant duomenų rinkiniui[1][2].

5. Ribotas užklausų palaikymas: kai kurios duomenų bazės funkcijos, pvz., pakopinis trynimas, gali neveikti taip paprastai su polimorfiniais ryšiais, todėl užklausa dar labiau sudėtinga[1].

Dėl šių veiksnių užklausas, apimančias polimorfinius ryšius, gali būti sunkiau valdyti ir optimizuoti, todėl gali kilti našumo problemų ir pailgėti derinimo laikas.

Citatos:
[1] https://scalablecode.com/the-pros-and-cons-of-implementing-polymorphic-relationships-in-sql-databases/
[2] https://laraveljsonapi.io/docs/3.0/digging-deeper/polymorphic-to-many.html
[3] https://www.reddit.com/r/laravel/comments/9cizrv/polymorphic_relationship_or_not/
[4] https://www.sitepoint.com/what-are-polymorphic-relations-and-how-do-we-use-them-with-eloquent/
[5] https://laravel.com/docs/11.x/eloquent-relationships