我计划在一个网站上为用户提供多个主题的培训视频,用户可以查看视频,查看他们的观看历史记录,评论视频,参加相关考试,如果他们在考试中取得成功,还可以获得徽章/证书。他们还可以在视频中遇到问题时提交实时问题。还有一个论坛,用户可以互相帮助,添加朋友,发送消息等。考虑到这个想法,我现在正在设计数据库,但我之前没有数据库设计经验,所以请查看以下内容设计并给我一些关于性能和最佳实践的建议。谢谢大家。
有
用户个人资料
用户名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表格的类别字段中添加一系列类别?
答案 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
在这种情况下,您可以拥有已存储的类别列表,用户只需选择他/她认为适合他/她视频的类别。
我不建议您在同一列上放置多个值,因为它确实是一个糟糕的设计问题。您无法向用户提供类别列表(如我之前提到的那个)。你也会有许多重复的值,拼写错误等。另外,在同一列中存储多个值会使编辑变得不必要:想想如何实现用户请求来删除类别标记并添加另一个。当然,这并不难,但如果你只需要删除个别参考文献,那就简单多了。