0

このクラブ会員システムは Java で作られています。私がすでに行ったことは、登録されたメンバーと管理者が保存されているアカウントと呼ばれる1つのテーブルを持つデータベースです。このテーブルのフィールドは、ユーザー名、名、姓、パスワード、date_join、役割などです...

私たちのプログラムがこれまでに行ったことは、人が登録した場合、管理者が彼を管理者として昇格させるまで自動的にメンバーになります。メンバーは、完全な権限を持つ管理者とは異なり、システム内の権限が制限されています。

私たちの教授は、私たちのプログラムを改訂し、私たちのクラブに参加したい人のために支払い要件を追加する必要があり、メンバーシップは一定の期間で期限切れになると言います。

クラブでの経験が不足しているため、その追加機能をどのように実装すればよいかわかりません。支払い用に別のテーブルを作成し、それをアカウント テーブルにリンクする必要があるのでしょうか。また、このプログラムでは、登録ユーザーが登録に成功する前に、最初に特定のクラブ料金を支払う必要がありますか? それとも、今すぐ登録して後で支払うことができますか? また、メンバーシップを更新しなかった場合、彼のアカウントが期限切れになると、彼はデータベースから削除されますか?

この種のシステムについてアイデアがあり、適切な実装を提案できる人はいますか? 前もって感謝します。

4

1 に答える 1

5

簡単なことから始めて、管理したいすべての名詞に名前を付けます。それらはあなたのテーブル名です。

次に、追跡する可能性のある各名詞に関連するすべての形容詞について考えます。形容詞のグループがカテゴリに当てはまる場合は、関連するテーブル内に列を作成します。形容詞が常にすべての可能な名詞に適用される場合は、無視してください。データベースは、時間の経過とともに変化するデータを追跡することを目的としています。定数は保存しないことをお勧めします。

次に、見逃せない形容詞を考えてみましょう。誕生日リマインダーのオプトアウトを許可している場合、おそらく人の生年月日が失われる可能性があります。おそらく、あなたのクラブは誕生日志向のクラブであり、名前がないことは大混乱に等しいでしょう。

次に、必要な形容詞を見てください。単独で、または組み合わせて、表のエントリを特定するものをいくつか見つけます。人によっては、個人が名前で識別される場合があります。つまり、同一でない名前はすべて別の個人にアクセスし、同一の名前はすべて同じ個人にアクセスします。2 人のジョン スミスに会ったことがある場合、または結婚のために名前を変更したことがある場合、名前の列だけでは身元を特定する理想的な方法ではないことがすぐにわかります。識別フィールドのコレクションは、主キーと呼ばれます。

次に、名詞がどのように関連しているかを考えます。メンバーシップが個人と同じでない場合は、2 つを結合する必要があります。テーブルを結合するための基本的な手法は 3 つあります。また、後で適用するのに最適な高度な手法もあります。

  1. 1 つの X (人) は 1 つの Y (メンバーシップ) にのみ関連付けることができます。その場合、X テーブルと Y テーブルは 1 つのテーブルにマージする候補になる可能性があります。これを 1 対 1 の関係と呼びます。

  2. 1 つの X (個人) が多数の Y (メンバーシップ) に関連付けられている場合、Y (メンバーシップ) テーブルには、関連付けられている X (個人) の主キーへの外部キー参照が含まれている必要があります。これを 1:N の関係と呼びます。

  3. 多くの X (個人) が 1 つの Y (メンバーシップ) に関連付けられている場合、X (個人) テーブルには、関連付けられている Y (メンバーシップ) の主キーへの外部キー参照が含まれている必要があります。これを N:1 関係と呼びます

  4. 多くの X (個人) は、多くの Y (メンバーシップ) に関連付けられています。つまり、個人は特定のメンバーシップを持っている、グループ メンバーシップの一部である、マルチ メンバーシップ パッケージを購入している、および / または 1 つのメンバーシップしか持っていない可能性があります。この場合、構築された「リレーションシップ」テーブルを使用してリレーションシップを管理する必要があります。このテーブルには、X と Y の各プライマリ キーへの 1 つずつ、2 つの外部キー参照が含まれています。リレーションシップ XY (PersonMembership) テーブルの主キー。

テーブルを結合する方法は他にもありますが、基本的には、結合するテーブルの数を増やす最後の手法の拡張です。

これにより、良いスタートを切ることができます。また、自分が行う選択が、他の人が行う選択と同じではないことがすぐにわかるでしょう。これが、標準データベース テーブル セットがほとんどない理由です。基本的なフレームワークを起動して実行すると、関連するデータの 2 つのセットを常に同時に引き出す可能性があり、(そこまで行くと) パフォーマンスのルールのいくつかを破ることを検討する可能性があることがわかります。 . 最初からルールを破ろうとしないでください。ルールを破るタイミングを知るには、ルールに従う必要があります。そうすれば、目的を達成する際に何を失うかを知ることができ、実際の使用で導入された落とし穴を回避することができます。

于 2012-12-05T15:42:36.030 に答える