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