0

クイズ番組を作っています。クイズには多くの参加者がいますが、一方で参加者は(時間の経過とともに)多くのクイズに参加できます。したがって、リンクテーブルを使用して、この多対多の関係を克服しました。これまでのところ、私は理解できます..ここで私にとっての難しさ: 参加者は、グループまたは単一のプレーヤーのいずれかです。

したがって、クイズには参加者 (リンク テーブルを使用) があり、この参加者は複数の人がいるグループであるか、この参加者はプレーヤーであり、1 人だけです。

table Quiz : PrimaryKey = quiz_id, (name, date,... )
table QuizParticipant : PrimaryKey = quiz_participant_id, quiz_id 
table ParticipantGroup : PrimaryKey = quiz_participant_id, group_id
table participantPlayer : PrimaryKey = quiz_participant_id, person_id

私にとっての問題は、クイズのすべての参加者をquiz_idでクエリし、できればタイプ(グループまたはプレーヤー)でソートするにはどうすればよいですか?

このようなものをググる方法に関するヒントも役立ちます:)

4

3 に答える 3

0

これは興味深い設計上の決定です。進め方によって、アプリケーション全体が形作られます。

私のアドバイスは、参加が発生するたびに参加者のタイプを記録することです。これは「GROUP」または「PLAYER」のいずれかであり、ParticipantID が GroupID または PlayerID のどちらを参照しているかを定義します。これにより、最終的に最もクリーンなデータベース設計とアプリケーション ロジックが実現します。

したがって、テーブルは次のようになります。

Quiz (QuizID,QuizName) QuizParticipation (ParticipationID, ParticipantType, ParticipantID) Group (GroupID,GroupName) GroupMembers(GroupID,PlayerID) Player(PlayerID,Name)

QuizParticipation テーブルの ParticipantID と ParticipationType を組み合わせたフィールド内で重複が作成されないようにするためにカスタム制約を作成するか、主キーの生成を慎重に管理する必要がある場合があります。

于 2013-02-19T10:12:57.667 に答える
0

私の提案は、常にクイズをグループ (多対多) にリンクし、1 人のプレイヤーを 1 人のグループとして扱うことです。したがって、グループはプレイヤー (多対多) にリンクされます。

于 2013-02-18T23:33:33.400 に答える
0

人が多くのグループに属することができ、グループが多くの人を持つことができる場合、それは別の多対多の関係です。これらのリンク テーブルの作成方法を知っているので、この関係用に作成します。

于 2013-02-18T23:37:10.833 に答える