コーチ、学生、レッスンの 3 つの基本的なエンティティ タイプを持つ PHP アプリを構築しています。コーチは学生向けのデジタル レッスンを作成します。MySQL と innoDB テーブルを使用しています。
要件
- コーチと生徒のログイン。
- コーチは、1 人の生徒に特化したデジタル レッスンを提供できます。
要件を考えると、どの DB スキーマを使用するのが最適かわかりません。次の 2 つのオプションがあります。
オプション 1
ユーザー (PK ID、user_type (コーチまたは生徒)、名、姓、電子メール、パスワードなど
) )、レッスン名など…)
長所:
- 1 つのユーザー テーブル
- 各ユーザーには一意の ID と電子メールがあります
- 単一のテーブルでログイン認証が簡単になります
短所:
- コーチまたは生徒の User.id がレッスン テーブルに FK として記録されている場合、user_type の検証は行われません。この問題は、コーチまたは学生の User.id を FK として記録する必要がある新しいテーブルで再発します。
- 潜在的なポリモーフィズムの問題と、トラックを正規化する必要性。
オプション 2
コーチ (PK id、名、姓、電子メール、パスワードなど)
生徒 (PK id、名、姓、電子メール、パスワードなど)
レッスン (PK id、FK コーチ ID (参照: コーチ. id)、FK Student_id (参照: Student.id)、lesson_name、lesson_text など…)
長所:
- 正規化された DB スキーマ。独立したコーチ、学生のエンティティ テーブル。
- ユーザー タイプの検証の問題はありません。Coach ID と Student ID の FK は、それぞれ個別に Coach.id と Student.id を指しています。
短所:
- コーチと生徒は同じ ID を持つことができます。(これは、C1001、S1001 などの ID プレフィックスを使用して解決できます)
- コーチと生徒は同じメールアドレスを持つことができます。
- ログイン認証には、1 つのログイン ページに対して 2 つの 2 つのテーブルを照会するか、2 つの異なるログイン ページと認証要求タイプを作成することが含まれます。
どれが一番いいのか本当に悩んでいます。これを行うより良い方法はありますか?