2016-02-21 47 views
0

我正在建立一個跟蹤學校拍賣中物品捐贈和銷售的網站。複合元素的數據庫設計

項目可以單獨或地段,這只是捆綁銷售作爲一個單位(如用於電影票項目禮券捆綁晚餐項目禮券)項目組出售。

這兩種東西(項目和批)類似名稱,描述,價值份額的字段。但項目還有其他領域,如捐助,使用限制,項目類型等

我開始通過創建一個名爲地塊表和關聯表,讓很多含有1+項目。

這對很多很有用。但是,這給我留下了一個問題:

當買家贏了,我需要記錄勝的價格。我正在用一張Win表格將買方與拍賣品和獲勝價格聯繫起來。

但是,如何處理所有未分配給批次的項目?每件物品都應該在一個地段,只有一個?這是有道理的,因爲它可以與上面的Win表格方案一起工作,但是我需要爲每個不屬於另一批次的物品自動創建批次。這似乎很奇怪。

我確定這是一個簡單的問題,但我無法弄清楚!

謝謝!

+1

使用表繼承。 –

回答

0

你把每件物品當作很多東西的方法應該是勝利的。這聽起來很奇怪,但從長遠來看,這會讓事情變得更容易。

我必須在日常的基礎上處理一個數據庫,在這個數據庫中類似的問題被「解決」了,這意味着將物品和項目捆綁在一起並且被證明是一個很好的皮塔餅(當然,我沒有在這裏談論一個扁平的圓麪包)。

這個數據庫既是統計評估的主幹,也是一堆(web)應用程序,並且在決定選擇哪個表時或在查詢和編碼時如何平衡這兩個組之間的差異時遇到麻煩。

所以,即使你的項目將是相當小的,最終,這是一個好主意。

是的,你需要提供把每一個項目中有很多的方法,但是這個問題是要採取一次。另一方面,由於那個'額外'表,你的查詢不會變得複雜得多,所以我肯定會選擇這種方式。

+0

感謝您的建議。所以...採取這種方式,每次創建新項目時,我都會自動創建一個新項目。如果我刪除了一個項目,我需要檢查before_destroy,任何只包含該項目的地塊也被刪除。此外,只有一件物品可能會默認使用該物品的名稱和描述作爲該物品的名稱和描述。會有很多這樣的勤奮點。使用@jvillian的多態方法,我需要輸入很多(比如贏了很多或者是一個項目),這看起來不那麼幹淨,不是嗎? – HelloMundo

+1

寫這篇文章的時候我其實並沒有想太多幹淨或不乾淨,但更多的含義。現在你還有三點意見,我不敢打電話給那些不潔的人。出於不好的經驗,我會選擇統一存儲數據的選項,因爲這似乎是編碼和查詢的良好基礎。如果您擔心或分析實現該狀態的必要活動過於複雜,那麼保持項目和區分是完全正確的。乾杯。 – MyBrainHurts

+0

好吧,@MyBrainHurts! – jvillian

0

聽起來像你有一個拍賣模式,可能有一個或多個項目。然後,您可以進行兩種不同類型的拍賣:拍賣::單一拍賣::拍賣。價格將成爲拍賣的一個專欄。拍賣有許多投標,這是拍賣和用戶(或投標人)之間的聯合模式。該加入模式也會存儲出價。拍賣結束後,您可以根據需要創建單獨的贏記錄,或者通過拍賣中最高的出價找到贏家。

0

如果你顯示一些代碼,這將是有幫助的。但是,你想要的是一個多態關聯。所以,像這樣:

class Item 
    has_one :win, as: :winnable 
    belongs_to :lot 
end 

class Lot 
    has_one :win, as: :winnable 
    has_many :items 
end 

class Win 
    belongs_to :buyer 
    belongs_to :winnable, polymorphic: true 
end