Rails 3用户数据库设计问题 - 单表继承还是?

时间:2011-04-18 15:25:31

标签: ruby-on-rails database design-patterns inheritance

我正在开发一个同行借贷应用程序,它有几种类型的用户(即借款人,贷方,赞助商等),它们具有不同的字段。而且,这些用户中的一些可以属于两件事(即,贷方也可以是赞助商)。那么,单表继承在这个实例中是个好主意吗?如果是这样,一个用户可以属于只有一个“类型”字段的两个组吗?如果STI不是要走的路,那么最好的方法是什么?毕竟,使用不同的表将需要将相同的信息保存到多个数据库,这似乎没有效率。

提前感谢您的帮助!!

2 个答案:

答案 0 :(得分:1)

我认为可以安全地假设每个用户的角色由租赁/交易的类型决定。也就是说,如果我们有一个交易D1和两个用户U1U2,那么这笔交易就会定义U1是赞助商还是借款人。

我建议将用户层次结构保留为STI并引入另一个类,例如DealUserRole (Deal, User, Role)

答案 1 :(得分:0)

您可以使用我一直在研究的宝石(CITIER) - http://peterhamilton.github.com/citier进行继承,仍在开发中,但目前运行正常。如果不同的类有很多独特的字段,那么比STI好多了。 STI会让他们留空。此外,MTI在以后的产品中更具可扩展性。我同意你还需要为用户介绍一个角色。但我认为使用它可以将它链接到父(User类),因此它将应用于用户的所有子类型。

class User < ActiveRecord::Base
   has_many :roles
end

class Role < ActiveRecord::Base
   acts_as_citier
   has_many :users
end

class Borrower < Role
   acts_as_citier
   #Other borrower stuff
end

class Lender < Role
   acts_as_citier
   #Other lender stuff
end