Index: topia/doc/PersistenceImplantationJDBCMultiTable.rst diff -u /dev/null topia/doc/PersistenceImplantationJDBCMultiTable.rst:1.1 --- /dev/null Wed Aug 24 16:17:43 2005 +++ topia/doc/PersistenceImplantationJDBCMultiTable.rst Wed Aug 24 16:17:38 2005 @@ -0,0 +1,73 @@ +============================================== +Implantation d'un storage sur JDBC Multi-table +============================================== + +:Authors: Benjamin POUSSIN +:Version: $Revision: 1.1 $ +:Date: $Date: 2005/08/24 16:17:38 $ + +L'implantation avec une seul table pour toutes les entités a des limites du +au base de données qui ne support pas completement le SQL standard. +L'utilisation d'une seul table complexifie les requetes sur la base. + +Une implantation utilisant une table par type d'objet est donc necessaire. + +Ce document présente son implantation. + +Les tables de management +======================== + +Il y a deux tables de management la premier pour faire le lien entre un type +de classe et la table qui permet de stocker les données de l'objet. Cette table +contient aussi la version de schema des objets stockés. + +La deuxieme table contient l'heritage des objets. Cette table permet de savoir +sur quelle table faire une requete lorsque l'objet est le pere d'autres objets. + +topia_mapping_table +------------------- + +Les champs sont: + +- topia_class: text # classe de l'entite +- topia_table: text # la table contenant les données +- topia_schemaVersion: long # la version des objets + +topia_heritage_table +-------------------- + +Les champs sont: +- topia_class: text # classe de l'entite +- topia_child: text # classe d'un des fils de l'entite + +Si A<--B<--C alors la table contiendra + +A | B +B | C + +On est donc obligé de faire plusieurs requete si l'on veut connaitre tous les +objet qui herite directement ou indirectemnet de A. On est obligé de faire ainsi +car sinon la mise a jour lors d'un changement de schema est impossible. + +Cette table est renseigné des qu'un nouveau type d'entité est enregisté dans +la base, un nouveau type est enregistré lorsqu'il n'a pas de mapping dans +l'autre table. + +Lorsqu'un objet change de version de schema, on commence par supprimer toutes +ces occurences dans la colone topia_child et on reenregistre la classe, car son +arbre d'heritage a peut etre modifié. + + +Les tables de données +===================== + +Les tables de données contiennent les données de objet mais aussi des données +de gestion propre a topia. Ces dernieres sont: + +- topia_id text # l'identifiant topia +- topia_longdate long # la date en long de la dernier modif ou de la transaction +- topia_class text # la classe de l'objet, utile pour les requetes avec des jointures entre table mere et filles +- topia_isNew bool # si vrai l'objet est un nouvelle objet +- topia_isDeleted bool # si vrai l'objet n'existe plus + +