2011-11-03 134 views
0

我想要一個表格,我想要有日期範圍的條目。 我通常如何做的,是有一個表: someId [不是唯一] 的startDate 結束日期基於開始日期和結束日期的GORM複合鍵

這三個將創建一個主鍵+我想補充一些限制,以確保日期不重疊等

從數據庫的角度來看,一切都很好,但是當我想在Grails中創建一個領域類來處理它時......那麼我認爲它更困難。 有沒有一種方法,以確保如果我有一個關係: ClassA的hasOne ClassB的[ClassB的會日期範圍] ,我有條目ClassB的:

Id StartDate EndDate  Name 
1 2011-11-01 2011-11-05 A 
1 2011-11-06 2011-11-10 B 

,並與名稱的,以對象A分配對象B在2011年11月3日,然後在2011年11月7日檢索objectA它會指向名爲B的objectB?

回答

0

我們所做的到底是: 創建三列的索引和約束[數據庫上,因爲在Grails的創建索引1.3.7被打破,約束處理是瘋狂],建立靜態startDateendDate變量,保存當前範圍的開始和結束日期。通過這種方式,我們能夠保持我們想要的功能,並且性能非常好。

0

這似乎是一個糟糕的方式來設計您的數據庫。在大多數情況下,你應該只使用一個數字ID作爲對象。

如果您正在處理的情況是,您有多個與同一個對象關聯的日期範圍,那麼您應該構建數據來表示該對象,通過擁有一個父對象和一個代表日期範圍列表的子對象。

class Foo { 
    static hasMany = [bars:Bar] 
    static mapping = { 
     bars lazy:false 
    } 
    ... 
} 

class Bar { 
    static belongsTo = [foo:Foo] 
    Date startDate 
    Date endDate 
    ... 
} 

Grails使級聯刪除變得非常簡單,所以沒有真正的理由不以這種方式創建它。

+0

感謝您的回答,但這不是一個解決方案。每次我想訪問數據時,我仍然需要進行搜索。我不能使用一個簡單的findBy ...因爲之間不會在我的情況下工作,我必須做一個條件搜索查詢,或者我必須先找到Foo,然後尋找酒吧。根據我的經驗,組合鍵總是比多個表上的多重選擇[或連接兩個表]更快。 – Krystian

相關問題