0

我正在构建一个 Rails 应用程序,其中一个User可以有很多Addresses. AUser还需要一个主要帐单Address、主要运输Address和主要配置文件Address。这些主要字段可以指向相同的Address. AUser不能有多个 primary Address

我创建了一个名为 的连接表AddressInfo,我在几个选项之间来回切换:

  1. User在模型上创建与每个主 ID 对应的3 列Address(我认为这将消除对连接模型的需要)。
  2. 向 中添加一个primary布尔列AddressInfo,并确保在user_id,address_idpurpose( 目的是billing,shippingprofile) 范围内只有一个为真。
  3. 向 中添加primary日期时间列AddressInfo,并使用最近更新的地址作为主地址(范围与选项 2 类似)。

也许这些选项不是最好的,但这是我迄今为止想出的。

任何有关如何解决此问题的帮助将不胜感激。

更新:

需要明确的是,一旦Address创建了 an ,它就应该始终属于那个User并且不可删除。前任。aUser将他们的主要帐单地址更改为新的Address:他们应该仍然能够检索那个旧Address地址(甚至可能再次将其设为主要地址)。如果我选择选项 1 并删除连接表,这意味着我需要一个user_idon Address

4

3 回答 3

1

选择选项 1, 3 列。这将减少头痛(作为程序员),运行速度更快,并且更灵活地执行诸如将相似地址组合成一个之类的事情。也许您有 2 个人的地址相同,他们可以共享相同的记录(虽然不推荐)。

于 2013-09-19T21:31:18.287 回答
0

如果您使用的是 Rails,我会寻找一种 Rails 解决方案来“保持在 Rails 上”。

我会考虑 STI(单表继承) Rails
的更多信息:需要帮助定义地址表的关联

或多态关系 - http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

由于您希望 1 个用户拥有多个地址(而不是多个用户类型),因此 STI 可能最适合您。

注意:它们也可以组合,例如http://www.archonsystems.com/devblog/2011/12/20/rails-single-table-inheritance-with-polymorphic-association/

STI 有一个很好的例子来解决这个问题:http ://blog.arkency.com/2013/07/sti/

于 2013-09-19T21:33:34.380 回答
0

另一种可能性是创建另一个模型来保存 user.id、addressinfo.id 和 primary_for_address_type(包含“Shipping”、“Profile”、“Billing”)。

将其限制为在 user 和 primary_for_address_type 上是唯一的,并且您可以以完全可扩展的方式将 AddressInfo 中的地址标记为特定地址类型的主要地址,该方式仍能保证主要地址的唯一性。

您可以直接从此模型加入地址,但有可能使其与您的地址信息模型不同步。

于 2013-09-19T21:49:24.297 回答