2009-02-11 5 views
0

Modèle de données:Résolution des dépendances sur le modèle de données sans suppression en cascade

tTemplate (templateId int PK)
tpage (PageId int PK, templateId int FK)
tEmailMessage (EmailMessageId int PK, templateId int FK)

Exigences:

La suppression d'un modèle ne doit être autorisée que s'il n'y a pas de dépendances.

Le TemplateService est responsable de la suppression de modèles:.

nouvelle TemplateService() Supprimer (MyTemplate);

Les modules Page et E-mail dépendent du module Template qui, à son tour, n'est heureusement pas conscient de ces dépendances. Dans certaines configurations, le module Page ou Email ne sera pas présent. Comment pourrais-je résoudre la dépendance sur le modèle de données sous-jacent? Comment est-ce que j'obtiens le TemplateService pour commencer une enquête pour savoir si c'est OK pour supprimer l'article?

J'ai fait quelques recherches sur EventBrokers et les files d'attente de messages, mais je ne vois pas comment ils peuvent seuls m'aider. Je ne vois pas non plus comment l'utilisation du modèle d'événement .net suffirait à résoudre ce problème.

Je ne suis pas vraiment à la recherche d'un moyen de préserver l'intégrité des données, mais plutôt de permettre une communication inter-service sans causer de dépendances de service indésirables. Je pourrais avoir une implémentation de PageService où la suppression du template serait correcte, et où la dépendance serait résolue en mettant le tPage.TemplateId à null. Dans d'autres implémentations, je pourrais vouloir créer une suppression en cascade.

Répondre

1

C'est la raison pour laquelle votre banque de support doit implémenter l'intégrité référentielle. Dans la mesure du possible, votre modèle implémenterait la même chose, mais les suppressions ne fonctionneront que s'il n'y a rien référencé.

En outre, je recommande de ne pas vérifier toutes les données avant de tenter une suppression car vous pourriez vous retrouver avec une condition de concurrence qui pourrait vous causer des problèmes. D'un point de vue de l'efficacité, vous pouvez simplement implémenter la suppression en cascade dès le départ, en supposant qu'il y aura toujours des lignes enfants pour votre objet de premier niveau. Le modèle .Net garantit uniquement l'intégrité référentielle si vous disposez de toutes les données, sinon les suppressions ne seront tentées que si elles ne sont pas garanties.

+0

Je ne suis pas vraiment à la recherche d'un moyen de préserver l'intégrité des données, mais plutôt de permettre une communication inter-service sans causer de dépendances de service indésirables. J'ai modifié mon affichage original. – Marcus

Questions connexes