ruby-on-rails - activerecord 关系,has_one 与现有表中的附加列

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

我有一个运行良好的客户模型。现在我有了一个新的要求。客户应该拥有一张驾驶执照。许可证的实现包括两件事 -

  1. 许可证应包含两张图片(客户将上传)
  2. 许可证应具有由管理员设置的状态(“已批准”、“待处理”、“已拒绝”等)

现在,我的疑问是 has_one 关系与客户表中的附加列。有两种实现方式

  1. 我创建了一个Licence具有属性的模型 - front_image , back_image , status并创建一个 has_one belongs_to许可与客户之间的关系。
  2. 我创建了附加列 licence_status , licence_front_image , licence_back_imageCustomer模型本身。

哪种方法更好?

最佳答案

在我看来,一对一关系相当容易理解,但很难看出何时使用一对一关系。

一个示例是一个应用程序,它可以选择让用户连接他们的 FacebookTwitter账户。

enter image description here

在这种情况下,对于特定用户,facebook_account_idtwitter_account_id可以是NULL ,这意味着用户尚未连接他们的 Twitter 和/或 Facebook 帐户。另外,facebook_accountstwitter_accounts表不引用 users根本没有 table 。

当然,您可以移动facebook_accounts中的所有字段。表直接进入user table 。 对于任何一对一关系都是如此,这就是为什么很难判断何时使用一对一关系。

我遵循的经验法则是:如果您有一个字段的逻辑分组,这些字段都可以选择 NULL , 最好将这些字段以一对一的关系拆分到一个单独的表中。

就您而言,它看起来像 License模型确实是字段的逻辑分组,可以选择 NULL 。因此,请采用方法 1 。另外,正如评论中提到的,如果将来您有机会扩展 License模型,使用 1 更有意义

关于ruby-on-rails - activerecord 关系,has_one 与现有表中的附加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30961601/

相关文章:

ruby-on-rails - Rails 中模型的错误复数化

php - 如何排除MySql中的某些记录

ruby-on-rails - 在 8000 万行表上索引 UUID

ruby-on-rails - Active Record 按最小值排序

ruby-on-rails - 覆盖 postgresql 数据库

ruby-on-rails - Ruby on Rails : What are Erubis' disadvantages and why isn't it packaged with Rails by default? 如何设置?

ruby-on-rails - rails : path of file

mysql - 人的年龄计算

c# - 以数据库为源的Master-Detail View 获取详细元素个数

ruby-on-rails - 如何在表单中编辑 Rails 序列化哈希?