web-dev-qa-db-ja.com

基本設計、初回データベース設計に関するアドバイス

私はJava開発者になるためのコースを取っています。

コースにはデータベースの使用が含まれますが、残念ながら実際に設計することはありません。

ほとんどの場合、事前に作成されたデータベースを取得し、データを挿入、更新、読み取り、または削除するためのコードを実装する必要があります。

しかし、私の最終テストが来るとき、私はデータベースを含む何かを作ることになる可能性があるので、良いデータベース設計が多くの違いをもたらすときに気づいたので、設計のこつを得るためにいくつかの小さいものを設計してみたいと思いますそれを扱うコードを書く。

これらの種類の質問がここで許可されていて、広すぎないことを願っています。


これは私がclubsmembersaddressesphonenumbersで単純なものにした小さなデザインです。

  • 複数のクラブがあります。
  • 各クラブには複数のメンバーがいます(自明)
  • 会員は複数のクラブに所属することはできません
  • メンバーは複数の電話番号とメールアドレスを持つことができます
  • メンバーは1つのアドレスしか持てません
  • アドレスは異なるメンバー(カップルまたは兄弟)に属することができます

私の最大の混乱:

  • Clubに、メンバーになるメンバーを表す列を追加したい場合、同じメンバーを2回リストしない場合の最善の方法は何ですか?

  • すべてのテーブルをIDの自動インクリメントに配置する必要がありますか、それとも悪い考えですか? (メリット/デメリット?)

  • [外部キー]タブで外部キーを追加すると、これらは自動的に正しいテーブルに対応しますか、それとも列に追加する必要がありますか? (写真2を参照)

  • そして、おそらく恐らく一番の質問です... phonenumberemailの外部キーをperson_Idにリンクするそれぞれのテーブルに入れますか、それともpersonテーブルにphoneNumberとメールIDを入れるべきですか?

(写真の言語が英語ではないことをお詫びします。これがあまり問題にならないことを願っています)

Design

Foreign keys

8
Vahx
  1. 所有者が常に彼のクラブのメンバーである場合。 ownerIdをClubテーブルに追加し、所有者であるメンバーのpersonIdをそこに入れます。
  2. Idの自動インクリメントは適切です。あなたは別のフィールド「コード」を追加することができます、そこであなたはそこにクラブカードに会員コードを置きます。
  3. 自動的に問題ないはずです(私は思う)
  4. PersonIdを電話番号と電子メールテーブルに入れます。

...複数のクラブの会員になることはできませんか?可能であれば、clubIdとpersonIdを使用してClubMemberテーブルを作成します。このようにして、人を複数のクラブに接続できます。

2
aldwinaldwin