在我的業務邏輯中,我有一個用戶,一個公司(用戶可以是公司的一員,作爲員工,我會稱他們爲「代理人」)和產品。設計一個數據庫來跟蹤店主
產品可以由用戶或公司擁有,公司可以稍後將其分配給用戶(代理商),但它仍然歸公司所有(以防公司觸發代理商)。
我的想法是讓用戶表,公司表和產品表和表來跟蹤誰是產品的所有者:
--------------
| users |
--------------
| user_id |
| name |
--------------
--------------
| products |
--------------
| product_id |
| title |
--------------
--------------
| company |
--------------
| company_id |
| name |
--------------
--------------
| agents |
--------------
| agent_id |
| user_id |
| company_id |
--------------
----------------
|product_owner |
----------------
| id |
| product_id |
| user_id |
| company_id |
|agent_assigned|
----------------
如果產品被用戶所擁有則只product_id和user_id將被填充。如果它由公司擁有,則product_id,company_id和agent_assigned將被填充。後來,我想拉一個產品,並知道誰是所有者:用戶信息或代理和公司信息。
這是最好的方法嗎?這對我來說並不好。
我們有一個聯繫人數據庫。每個聯繫人都必須屬於(至少)一個組織,但其中一些組織有點抽象 - 例如'項目x客戶羣'。因此,在您的情況下,即使某些組織在某種意義上是虛構的,每個產品都將歸組織所有。這個問題並沒有嚴格符合SO的要求,但無論如何,我還是把它提高了一點,因爲我喜歡它。 – Strawberry
無需在product_owner中存儲company_id - 此信息已保存在代理表中。另一種可能性是將owner_id始終存儲在同一個字段中,並添加另一個定義所有者類型的字段 – niyou
爲什麼不能:Owner_type,Owner_ID,slave_type,slave_ID。只是在那裏衝擊每一個可能的關係。這樣一切都可以以同樣的方式處理,您也可以將項目分配給多個所有者。 OT ='company',OI = company_id_2,ST ='product',SI = product_id_25 – Viridis