我有一个正常运行的客户模型。现在我有了新的要求。客户应该拥有一张驾驶执照。许可证的实施包括两件事 -
现在,我怀疑has_one关系与customers表中的其他列。有两种方法可以实现它
Licence
模型,其中包含属性 - front_image
,back_image
,status
,并在许可与客户之间建立has_one
belongs_to
关系licence_status
,licence_front_image
,licence_back_image
到Customer
模型本身。哪种方法更好?
答案 0 :(得分:1)
在我看来,一对一的关系相当容易理解,但很难看出何时使用它。
一个示例是一款可选择让用户连接其Facebook
和Twitter
帐户的应用。
在这种情况下,对于特定用户,facebook_account_id
和twitter_account_id
可以是NULL
,这意味着用户没有连接他们的Twitter和/或Facebook帐户。此外,facebook_accounts
和twitter_accounts
表格根本不会引用users
表格。
当然,您可以将facebook_accounts
表中的所有字段直接移到user
表中。
任何一对一的关系都是如此,这就是为什么很难看到何时使用它的原因。
我遵循的经验法则是:如果你有一个逻辑分组的字段,可以选择NULL
,
将这些字段以一对一的关系分成单独的表格是一个好主意。
在您的情况下,看起来License
模型确实是字段的逻辑分组,可以选择NULL
。因此,请使用方法1
。此外,正如评论中所提到的,如果将来您可能希望扩展License
模型,那么使用1