我正在使用ZF2和Doctrine開發管理日曆事件的項目。所有這些事件共享一組共同的數據元素,但是獨特類型的事件共享它們自己的獨特類型特定數據元素集合。例如,所有事件都包括常見元素,例如eventID
,eventName
和eventDate
。除了這些常見元素之外,「會議」事件還將具有其他元素,如會議專用的agenda
,minutes
或attendees
,「培訓」事件將具有特定於培訓的其他元素,「會議」事件「將有額外的獨特元素,等等。如何設置帶有條件關聯的ZF2主義實體
該項目的索引視圖將希望能夠列出所有事件,但不會需要「公共」數據集之外的任何數據。如果一個事件屬於某種類型,它也不屬於另一種類型;所以每個事件只會與一個補充數據集相關聯。某些事件類型可能有多個路由器:路由器sales/meetings[/action]
將希望訪問與路由器marketing/meetings[/action]
相同或相同的實體,字段集和表單。
在我的數據庫,我將有一個表名爲events
索引所有的事件,並記錄常用的數據,和我有關聯的表的集合像events_meetings
,events_training
,events_conferences
等記錄型特異性數據。
我考慮了許多的項目不同的解決方案:
解決方法一:單個模塊,單個events
實體和字段集,以及實體和字段集對於每個特定類型的數據元素的組。該解決方案需要events
實體具有多個OneToMany元素:每個關聯數據集一個。我不知道這是否可能;即使有可能,我也不知道這是否是一個好主意。
解決方法二:一個單一的模塊和複製的共同的「事件」的實體,字段集的副本:events_1
被鏈接到events
表並與events_meetings
實體相關聯; events_2
與events_1
相同,除了OneToMany元素並且它與events_training
實體相關聯;和events_3
,events_4
,events_5
等等各自與它們自己的補充數據集實體相關聯。我可以看到這個工作,但它需要大量幾乎相同的通用數據實體副本。
解決方法三:多個模塊,每個模塊具有單個events
實體和字段集,和單個關聯events_foo
實體和字段集。這也許是最乾淨的解決方案,儘管它似乎創建了很多相同的代碼。
解決方案四:重新配置數據模式,以便所有的補充數據可以存儲在一個表中。例如,對於每個會議事件和agenda
有一列,minutes
的列和attendees
的列,可以創建一個events_alt_data
表,該表的每個元素都有不同的行列如eventID
,elementType
,elementTitle
和eventValue
。Wordpress爲獨特的數據做了這樣的事情,但在我的項目中,補充數據集是大部分數據將被存儲的地方,我擔心數據增長時可能會影響性能。該解決方案還需要一些創意編碼來處理數據元素的條件性質,以及如何驗證和設置可能是任何類型或長度的數據的選項。
有什麼建議嗎?
http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html查看此鏈接中描述的歧視映射,您應該能夠映射一個實體,但可以與幾個基於數據庫行數據差異從基礎數據創建的實體。 – STLMikey