Salut.
Personnellement, je n'aime pas les notions de base de données de brouillon / base de données de travail.
En fait, pour moi peuvent exister différentes bases de données, avec les rôles suivants :
- Base de dev
- Base de test
- Base de recette
- Base de production
=> Les 4 bases sont identiques (dans la mesure où on n'est pas en train de faire de développement). Et leur rôle correspond uniquement aux phases de modification de l'application, et non des données
Mais aussi :
- Base de travail
- Base de reporting
=> La base de travail, c'est la base que tu utilises au jour le jour afin de gérer tes données.
=> La base de reporting est une base dédiée aux statistiques et autre rapports, synchronisée une fois par jour par exemple, dont le modèle est particulièrement adapté au reporting (données calculées stockées, etc.)
Par contre, avoir deux bases pour gérer la phase de vie des informations me semble une grosse erreur.
Imagine plutôt un flux de validation des données :
-> Une table "article_modification" dans laquelle tu clônes tout article à modifier, ou dans laquelle tu crées les nouveaux articles. Associée à une gestion de validation, cela te permet de travailler sur les données sans impacter celles qui sont disponibles dans la partie publique tant qu'elles n'ont pas été validées.
C'est le fonctionnement classique, quand il n'est pas simplement réduit à un flag dans la table "publique", mais à ce moment toute ligne en cours de modification est retirée de la partie publique tant qu'elle n'est pas validée, ce qui est donc plus adapté à de la création uniquement.
Ce système est d'ailleurs plus souple que celui que tu proposes, puisque tu comptes faire une validation "tout d'un coup", c'est à dire obliger les intervenants à stopper toute activité pendant la phase de validation, afin de pouvoir "pousser" en production toutes les informations modifiées. Avec ce que je préconise, tu n'as pas cette limitation, et tu "pousses" les éléments au fur et à mesure de leur validation.
Pour ce qui est des droits, je ne connais pas bien MySQL.
Pour SQL Server par contre, tu peux gérer les droits de façon très fine, un peu sur le modèle des droits sur la NTFS.
Ainsi, pour chaque objet de ta base, tu peux donner des droits spécifiques pour chaque utilisateur de la base de données.
Mieux, si un objet (vue, ps, trigger, etc.) dispose de droits suffisants pour être exécuté, il ne prendra pas en compte les éventuels droits explicites sur les objets utilisés.
Par exemple, tu as une table "user".
Dans cette table, tu as le champs "password". Donnée très sensible.
Tu peux alors faire un DENY sur tous les users.
Mais deux PS :
CheckLogin(login, pass) qui va rechercher l'id d'un user correspondant à ce login/pass, et faire un GANT pour tout le monde.
Si MySQL propose le même type de droits, alors je te conseille vivement de t'orienter vers ce type de gestion.
Sinon, pour ton histoire de clés étrangères... C'est pas parceque la base ne bouge pas qu'il ne faut pas de clés étrangères. Elles sont très utiles lors des jointures notamment !
http://forum.hardware.fr/hardwaref [...] 6416-1.htm
Message édité par MagicBuzz le 21-09-2006 à 10:36:13