0

私のデータベースにはテーブルが3つあります:userspayment_methodsuser_blocked_pmです。 usersテーブル自体は話していますが、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はジョンとcashはデイビスのためにブロックされているユーザーのためにブロックされています。

複数のユーザーと支払い方法がある場合、私はuser_blocked_pmに複数のレコードを持ちますが、各ユーザーはいくつかの支払い方法しか使用できないためです。

テーブルが巨大にならないように、usersuser_blocked_pmの間のこの関係を改善する方法はありますか?なぜ許さ午後の数が、許可されていない多くの少ないしている場合は、user_idの上で選択するために行くか、

  • をpm_idので、あなたがuser_blocked_pmテーブルでID列を必要としない

  • +1

    ubpmのidは冗長であることに注意してください。 – Strawberry

    +0

    ユーザレベルで、すべての支払い方法がブロックされていることを示すフィールドを追加することができます。そうすることができます。 user_blocked_PMで個々のブロックを許可する。テーブルが巨大であってはならないことに注意してください。私はほとんどの顧客と支払い方法がブロックされていないことを願っています – xQbert

    +0

    @xQbert、これは午後の少数でうまくいきました。支払い期限に基づいて約72件を作成し、州ごとにblocked_pmテーブルの周りに134k行... – Rafael

    答えて

    0
    • あなたは各ユーザーの午後の固定数を持っているなら、あなたはちょうどあなたがすべての午後のために列を作成するテーブルを必要としない、あなたは午後の鍵を置く代わりに、user_blocked_pm
    • user_allowed_pmテーブルを作成しません(外国人のようなy)
    +0

    私はuser_blocked_pmのid列を削除しますが、ここでは、この特定のケースでは、ブロックされたpmの数は許可されたpm未満であり、残念ながらそれぞれのpmの数ユーザーは固定されていません... – Rafael

    0

    ユーザータイプが少数の場合は、user_blocked_pmuser_type_blocked_pmに置き換えることができます。 「タイプ」は、ブロックされた/許可された支払い方法のセットです。したがって、user_type_blocked_pmテーブルは小さく、さまざまなタイプのエントリがあります(現金のみでお支払いいただけるユーザー、クレジットや現金でお支払い可能なユーザーなど)。次に、usersテーブルに列を追加してユーザーを示すことができますタイプ。

    0

    あなたの方法は問題ありません。これまで提案されている他のアイデアも問題ありません。支払いタイプの数が少ない(7以下、そして確かに64未満)と有限である場合、1 = credit_card、2 =現金、3 =両方のビット方式を検討することもできます。

    +0

    Strawberrdayの資金をロビーに掛けるために私のKickstarterを見たことはありません。私はそれがDatadayとStackerdayの間に行くと思っています。 – philipxy

    +0

    @philipxyが私の投票を得ます! – Strawberry

    関連する問題