Je suis assez d'accord avec wild-d sur ce coup, faut pas dramatiser... Ou alors tu crée un objet qui contient toutes les infos, et avec serialize et unserialize tu fait un seul insert de ton objet au format text dans la BDD. Contraintes? Les recherches, pas terrible sur un champs dans une BDD qui contient pleins d'infos, la tu dois passer par des REGEX.
Code PHP :
<?php
class Cubik
{
private $page;
public function __construct()
{
$this->page = array();
}
public function __set($key, $value)
{
$this->page[$key] = $value;
}
public function __get($key)
{
if(array_key_exists($key, $this->page))
{
return $this->page[$key];
}
else // enregistrement dans errorLog?
}
public function load($pageID)
{
$infos = Mysql::getInstance()->get(); ... // on se choppes les infos
$this->page = unserialize($infos);
}
public function saveAs($update = true)
{
$infos = serialize($this->page);
if($update === true)
{
Mysql::getInstance()->update(); // update avec $infos
}
else
{
Mysql::getInstance()->insert(); // insertion d'une nouvelle page
}
}
}
?>
Il te reste donc plus que la table pages, avec comme champs id et values.
Pour être plus concret: On migre les 2 autres tables dans des arrays (la aussi t'as autant de dimensions que tu veux, donc comme pour les BDD tu peux avoir autant de blocs par page et autant de configs par blocs que tu souhaite).
Au lieu de balancer des requêtes à tout allure on remplis notre array structuré, et uniquement tout à la fin, quand tout y est, on fait un update (ou une insertion, en passant false comme paramètre à la méthode saveAs()).