使用Rails 2.1和Mysql。
我有corporation model
,has_many companies
当然是company model
,belongs_to corporation
我需要在这两个表中添加相当多的布尔列,但这感觉非常错误。每张桌子都有相同的布尔值,我们先检查公司是否属实,然后是公司。所以,我能看到的选项是:
将布尔值添加到每个表中。我认为这是最简单的,但感觉真的多余。
创建一个名为“boolean_options”的额外表格,该表格属于公司和公司。每个布尔值都添加到此表中,然后连接到相应的模型。
使用has_many_booleans gem之类的东西,这意味着我在每个表中添加一列(布尔值)并处理代码中的数据。这似乎是最不明显的解决方案,但对我来说感觉更优雅,特别是在需要为这些表添加更多布尔值的时候。
处理多个表中出现的布尔值的最佳方法是什么?
答案 0 :(得分:0)
答案可能更多地取决于您的整体概念而不是其他任何东西。对于每个真/假的数据位,问问自己它与模型的本质有多紧密联系。每个位在模型实例中引用或在搜索中使用的频率。那些紧密相连的可能属于模型;较少的那些可以更好地分组在其他表中。
示例:在现实世界中,公司是一种公司,并且共享许多Company
属性;这些属性可以存储在Company
表中,可能带有is_a_corporation
标记。
如果公司具有独特的属性,例如拥有公司的能力,那么这些功能和属性应该在Corporation
模型中。
Booleans as Bits:我不认为在模型中有很多布尔属性有什么问题,但我同意在表格中包含所有这些布尔列似乎不太优雅。我查看了has_many_booleans
gem,它为模拟按位操作和掩码提供了一些有趣的机会,这些操作来自嵌入式软件世界,对我来说很有意义。
检查周围,我发现 Postgresql (我选择的数据库)提供了 bitstring 数据类型,并提供了大量的实际按位操作尽可能多的比特,只使用一列你的所有布尔值,这对我来说似乎非常酷。缺点是您必须配置列并在本机SQL中执行操作。