2014-04-16 88 views
0

我正在使用ZF2和Doctrine開發管理日曆事件的項目。所有這些事件共享一組共同的數據元素,但是獨特類型的事件共享它們自己的獨特類型特定數據元素集合。例如,所有事件都包括常見元素,例如eventID,eventNameeventDate。除了這些常見元素之外,「會議」事件還將具有其他元素,如會議專用的agenda,minutesattendees,「培訓」事件將具有特定於培訓的其他元素,「會議」事件「將有額外的獨特元素,等等。如何設置帶有條件關聯的ZF2主義實體

該項目的索引視圖將希望能夠列出所有事件,但不會需要「公共」數據集之外的任何數據。如果一個事件屬於某種類型,它也不屬於另一種類型;所以每個事件只會與一個補充數據集相關聯。某些事件類型可能有多個路由器:路由器sales/meetings[/action]將希望訪問與路由器marketing/meetings[/action]相同或相同的實體,字段集和表單。

在我的數據庫,我將有一個表名爲events索引所有的事件,並記錄常用的數據,和我有關聯的表的集合像events_meetingsevents_trainingevents_conferences等記錄型特異性數據。

我考慮了許多的項目不同的解決方案:

解決方法一:單個模塊,單個events實體和字段集,以及實體和字段集對於每個特定類型的數據元素的組。該解決方案需要events實體具有多個OneToMany元素:每個關聯數據集一個。我不知道這是否可能;即使有可能,我也不知道這是否是一個好主意。

解決方法二:一個單一的模塊和複製的共同的「事件」的實體,字段集的副本:events_1被鏈接到events表並與events_meetings實體相關聯; events_2events_1相同,除了OneToMany元素並且它與events_training實體相關聯;和events_3,events_4,events_5等等各自與它們自己的補充數據集實體相關聯。我可以看到這個工作,但它需要大量幾乎相同的通用數據實體副本。

解決方法三:多個模塊,每個模塊具有單個events實體和字段集,和單個關聯events_foo實體和字段集。這也許是最乾淨的解決方案,儘管它似乎創建了很多相同的代碼。

解決方案四:重新配置數據模式,以便所有的補充數據可以存儲在一個表中。例如,對於每個會議事件和agenda有一列,minutes的列和attendees的列,可以創建一個events_alt_data表,該表的每個元素都有不同的行列如eventID,elementType,elementTitleeventValue。Wordpress爲獨特的數據做了這樣的事情,但在我的項目中,補充數據集是大部分數據將被存儲的地方,我擔心數據增長時可能會影響性能。該解決方案還需要一些創意編碼來處理數據元素的條件性質,以及如何驗證和設置可能是任何類型或長度的數據的選項。

有什麼建議嗎?

+0

http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html查看此鏈接中描述的歧視映射,您應該能夠映射一個實體,但可以與幾個基於數據庫行數據差異從基礎數據創建的實體。 – STLMikey

回答