2009-09-24 27 views
1

我試圖將功能添加到應用程序,用戶可以在認購的變化做出兩種:持久性圖案 - 規則基於觀測

  • 其他實體(任何用戶)
  • 由其他用戶(對其他任何實體)
  • 兩者的組合(這最後一個可選的,但使問題更具挑戰性)

我想知道如何更好地堅持這些規則到數據庫中。

我自然朝向對於每個給定實體(包括用戶本身)趨向,我添加加成UserSubscription表/實體(例如,PublisherUserSubscription,BookUserSubscription,UserUserSubscription)

這意味着,訂閱將被持久完整性強制執行。然而,看起來這可能會使我需要的表的數量快速增加,並且可能會導致非常脆弱的設計,我應該稍後更改訂閱模型。 (每個現有表可能需要更新)。

鑑於這是一個相當普遍的現實世界的場景,我期望這會有一些模式。任何人都可以推薦一些

回答

1

我討厭暗示實體/屬性/值模式,但爲什麼沒有一個簡單的表格,如:

每個場景ObjectToUser/UserToObject
rulename Observer ObjectClass ObjectId 
======== ======== =========== ======== 

一個表?

如果您想要觀察某個特定的實體,比如某本書,請將對象的主鍵添加到EAV模式中。

然後,如果您需要檢查規則是否被觸發,您可以從表中的「ObjectClass」的「ObjectId」查詢並激發列出的任何規則。