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