it's like that since years, and deep into the LimeSurvey code.
normalizing DB should be done for LS4... But NoSQL table just works that way. Standards are changing all the time. So maybe we should just not normalize the DB, but rather switch to NoSQL table for survey taking? Who knows...
Priority for now has been to make visible changes for final user, not to refactor the code or the DB (at least, not more than necessary). Code refactoring has been done while moving from 1.x to 2.x: it consisted to move from PHP4 Procedural Code to Object Oriented Code using Yii... Yeah: 15 years of code layers, starting in PHP4. Did you already work on huge and very old application? Or only in small home made application coded from scratch?
As denis could tell you (I wasn't here in that time), final users didn't really seen the difference between 1.x and 2.x. I'd say they're seeing the benefit of the conversion to Yii only since LS3... Same for DB normalization: They will just not understand why we broke survey archive retro-compatibility for something that doesn't bring any advantage (for them ^^)
If you want to see how to deal with an ORM and Dynamic Tables:
github.com/LimeSurvey/LimeSurvey/blob/ma...ls/SurveyDynamic.php
This piece of art of code as been written during a Google Summer Code in 2009.
10 years ago.
If you know a bit about Microsoft Windows History (billion dollars company with huge teams of extremely good coders), they only get rid off MS DOS kernel in the Windows 10. Yeah. Get rid of the foundations of a software is not that easy.