什么时候将数据放在多个表中?何时将它们保存在同一个表中?例如,在一个单独的表中放置一个系统管理员(除了管理员权限的附加布尔除外)与另一个用户类型完全相同的字段有什么优点和缺点?
在我的具体案例中:当我开始开发我的应用程序时,我创建了两个用户表,因为这两种用户类型之间存在差异。这些差异是:1)一个用户类型与第三个表有关系,而另一个用户类型没有; 2)第一个用户类型有权对第三个模型进行更改,而第二个用户类型没有; 3)两种用户类型的字段/变量的差异。
集成的原因:但是,现在我的应用程序已朝着两个用户类型之间的字段基本相同的方向发展。此外,可能需要将第一类型的用户转换为其他用户类型,反之亦然。如果它们在同一个表中,转换用户类型会更容易,只需要一个指示用户类型的布尔值。
不集成的原因:另一方面,前面提到的两个差异仍然适用,我想知道将两个用户类型保存在两个单独的表中是否没有安全性好处。同样重要的是,我是一名新手程序员并将这两个表集成到一个表中对我来说是一项非常困难的工作,因为围绕这两个表开发了所有功能。
总而言之,将两个表集成到一个表中有多大必要?或者更一般地说,你认为什么是将事物放在单独的表中时的经验法则?有一个权衡,但这些问题有多重要,特别是有两个单独的表有多少安全效益和速度效益? 我认为我理解权衡的主题但不重要,因此很难决定去哪个方向。表继承不是我的情况:选择会是有两个单独的表或只有一个表,我有一个用户类型的变量。
答案 0 :(得分:1)
通常,如果对象共享很多功能(管理员和用户共享),它们应该在同一个表中/同一模型的一部分。
你有几个选择可以解决这个问题 -
使用单表继承(STI)。 User.rb将包含一个名为:type的字段,仅用于STI。对于任何管理员用户,请设置类型:'Admin'。创建一个admin.rb文件,并覆盖管理员与用户不同的任何方法。
另一个选项是标记admin。创建一个像is_admin这样的字段?这为管理员提供了额外的功能。