Question

J'écris un système de gestion de documents simple pour mon travail. Je ne suis qu'un amateur, mais je programme depuis longtemps. Mon problème est le suivant. Lorsque je supprime un certain nombre de documents via mon application, je dois ensuite supprimer les enregistrements de base de données associés. Quelle est la meilleure façon de s'y prendre sans créer des fichiers sans enregistrement de base de données, ou des enregistrements pointant vers des fichiers qui n'existent pas, si une exception est levée?

Était-ce utile?

La solution

Stockez les fichiers dans la base de données. Ensuite, vous pouvez avoir une intégrité référentielle sans ajouter de complexité (MSMQ, etc.) à votre application. Oui, cela augmentera la taille de votre base de données. Mais les fichiers sont déjà sur votre serveur, ce sont donc les mêmes bits à un endroit différent.

Autres conseils

C’est une sorte de " transaction distribuée " système. Vous voulez probablement écrire une routine de consolidation et l'exécuter de temps en temps, vous aurez des incohérences à un moment donné.

Vous avez dit "via mon application". Est-ce que cela signifie qu'ils ne peuvent supprimer des fichiers que via l'interface de l'application? Si tel est le cas, encapsulez la suppression dans une transaction personnalisée pour supprimer le fichier et supprimer l'enregistrement de la base de données. Si un côté échoue, annulez l'autre.

Si vous souhaitez leur permettre de supprimer des fichiers du répertoire de fichiers, puis de supprimer automatiquement les enregistrements de base de données, vous pouvez effectuer de nombreuses opérations, notamment des nettoyages périodiques et / ou un service Windows de surveillance des répertoires de fichiers surveillant l'activité en cours. un répertoire, puis lance le nettoyage.

Merci pour vos réponses. Je pensais déjà à la voie du BLOB mais je n'étais pas sûr que mon patron y aille. Il aime une bonne structure de répertoire, vous savez? En ce qui concerne les transactions distribuées, je ne savais rien à leur sujet, mais elles semblaient être la manière la plus professionnelle de les aborder. Mais comme je suis un amateur et que tout semble trop compliqué, je vais gagner mon tour de boss sur le front du BLOB. À votre santé.

Vous devez utiliser une transaction distribuée incluant votre base de données et la file d'attente MS Messaging (MSMQ). Vérifiez que votre base de données peut être inscrite dans une transaction distribuée avec Microsoft Distributed transaction Coordinator (DTC).

Programmez toutes les opérations sur les fichiers avec MSMQ.

Ce lien pourrait vous aider

J'ai des fonctionnalités similaires dans certaines de mes applications.

Ce que je fais est de supprimer le fichier d’abord par l’application, puis de supprimer l’enregistrement de base de données contenant un lien / pointeur sur le fichier. Lorsque les utilisateurs demandent un document (ce qui signifie que le lien vers le fichier existe toujours dans la base de données), l'application vérifie d'abord le fichier et si, pour une raison quelconque, il n'est pas présent comme prévu, il nettoie l'enregistrement de la base de données. à ce stade et informe l'utilisateur de l'erreur " erreur " gracieusement.

" Orphelin " De toute façon, les documents n’arrivent pas souvent, mais cette méthode garantit que la base de données est constamment nettoyée lors de l’exécution de l’application.

Il y a beaucoup d'autres façons de gérer cela, mais celle-ci fonctionne pour moi.

Supprimez d’abord les enregistrements de la base de données et occasionnellement le référentiel d’audit. Par audit du référentiel, je veux dire rechercher des fichiers qui n’ont pas d’enregistrement de base de données. Si vous supprimez d'abord l'enregistrement de base de données, votre code ne cherchera pas de documents qui n'y sont pas réellement.

Combien de documents et quel type de documents prévoyez-vous stocker?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top