使用 Rails 2.1 和 Mysql。
我有一个公司模型
,其中有_很多公司
当然还有公司模型
,它属于公司
我需要在这两个表中添加相当多的 boolean 列,但这感觉真的不对。每个表都有相同的 boolean 值,我们将首先检查公司以查看其是否为真,然后是公司。所以,我可以看到这些选项:
将 boolean 值添加到每个表中。我想这是最简单的,但感觉真的很多余。
创建一个额外的表,名称类似于“boolean_options”,属于公司和企业。每个 boolean 值都添加到该表中,然后连接到适当的模型。
使用类似于 has_many_booleans gem 的东西,这意味着我向每个表添加一列( boolean 值)并在我的代码中处理数据。这似乎是最不明显的解决方案,但对我来说感觉更优雅,尤其是在需要向这些表添加更多 boolean 值时。
处理将出现在多个表中的 boolean 值的最佳方法是什么?
最佳答案
答案可能更多地取决于您的整体概念。对于每一个真/假数据,问问自己它与模型本质的联系有多紧密。每个位在模型实例中被引用或在搜索中使用的频率。那些紧密相连的可能属于模型;那些较少的可能更好地分组在其他表中。
示例:在现实世界中,公司是公司的一种类型,并且共享许多Company
属性;这些属性可以存储在 Company
表中,可能带有 is_a_corporation
标志。
如果公司具有独特的属性,例如拥有公司的能力,这些功能和属性应该在 Corporation
模型中。
作为位的 boolean 值:我不认为在一个模型中有很多 boolean 值属性有什么问题,但我同意在表中包含所有这些 boolean 值列似乎不雅。我查看了 has_many_booleans
gem,它确实为模拟位运算和掩码提供了一些有趣的机会,这些来自嵌入式软件的世界,对我来说很有意义.
四处查看,我发现 Postgresql(我选择的数据库)提供了 bitstring 数据类型,并提供了过多的实际按位运算你想要多少位,只使用一列来表示你的所有 boolean 值,这对我来说似乎非常酷。缺点是您必须配置列并在 native SQL 中执行操作。
关于mysql - 两个表上的许多 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7630475/