0

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

用户资料

用户名 VARCHAR

ID INT

键入枚举

电子邮件 VARCHAR

Date_created TIMESTAMP

Date_modified TIMESTAMP

通过 VARBINARY

名称 VARCHAR

证书 VARBINARY

Ranking_points INT

性别枚举

出生日期

Avatar_url VARCHAR


视频

标题 VARCHAR

ID INT

类别枚举

说明 TINYTEXT

Date_created TIMESTAMP

Tmp_name CHAR

文件名 VARCHAR

尺寸 MEDIUMINT

Subtitle_url VARCHAR

Liked_count INT

Shared_count INT

标签枚举


类别

类别 VARCHAR

ID INT

说明 TINYTEXT


最近浏览过的

用户 ID INT

Video_id INT

Viewed_date TIMESTAMP


好友列表

用户 ID INT

Friend_id INT


USER_QUESTIONS

用户 ID INT

Question_id INT

Question_title VARCHAR

Question_content LONGTEXT

Date_asked TIMESTAMP


VIDEO_COMMENTS 标题 VARCHAR

Video_id INT

评论内容长文本

User_id TINYTEXT

Date_created TIMESTAMP


USER_MESSAGES

用户 ID INT

Message_id INT

Message_content LONGTEXT

Sender_id INT

Date_created TIMESTAMP


在线考试/评估

id VARCHAR

输入枚举

考试网址 VARCHAR

描述 TINYTEXT

Date_created TIMESTAMP


EXAMS_TAKEN_BY_USER

考试ID INT

用户 ID INT

Exam_result SMALLINT

Date_taken TIMESTAMP

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

4

2 回答 2

0

整体结构似乎还可以,至少看起来很像我会做的事情。

1.-关于评论评论

我想最简单的设计是在其中添加一个parent_comment_id列。但这是一个棘手的问题,因为parent_comment_idvideo_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.-关于视频类别

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

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 回答