【问题标题】:MySQL database design of an online video education website某在线视频教育网站的MySQL数据库设计
【发布时间】:2013-01-18 06:29:17
【问题描述】:

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

用户资料

用户名 VARCHAR

ID INT

键入枚举

电子邮件 VARCHAR

创建日期的时间戳

Date_modified TIMESTAMP

通过 VARBINARY

名称 VARCHAR

证书 VARBINARY

Ranking_points INT

性别枚举

出生日期

头像_url VARCHAR


视频

标题 VARCHAR

ID INT

类别枚举

描述 TINYTEXT

创建日期的时间戳

Tmp_name CHAR

文件名 VARCHAR

中号尺寸

Subtitle_url VARCHAR

Liked_count INT

Shared_count INT

标签枚举


类别

类别 VARCHAR

ID INT

描述 TINYTEXT


最近浏览过

User_id INT

Video_id INT

查看日期时间戳


朋友名单

User_id INT

Friend_id INT


USER_QUESTIONS

User_id INT

Question_id INT

Question_title VARCHAR

Question_content LONGTEXT

询问日期的时间戳


VIDEO_COMMENTS 标题 VARCHAR

Video_id INT

评论内容长文本

User_id TINYTEXT

Date_created TIMESTAMP


USER_MESSAGES

User_id INT

Message_id INT

消息内容长文本

Sender_id INT

创建日期的时间戳


在线考试/评估

id VARCHAR

键入枚举

exam_url VARCHAR

描述 TINYTEXT

创建日期的时间戳


EXAMS_TAKEN_BY_USER

exam_id INT

User_id INT

Exam_result SMALLINT

拍摄日期时间戳

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

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    您可以为用户 cmets 使用自链接表。表格应该是这样的

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

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

    【讨论】:

    【解决方案2】:

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

    1.- 关于cmets上的cmets

    我想最简单的设计是添加一个 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 表(像以前一样干净,没有修改其结构)。先前评论的用户 cmets 可能不那么频繁,因此您将它们放在第二个结构中,而不是在同一个 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
    

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

    我不建议您将多个值放在同一列上,因为这确实是一个糟糕的设计问题。您无法为用户提供类别列表(就像我之前提到的那样)。您还会有许多重复的值、拼写错误等。此外,将多个值存储在同一列中会使编辑变得不必要的困难:想想您将如何实现用户请求以删除一个类别标签并添加另一个。当然,这并不难,但如果您只需要删除单个引用,它可能会简单得多。

    【讨论】:

    • 您提供的评论解决方案结构非常清晰,但我只是想知道是否允许 video_id 为空值会导致一些麻烦。我将首先选择自链接表解决方案。按照您的建议使用单独的 VIdeo_categories 表对我来说听起来很完美。感谢您指出将多个值放在同一列上的缺点。
    • 通常NULL值不会造成任何麻烦。自链接表替代方案更简单,应该可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    相关资源
    最近更新 更多