activerecord 关系,has_one 与现有 table 中的附加列
activerecord relationship, has_one vs additional column in existing table
我有一个工作正常的 Customer 模型。现在我有一个新的要求。客户应该有一个驾驶执照。许可证的实施包括两件事 -
- 许可证应包含两张图片(客户将上传)
- 许可证应具有状态('approved'、'pending'、'rejected' 等由管理员设置)
现在,我的疑问是 has_one 关系与客户 table 中的其他列。有两种实现方式
- 我创建了一个
Licence
具有属性的模型 - front_image
、back_image
、status
并在 License 之间创建了 has_one
belongs_to
关系和客户。
- 我创建了额外的列,
licence_status
、licence_front_image
、licence_back_image
到 Customer
模型本身。
哪种方法更好?
在我看来,一对一关系很容易理解,但很难看出何时使用一对一关系。
一个例子是一个应用程序,它可以选择让用户连接他们的 Facebook
和 Twitter
帐户。
在这种情况下,对于特定用户,facebook_account_id
和 twitter_account_id
可以是 NULL
,这意味着该用户尚未连接他们的 Twitter and/or Facebook 帐户。此外,facebook_accounts
和 twitter_accounts
table 根本不引用 users
table。
当然,您可以将facebook_accounts
table中的所有字段直接移动到user
table中。
任何一对一关系都是如此,这就是为什么很难看出何时使用一对一的原因。
我遵循的经验法则是:如果你有一个逻辑分组的字段,这些字段都可以是 NULL
,
以一对一的关系将这些字段拆分为单独的 table 是个好主意。
在您的情况下,License
模型看起来确实是一个逻辑字段分组,可以选择 NULL
。因此,采用 1
方法。此外,如评论中所述,如果将来您有机会扩展 License
模型,那么使用 1
[=27= 会更有意义]
我有一个工作正常的 Customer 模型。现在我有一个新的要求。客户应该有一个驾驶执照。许可证的实施包括两件事 -
- 许可证应包含两张图片(客户将上传)
- 许可证应具有状态('approved'、'pending'、'rejected' 等由管理员设置)
现在,我的疑问是 has_one 关系与客户 table 中的其他列。有两种实现方式
- 我创建了一个
Licence
具有属性的模型 -front_image
、back_image
、status
并在 License 之间创建了has_one
belongs_to
关系和客户。 - 我创建了额外的列,
licence_status
、licence_front_image
、licence_back_image
到Customer
模型本身。
哪种方法更好?
在我看来,一对一关系很容易理解,但很难看出何时使用一对一关系。
一个例子是一个应用程序,它可以选择让用户连接他们的 Facebook
和 Twitter
帐户。
在这种情况下,对于特定用户,facebook_account_id
和 twitter_account_id
可以是 NULL
,这意味着该用户尚未连接他们的 Twitter and/or Facebook 帐户。此外,facebook_accounts
和 twitter_accounts
table 根本不引用 users
table。
当然,您可以将facebook_accounts
table中的所有字段直接移动到user
table中。
任何一对一关系都是如此,这就是为什么很难看出何时使用一对一的原因。
我遵循的经验法则是:如果你有一个逻辑分组的字段,这些字段都可以是 NULL
,
以一对一的关系将这些字段拆分为单独的 table 是个好主意。
在您的情况下,License
模型看起来确实是一个逻辑字段分组,可以选择 NULL
。因此,采用 1
方法。此外,如评论中所述,如果将来您有机会扩展 License
模型,那么使用 1
[=27= 会更有意义]