0

我在我的數據庫中有3個表格:users,payment_methodsuser_blocked_pmusers表本身不言而喻,payment_methods存儲公司使用的所有付款方式,而user_blocked_pm則爲特定用戶阻止了付款方式。改善MySQL中3個表之間的關係

+------------------+ 
|  users  | 
+-----+------------+ 
| id | user_name | 
+-----+------------+ 
| 1 |  John | 
| 2 |  Davis | 
+-----+------------+ 

+-----------------------+ 
| payment_methods | 
+-----+-----------------+ 
| id | payment_method | 
+-----+-----------------+ 
| 1 |  credit_card | 
| 2 |   cash | 
+-----+-----------------+ 

+-----------------------------------+ 
|   user_blocked_pm   | 
+-----+---------+-------------------+ 
| id | user_id | payment_method_id | 
+-----+---------+-------------------+ 
| 1 |  1 |     1 | 
| 2 |  1 |     2 | 
| 3 |  2 |     2 | 
+-----+---------+-------------------+ 

所以,按照上述的結構中,既payment_methods被阻塞的用戶John和cash被阻塞戴維斯。

按照此結構,當有多個用戶和付款方式時,我將在user_blocked_pm上有多個記錄,因爲每個用戶只能使用少數幾種付款方式。

有沒有更好的方法來處理usersuser_blocked_pm之間的這種關係,以便表格不會變得很大?

+1

請注意,ubpm中的ID是多餘的 – Strawberry

+0

因此,您可以在用戶級別添加一個字段,指示所有付款方式被阻止,或者您可以允許user_blocked_PM上的單個塊。並注意表格不應該很大。我希望大多數客戶和付款方式都不會被阻止 – xQbert

+0

@xQbert,這對於下午的一小部分工作正常,直到用戶決定根據付款期限創建其中的72個,並且該州的不同城市使blocked_pm在134k行周圍的表... – Rafael

回答

0
  • 因爲你打算USER_ID選擇或pm_id
  • 如果允許PM的數量小於數量不需要在user_blocked_pmID列不允許的,爲什麼不要做一個user_allowed_pm表而不是user_blocked_pm
  • 如果你有PM固定數量的每個用戶,那麼你並不需要一個表剛剛創建的每點一列,你把PM的關鍵(像一個外國人y)
+0

我會刪除user_blocked_pm中的id列,但這裏是東西,在這種特殊情況下,被阻止的pm數少於允許的pm數,並且不幸的是,不幸的是每個pm數用戶不固定... – Rafael

0

如果您有幾個用戶「類型」,那麼也許您可以將user_blocked_pm替換爲user_type_blocked_pm。 「類型」是一組阻止/允許的付款方式。所以user_type_blocked_pm表很小 - 有不同類型的用戶(只能用現金支付的用戶,可以用信用卡和現金支付的用戶等等)。然後,您可以在users表中添加一列以指示用戶類型。

0

你的方法很好,至今爲止提出的其他想法也很好。如果支付類型的數量很少(不超過7個,說 - 當然小於64!)和有限的,那麼你也可以考慮按位方法,其中1 = credit_card,2 =現金,3 =兩者。我這樣做一週中的幾天,這是不可能超過7.

+0

你顯然沒有看到我的Kickstarter爲Strawberrday遊說基金。我想它會在Dataday和Stackerday之間。 – philipxy

+0

@philipxy獲得我的投票! – Strawberry