【问题标题】:What's the best way to model these database associations?对这些数据库关联建模的最佳方法是什么?
【发布时间】:2011-07-27 04:11:23
【问题描述】:

所以我有以下型号:

  • 用户
  • 商务
  • 优惠券
  • 特惠
  • 可兑换
  • 所有者

我正在使用所有者模型将各种其他模型(例如商业优惠券交易和可兑换)关联到用户模型。

使用可兑换模型是因为我想为使用优惠券/交易的每个用户生成一个唯一代码,以限制每个用户使用一个以及总金额。

我想也许我不需要两种用于优惠券和交易的模型,我只需要一个,因为交易更像是一种特殊类型的优惠券。

以下是修改后的模型:

Business
   has_many :owners, :as => :ownable, :dependent => :destroy
   has_many :coupons, :dependent => :destroy

Coupon
   belongs_to :business
   has_many :redeems
   # also has a special column for denoting weather it's a 
   # normal coupon or a daily deal kind of coupon

Redeem
   belongs_to :coupon
   has_one :owner, :as => :ownable, :dependent => :destroy

Owner
   belongs_to :user
   belongs_to :ownable, :polymorphic => true

对于用户模型,我完全迷失了 但这就是我想要的伪代码 仅针对所有可能遇到相同问题的人进行编辑,这是我设置用户模型的方式

User
   has_many :owners
   has_many :businesses, :through => :owners, 
              :source => business, :source_type => 'Business'
   has_many :redeems, :through => :owners, :source=> :redeem, 
              :source_type => 'Redeem'

   has_many :coupons, :through => :redeems, 
              :source => :coupon, :source_type => 'Coupon'

我只是不明白如何将优惠券与用户模型相关联,因为我为拥有东西做了多态关联。

【问题讨论】:

  • 考虑到可赎回是一个形容词,这会将其作为对象的属性或表格的列。作为动词(赎回),它将由关联表示。你把它作为一个实体(对象),所以这里有些东西是关闭的。或许您可以描述您尝试建模的过程?

标签: ruby-on-rails ruby-on-rails-3 database-design activerecord


【解决方案1】:

我会说优惠券本质上是一份合同、一份证书、一个交易实例。当一个人购买优惠券时,他们实际上购买了一份法律合同,某些企业将根据合同(交易)中描述的承诺产品或服务交付该合同。因此,考虑到这一点,这里尝试对此进行建模。

【讨论】:

  • 哇,非常感谢你用什么来创建这个图表?无论如何,我认为我对一切的意义的解释并不准确,对不起。优惠和优惠券旨在提供不同种类的特别优惠。交易更像是优惠券的一个实例,而不是反之亦然。一笔交易有一个到期日,必须在那时赎回,但一个人只能在有限的时间内接受并支付这笔交易。因此,交易基本上就像每日交易。而优惠券可能要打印几个月。我会将此添加到主要问题中。
  • 也从你建模它的方式来看,我想我不应该做一个多态关联来查看某个模型的所有者是谁?
  • @Tyler Rice;对于大多数 ORM,这可以使用简单的 table per class 映射来完成。
  • @Demir Sudarevic 我想我明白了,感谢所有帮助我将更新我的帖子,说明我如何设置并接受你的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 2016-02-12
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多