0

複数の科目に関するトレーニング ビデオをユーザーに提供する Web サイトを計画しています。ユーザーは、ビデオを表示し、視聴履歴を確認し、ビデオにコメントし、相対的な試験を受け、試験に合格するとバッジ/証明書を取得できます。また、ビデオ中に問題が発生した場合は、ライブで質問を送信できます。また、ユーザーがお互いに助け合ったり、友達を追加したり、メッセージを送信したりできるフォーラムもあります。この考えを念頭に置いて、私は現在データベースを設計していますが、以前はデータベース設計の経験がなかったので、以下を確認してください。設計して、パフォーマンスとベスト プラクティスに関するいくつかの提案をしてください。よろしくお願いします。

がある

ユーザープロフィール

ユーザー名 VARCHAR

ID INT

列挙型

電子メール VARCHAR

Date_created TIMESTAMP

Date_modified TIMESTAMP

VARBINARY を渡す

名前 VARCHAR

証明書 VARBINARY

Ranking_points INT

性別ENUM

生年月日

Avatar_url VARCHAR


ビデオ

タイトル VARCHAR

ID INT

カテゴリ ENUM

説明 TINYTEXT

Date_created TIMESTAMP

Tmp_name CHAR

ファイル名 VARCHAR

サイズ ミディアムミント

Subtitle_url VARCHAR

Liked_count INT

Shared_count INT

タグ ENUM


カテゴリー

カテゴリ VARCHAR

ID INT

説明 TINYTEXT


最近見たもの

ユーザー ID INT

Video_id INT

Viewed_date TIMESTAMP


友達リスト

ユーザー ID INT

フレンド ID INT


USER_QUESTIONS

ユーザー ID INT

Question_id INT

Question_title VARCHAR

Question_content ロングテキスト

Date_asked TIMESTAMP


VIDEO_COMMENTS タイトル VARCHAR

Video_id INT

Comment_content LONGTEXT

ユーザー ID TINYTEXT

Date_created TIMESTAMP


USER_MESSAGES

ユーザー ID INT

Message_id INT

Message_content LONGTEXT

Sender_id INT

Date_created TIMESTAMP


オンライン試験/評価

id VARCHAR

列挙型

Exam_url VARCHAR

説明 TINYTEXT

Date_created TIMESTAMP


EXAMS_TAKEN_BY_USER

試験 ID INT

ユーザー ID INT

Exam_result SMALLINT

Date_taken TIMESTAMP

さらに 2 つの質問があります。1. ユーザー コメントにコメントを許可したいのですが、データベース構造をどのように設計すればよいですか? 2. 1 つのビデオは複数のカテゴリに属する​​ことができます。ビデオ カテゴリ用の新しいテーブルを作成する必要がありますか、それとも VIDEO テーブルのカテゴリ フィールドに一連のカテゴリを配置する必要がありますか?

4

2 に答える 2

0

全体的な構造は問題ないように見えますが、少なくともそれは私がやろうとしていることとほとんど同じです。

1.-コメントへのコメントについて:

最も単純な設計は、parent_comment_id列を追加することだと思います。しかし、parent_comment_idまたはvideo_idのいずれかに多くの NULL 値があるため、これは注意が必要です。したがって、これを回避する別の方法は、 VIDEO_COMMENT の video_id に NULL 値を許可することです。このシナリオでは、この列に NULL が見つかった場合、ユーザー コメントへの返信があることがわかります。次に、2 番目のテーブルで親コメントを見つける必要があります。

USER_COMMENT
user_comment_id (primary key)
video_comment_id (foreign key to VIDEO_COMMENT)
comment (text)
created_date (date)

これは間違いなく最高の解決策ではありませんが、パフォーマンスの問題に悩まされている場合は、試してみる価値があるかもしれません. まだ同じ VIDEO_COMMENTS テーブルがあります (以前と同じようにきれいで、構造に変更はありません)。前のコメントに対するユーザーのコメントはそれほど頻繁ではない可能性があるため、同じ VIDEO_COMMENTS テーブル全体ではなく、2 番目の構造にそれらを配置します。

2.-動画カテゴリについて

ここでは、2 つの追加テーブルを作成します。1 つはビデオ カテゴリ (またはタグ) 用で、もう 1 つは各ビデオをそのカテゴリにリンクするためのものです。

VIDEOS

Here I would drop the CATEGORY column


CATEGORIES

category_id (primary key)
title

VIDEO_CATEGORIES

video_category_id
category_id
video_id

この場合、カテゴリのリストを既に保存しておくことができ、ユーザーは自分のビデオに適していると思うカテゴリを選択するだけで済みます。

複数の値を同じ列に配置することは、実際には設計上の問題であるため、お勧めしません。ユーザーにカテゴリのリストを提供できませんでした (前に述べたような)。また、多くの値の重複、タイプミスなどがあります。また、同じ列に複数の値が格納されていると、編集が不要になり、編集が難しくなります。カテゴリ タグを削除して別のタグを追加するユーザー リクエストをどのように実装するかを考えてみてください。もちろん、それほど難しいことではありませんが、個々の参照を削除するだけでよい場合は、はるかに簡単になる可能性があります。

于 2013-02-03T11:48:15.793 に答える
0

ユーザーのコメントに自己リンク テーブルを使用できます。テーブルは次のようになります

Id ---- comments ---- parent_comment_Id
1    root comments         null
2    child comments         1
3    grandchild comments    2 

ビデオのカテゴリについては、特にビデオのカテゴリ用に別の表を用意するとよいでしょう。そして、将来、カテゴリ名、説明などのカテゴリ情報をスケーリングできます。ユーザー エクスペリエンスを考慮すると、ユーザーが最初にカテゴリ リストを確認してから、クリックしてすべての関連動画を取得したいというケースは非常に一般的です。

于 2013-02-03T11:17:14.850 に答える