MySQL数据库设计的在线视频教育网站

时间:2013-02-03 11:06:32

标签: mysql database

我计划在一个网站上为用户提供多个主题的培训视频,用户可以查看视频,查看他们的观看历史记录,评论视频,参加相关考试,如果他们在考试中取得成功,还可以获得徽章/证书。他们还可以在视频中遇到问题时提交实时问题。还有一个论坛,用户可以互相帮助,添加朋友,发送消息等。考虑到这个想法,我现在正在设计数据库,但我之前没有数据库设计经验,所以请查看以下内容设计并给我一些关于性能和最佳实践的建议。谢谢大家。

用户个人资料

用户名VARCHAR

id INT

输入ENUM

电子邮件VARCHAR

Date_created TIMESTAMP

Date_modified TIMESTAMP

传递VARBINARY

名称VARCHAR

证书VARBINARY

Ranking_points INT

性别ENUM

DOB DATE

Avatar_url VARCHAR


视频

标题VARCHAR

id INT

类别ENUM

说明TINYTEXT

Date_created TIMESTAMP

Tmp_name CHAR

File_name VARCHAR

尺寸MEDIUMINT

Subtitle_url VARCHAR

Liked_count INT

Shared_count INT

标签ENUM


CATEGORY

类别VARCHAR

id INT

说明TINYTEXT


RecentlyViewed

User_id INT

Video_id INT

Viewed_date TIMESTAMP


FRIEND_LIST

User_id INT

Friend_id INT


USER_QUESTIONS

User_id INT

Question_id INT

Question_title VARCHAR

Question_content LONGTEXT

Date_asked TIMESTAMP


VIDEO_COMMENTS 标题VARCHAR

Video_id INT

Comment_content LONGTEXT

User_id TINYTEXT

Date_created TIMESTAMP


USER_MESSAGES

User_id INT

Message_id INT

Message_content LONGTEXT

Sender_id INT

Date_created TIMESTAMP


在线考试/评估

id VARCHAR

输入ENUM

exam_url VARCHAR

描述TINYTEXT

Date_created TIMESTAMP


EXAMS_TAKEN_BY_USER

exam_id INT

User_id INT

Exam_result SMALLINT

Date_taken TIMESTAMP

我还有两个问题: 1.我想允许对用户评论发表评论,我将如何设计数据库结构? 2.一个视频可以属于多个类别,是否需要为视频类别创建新表格,或者只是在VIDEO表格的类别字段中添加一系列类别?

2 个答案:

答案 0 :(得分:0)

您可以使用自我链接表进行用户评论。该表看起来像这样

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

关于视频类别,最好有一个单独的表格,特别是视频类别。然后,您可以在将来扩展类别信息,如类别名称,描述等。考虑到用户体验,用户希望首先检查类别列表然后单击以获取所有相关视频是很常见的情况。

答案 1 :(得分:0)

整体结构似乎没问题,至少看起来非常像我会做的事情。

1.- 关于评论的评论

我想最简单的设计是添加 parent_comment_id 列。但这是一个棘手的问题,因为 parent_comment_id video_id 会有很多NULL值。因此,另一种方法是在 VIDEO_COMMENT 上允许 video_id 的NULL值。在这种情况下,如果找到此列中的NULL,您将知道您存在对用户注释的回复。然后,您必须在第二个表上找到父评论:

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.- 关于视频类别

在这里,我将创建另外两个表:一个用于视频类别(或标签),另一个用于将每个视频链接到其类别。

VIDEOS

Here I would drop the CATEGORY column


CATEGORIES

category_id (primary key)
title

VIDEO_CATEGORIES

video_category_id
category_id
video_id

在这种情况下,您可以拥有已存储的类别列表,用户只需选择他/她认为适合他/她视频的类别。

我不建议您在同一列上放置多个值,因为它确实是一个糟糕的设计问题。您无法向用户提供类别列表(如我之前提到的那个)。你也会有许多重复的值,拼写错误等。另外,在同一列中存储多个值会使编辑变得不必要:想想如何实现用户请求来删除类别标记并添加另一个。当然,这并不难,但如果你只需要删除个别参考文献,那就简单多了。