I understand your concerns. The db structure can look quite complex, especially if you are used to working with db tables and SQL select ... from ... etc; Teppo explained the reason for this structure. The great thing about this structure is that you get an abstraction layer that makes all the PW awesomeness possible. It transforms all the custom fields and data in the database into PHP page objects that can be used for easy and effortless markup generation. I'm talking about the great pw api 🙂
Display all that in multiple languages? Same code 😎 I think that's really genius!
Are there downsides of this approach? Yes, as always. For example it is not easy for PW to do a "SELECT * FROM table_xy" to get a list of thousands of rows of data. That's because the magic of transforming the complex db structure into an easy to understand and use API has some costs. It needs to load all rows of data into memory and therefore this get's slow when working with lots of data. PW handles this by applying pagination wherever possible, so that it only loads chunks of data and stays fast. But still there might be situations where you simply need a good old "SELECT * FROM ..." and "foreach($pages as $page) $rows = [$page->title, $page->headline, ...]" is no option.
That was quite a long introduction and explanation why I built RockFinder3 😄
So at least the PULL part of your request is already doable 🙂 What about the PUSH part (meaning updating data in the DB, doing "UPDATE ... , INSERT INTO ...")?
First, you can still use native SQL commands on PW, it's quite easy:
$result = $this->database->query("SELECT * FROM pages LIMIT 5");
The problem is, that updating data can get quite complex because you need to update several tables, several fields, several languages...
That's why such operations should really be done via API. That's of course a totally different approach if you are used to working with SQL commands, but it is the best option in 99,5% of the cases. There's a topic about that where I showed my findings:
For the remaining 0,5%:
You see, it can be quite easy. Is it a good idea? 99,5% no, because you don't get all the security features of PW that ensure that data is sanitized before storage etc. And you don't get the power of hooks. Updating pages via API will still trigger saveReady() and saved() hooks while direct SQL updates will not.
Hope that helps 🙂