-1

私はPHP開発者であり、MySQLの基本知識は持っていますが、私は個人的なプロジェクトに取り組んでいます。3つのテーブル - カスケード関係を使用するか、追加機能を追加しますか?

請求の詳細は、ストライプオブジェクトを模倣して保存されます。しかし、カスケードでインデックスを使用するか、各テーブルでインデックスを使用すべきかどうかは疑問です。

(簡略化した)例を説明しましょう。ユーザーにはサブスクリプションがあります。各サブスクリプションで月に請求書が発行されます。 (一部が失敗した場合や、いくつかの。)それぞれの請求書が1つの電荷を発生させます

table_user 
- user_id 
- username 
- password 

table_subscription 
- sub_id 
- start_date 
- end_date 
- amount 
- user_id 

table_invoice 
- invoice_id 
- period_start 
- period_end 
- amount 
- paid 
- subscription_id 

table_charge 
- charge_id 
- amount 
- status 
- failure_code 
- failure_reason 
- invoice_id 

を私のポイントは、私はすぐに、各ユーザの課金や請求書を一覧表示したいということです。 1つの請求/請求書は1人のユーザーに属します。私はちょうどサブスクリプションで(料金と請求書がリンクされているので)uder_idキーを使用する必要がありますか、それでも、請求書テーブルと請求テーブルの両方にuser_idを追加する必要がありますか?

SELECTより簡単ですが、将来的に請求書に関連しない請求を行う(1回限りの余分なものを購入する)が、そのユーザーにリンクする場合もあります。

いくつかの提案をお待ちしております。

+0

これは設計上の決定です。私たちはすべての詳細や計画を知らないので、実際には答えられません。 – Shadow

答えて

1

単純な答えは、 'user_id'を各テーブルのキーとして使用することです。 MySQL Workbenchをお持ちの場合は、キーを使用してリンクすることもできます。 'user_id'がユーザのユニークな識別子である場合、それが使用されるすべてのテーブルに存在する必要があります。この方法では、「失われた」テーブルがなく、ユーザーを見つけるためのコードやトリガーが必要です。テーブルごとに1つの余分な列と努力の価値があります。 PHPはそれをユーザに参照する絶対的なポイントとして使用するので、バックグラウンドルーチンも使用できます。
また、支払いの問題がある場合に備えて、ユーザーのIDとIPアドレスを数年間保管し、アカウントを閉鎖します。

関連する問題