2015-06-21 30 views
0

我有一個工作正常的客戶模型。現在我得到了一個新的要求。客戶應該有一個駕駛執照。許可在實施由兩件事情 -activerecord關係,has_one vs現有表中的其他列

  1. 許可應該有兩個圖像(其客戶將上傳)
  2. 許可應該有一個狀態(「批准」,「待定」,「拒絕」等由管理員設置)

現在,我懷疑與客戶表中的其他列has_one關係。有實現它

  1. 我創建了一個Licence模型屬性的兩種方式 - front_imageback_imagestatus創造許可和客戶之間的has_onebelongs_to關係。
  2. 我創建了附加列licence_status,licence_front_image,licence_back_imageCustomer模型本身。

哪種方法更好?

+0

如果將來有機會,將許多列添加到許可證模型,然後去** 1 **,否則** 2 **是好去.. –

+0

根據我'1'是更好的許可證是不同的實體,可能需要更多的列在未來。更好地在許可證表中使用'customer_id'將許可證創建爲不同的模型.. –

回答

1

在我看來,一對一的關係相當容易理解,但很難看出何時使用它。

一個例子是一個應用程序,可以讓用戶連接他們的FacebookTwitter帳戶。

enter image description here

在這種情況下,對於特定的用戶,則facebook_account_idtwitter_account_id可以NULL,這將意味着用戶沒有連接他們的Twitter和/或Facebook賬戶。此外,facebook_accountstwitter_accounts表完全不參考users表。

當然,您可以將facebook_accounts表中的所有字段直接移動到user表中。 任何一對一關係都是如此,這就是爲什麼很難看到何時使用它的原因。

我遵循的經驗法則是:如果您有一個邏輯分組的字段,它們都可以選擇爲NULL, ,那麼將這些字段拆分爲一對一關係中的一個單獨的表是一個好主意。

在你的情況,它看起來像License模型確實是一個邏輯分組字段,可以選擇是NULL。因此,請與方法1。另外,正如評論中提到的,如果未來可能會擴大License模型,那麼使用1