Base de données dynamique

kammegg Messages postés 73 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 7 août 2006 - 29 mai 2006 à 17:00
kammegg Messages postés 73 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 7 août 2006 - 31 mai 2006 à 02:47
salut tout le monde
ma question est à propos des bases de données dynamique.
Dans ma base de données nommée "Bovin.mdb", je dispose de 3 tables nommées "Veau", "Génisse" et "Vache" qui héritent d'une autre table nommée "Animal". après un certain temps, chaque individu (càd un veau) dans la table "Veau" doit être supprimé de cette table et être en même temps enregistré dans la table "Génisse", c'est-à-dire une enregistrement qui va migrer d'une table vers une autre.
les données de ma BD sont consommées en utilisant le VB.NET. Donc j'ai besoin d'un code qui effectue ces tâche.
j'ai partout foué dans ce fameux site, sans trouvé une code pareil.

                           et merci

4 réponses

cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
29 mai 2006 à 17:43
ben heu il faut faire un insert dans ta table vache avec les données se trouvant dans génisse, mettre à jour (update) les identifiants permettant de faire le lien avec la table animal (ou n'importe quelle autre table) et enfin faire un delete dans la table génisse.

par contre je me pose une tite question pourquoi tu n'as pas une seule table avec un colonne qui détermine le sexe et une autre qui définit "l'age" (jeune ou adulte) avec ces deux champs tu peux aisément déterminer si tu as un veau ou une génisse, une vache un boeuf ou un taureau
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
29 mai 2006 à 22:01
salut,

C'est une technique de mapping O/R.
Comme vpoyo l'indique l'autre methode serait de faire persister l'héritage sur une seule table. L'avantage de cette methode est que le nombre de table est reduit mais le nombre de colonne peux vite devenir enormes.

Surtout si les sous classes ont des propriétés spécifiques.
Et il devient difficile de maintenir les colonnes a remplir ou non.

exemple
les figures
figure --> rectangle --> carre
--> triangle
--> ellispe --> rond
--> ligne

Dans ce cas le nombre de colonnes peut etre importants.
Mais la technique du types est plus optimale, car une seule table est chargé.
pas d'utilsation de jointure, pour aller sur les sous sousclasse.


Prenons ton cas

Animaux --> ID, age, nom, sexe, mere, pere,naissance, ...
Veaux --> ID
Genisses --> ID
Vache --> ID
Taureaux --> ID


Pour un veau ID veau = ID nanimal

Pour une migration, je te conseille de passer par une transaction.
Pour eviter que ID veau ID animal ID genisse

Pour le sexe je te conseille d'utiliser les exception

If genisse.sexe = "M" then
throw new SexeException("Sexe imossible pour une genisse")' throw new exception peut faire l'affaire si tu veux pas creer de nouvelles exceptions.
end if


Exemple de transaction dans http://www.labo-dotnet.com/cours/Cours%20du%20Laboratoire/Acc%C3%A8s%20aux%20donn%C3%A9es%20%20%20ADOdotnet/0/1289.aspx

dans la transaction

begin transaction
try
insert genisse value (@ID)
delete veaux where id = @ID
update animaux set age = @age
commit transaction
catch ex as exception
rollback transaction
end try

Il ne faut pas changer l'ID de la table animaux.

Esperant avoir eclairci le probleme.
Le mapping O/R est tres compliqué car il y a plusieurs methodes.
et aucune methode de vraiement bonne.

Car par exemple pour charger une collection, tu peux etre obliger de charger en parralele de nombreux enregistrements. 1 par élements de la collection.
Exemple sur un forum pour chaque message, recherhce le theme du message donc
n requete sur la table theme.

Pour pallier a ce probleme il faut utiliser des framewordk de mapping comme nhibertage ou evaluant.

Si tu veux des infos sur le mapping, vas faire un tour su www.dotnetguru.org
et surtout http://dotnetguru.org/articles/Persistance/livreblanc/ormapping.pdf


Exemple avec hibernate en java.
http://www.lisi.ensma.fr/members/jean/download/hibernate.pdf
0
cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
30 mai 2006 à 09:46
ce que tu as expliqué plus en détail nhervagault c'est ce que j'expliquais au début. Il va de soit qu'il faudrait utiliser une transaction, mais je n'en avais pas parlé car j'ai de gros doute sur la capabilité à Access de gérer les transactions mais vaut mieux vérifier dans la doc ou sur internet. Il sera toujours possible de simuler les transactions dans ton code en gardant un cache des données modifiées et en cas d'erreur faire exécuter les requêtes "inverses"
0
kammegg Messages postés 73 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 7 août 2006 1
31 mai 2006 à 02:47
salut
je te remercie pour les explications. je vais essayer de le faire, sinon si ça marche pas je vais mettre tout dans une seule table comme t l'as dit, et dans j'auai une seul table "vache" qui va hériter de la table "animal", ça va marcher aussi.

                                 merci
0
Rejoignez-nous