2009-02-11 60 views
0

數據模型:解決依賴性而不級聯刪除

tTemplate(TemplateId INT PK)
TPAGE(的PageId INT PK,TemplateId INT FK)
tEmailMessage(EmailMessageId INT PK,TemplateId INT FK)

要求:

只有在沒有依賴關係的情況下,才允許刪除模板。

的TemplateService負責刪除模板:

新TemplateService()刪除(MyTemplate的);

頁面和電子郵件模塊依賴於模板模塊,而模塊又快樂地不知道這些依賴關係。在一些設置中,頁面或電子郵件模塊不會出現事件。我將如何解決對底層數據模型的依賴性?如何讓TemplateService開始查詢以確定是否可以刪除該項目?

我已經對EventBrokers和Message Queues進行了一些研究,但沒有看到他們獨自如何幫助我。我也看不到如何單獨使用.net事件模型來解決這個問題。

我並不是在尋找一種維護數據完整性的方法,而是一種允許進行服務間通信而不會導致不必要的服務依賴性的方法。我可能會有一個PageService的實現,其中刪除模板是可以的,並且可以通過將tPage.TemplateId設置爲null來解決依賴關係。在其他實現中,我可能想要創建級聯刪除。

回答

1

這就是您的後備商店應該實施參照完整性的原因。在可能的情況下,您的模型將實現相同的功能,但刪除僅在沒有引用時才起作用。

此外,我會建議不要在嘗試刪除之前檢查所有數據,因爲您最終會遇到可能導致問題的爭用情況。從效率的角度來看,您可以簡單地從一開始就實現級聯刪除,假設頂級對象總是存在子行。

如果您擁有所有數據,則.Net模型只能保證參照完整性,否則只會嘗試刪除,不能保證。

+0

我並不是在尋找一種維護數據完整性的方法,而是一種允許進行服務間通信而不會導致不必要的服務依賴性的方法。我編輯了我原來的帖子。 – Marcus 2009-02-11 12:07:09