2011-10-03 43 views
2

使用Rails 2.1和Mysql。兩張桌子上的許多布爾值

我有一個corporation model,這has_many companies

當然company model的同時,我需要這belongs_to corporation

到相當多的布爾值列添加到這兩個表,但這種感覺真的錯了。每張桌子都會有相同的布爾值,我們會首先檢查公司,看它是否屬實,然後是公司。所以,我可以看到的選項有:

  • 將布爾值添加到每個表中。我想這是最簡單的,但感覺真的很多。

  • 創建一個名爲「boolean_options」的附加表,它將屬於公司和公司。每個布爾值都添加到該表中,然後連接到適當的模型。

  • 使用類似has_many_booleans gem的東西,這意味着我向每個表添加一列(布爾值)並處理我的代碼中的數據。這看起來似乎是最不明顯的解決方案,但對我來說更加優雅,特別是在需要爲這些表添加更多布爾值時。

什麼是最好的方式來處理將出現跨多個表的布爾值?

回答

0

答案可能更多取決於您的整體概念。對於每一個真實/錯誤的數據,問問自己與模型的本質密切相關。每一位在模型實例中被引用的頻率或在搜索中使用的頻率。那些密切相關的可能屬於模型;那些不那麼明顯的可能會更好地分組在其他表格中。

示例:在現實世界中,公司是一類公司,並且共享許多Company屬性;這些屬性可以存儲在Company表中,可能是is_a_corporation標誌。

如果公司具有獨特屬性(如擁有公司的能力),則這些功能和屬性應位於Corporation模型中。

布爾值爲位:我不認爲在模型中有許多布爾屬性有什麼問題,但我同意在表中包含所有這些布爾列似乎不雅觀。我查看了has_many_booleans寶石,它確實爲提供了一些有趣的機會,它可以模擬按位操作,而來自嵌入式軟件世界的掩碼對我來說很有意義。

檢查的時候,我發現PostgreSQL的(我選擇的DB)提供位串數據類型,並提供你想要的一樣多的位實際位運算過多,只用一列的所有布爾人,這對我來說似乎非常酷。缺點是您必須配置列並在原生SQL中執行操作。

+0

我確實最終制作了一個單獨的「invoice_options」表,因爲我有大約12個將在多個表之間共享的布爾值,但不會經常使用,只是更有意義分離出來。 公司和公司的名稱很差(但在公司的術語中佔有一席之地,所以不能真正改變);他們更像公司和分支機構。公司只是組織公司的一種方式。 – d3vkit