我计划在一个网站上为用户提供多个科目的培训视频,用户可以查看视频,检查他们的查看历史,评论视频,参加相关考试,并获得徽章/证书,如果他们在考试中取得成功。当他们在视频中遇到问题时,他们也可以提交现场问题。此外,还将有一个论坛,用户可以互相帮助,添加朋友,发送信息等。考虑到这个想法,我现在正在设计数据库,但是我以前没有数据库设计的经验,所以请回顾下面的设计,并给我一些关于性能和最佳实践的建议。提前谢谢大家。
有
用户简介
用户名VARCHAR
ID INT
类型枚举
电子邮件VARCHAR
Date_created时间戳
日期\修改的时间戳
传递变量二进制
名称VARCHAR
证书变二进制
排名积分
ENUM性别
DOB日期
阿凡达
录像带
标题VARCHAR
ID INT
类别ENUM
说明TINYTEXT
Date_created时间戳
Tmp_名称字符
文件名VARCHAR
中等大小
字幕(u url VARCHAR)
你的计数是多少
Shared_countINT
标签ENUM
类别
类别VARCHAR
ID INT
说明TINYTEXT
最近看了
User_idINT
Video_idINT
查看日期时间戳
朋友名单
User_idINT
朋友号
用户问题
User_idINT
问题(i)
问题\标题VARCHAR
问题内容长文本
日期时间戳
视频注释标题VARCHAR
Video_idINT
评论内容长文本
User_idTINYTEXT
Date_created时间戳
用户信息
User_idINT
Message_idINT
信息内容长文本
Sender_idINT
Date_created时间戳
在线考试/评估
id VARCHAR
类型枚举
exam_urlVARCHAR
描述TINYTEXT
Date_created时间戳
用户参加的考试
考试id INT
User_idINT
Exam_resultSMALLINT
日期时间戳
我还有两个问题:1。我想允许用户评论,我将如何设计html" target="_blank">数据库结构?2.一个视频可以属于多个类别,是需要为视频类别创建一个新表,还是只需在视频表的类别字段中放置一系列类别?
整体结构似乎还不错,至少看起来很像我会做的事情。
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表(与以前一样干净,没有html" target="_blank">修改其结构)。用户对上一条评论的评论可能不太频繁,因此您可以将它们放在第二个结构中,而不是放在同一个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
在这种情况下,您可以有一个已经存储的类别列表,并且用户只需选择他/她认为对他/她的视频正确的那些。
我不建议您在同一列上放置多个值,因为这确实是一个糟糕的设计问题。您无法向用户提供类别列表(就像我之前提到的那样)。您还会有许多重复的值、错别字等。此外,将多个值存储在同一列中使得编辑变得不必要困难:想想您将如何实现删除类别标签并添加另一个类别标签的用户请求。当然,这并不难,但是如果你只需要删除单个引用,事情就会简单得多。
用户评论可以使用自链接表。桌子应该是这样的
Id ---- comments ---- parent_comment_Id
1 root comments null
2 child comments 1
3 grandchild comments 2
关于视频类别,最好有一个单独的表,特别是视频类别。然后,您可以在将来缩放类别信息,例如类别名称、描述等。考虑到用户体验,很常见的情况是,用户希望先查看类别列表,然后点击获取所有相关视频。
如何连接MySQL数据库中的某个表? 我曾经尝试过: 但这给了我一个错误:- 但是我已经创建了一个名为的表。是否有任何PHP代码连接到我的表在同一个数据库中,有多个数据库? 创建多个数据库是否足够明智 完整代码:
js怎么根据一个视频的在线url生成一个视频预览图? 相当于要获取该视频的第一秒或者第一帧的图片。
问题内容: 我正在寻找一个具有免费访问权限的公共SQL数据库,在其中可以对一些有意义的数据(而不是item1,item2,item3)免费运行一些查询。你有没有看到?如果它与一些教程一起提供,那就更好了。 供应商关系不大,只要可以使用通用JDBC客户端进行连接即可。 问题答案: 尝试SQL练习 从学习阶段开始
请大佬推荐一个学习数据库的实战教程 1.使用的现实世界做案例 2.用关系型数据库解决这个案例 3.用非关系型数据库解决这个案例 4.两种数据库的使用的对比。 我现在前端,后端都学完了,想要深入了解系统设计,希望大佬能推荐实战教程,书籍/帖子/视频,免费付费皆可,要的就是一个讲得好,讲的透彻,最好要中高级的,不需要入门的。
问题内容: 在大多数查询中,我的表现都非常差。我已经阅读了很多关于stackoverflow的内容,但是仍然有一些问题,也许有人可以帮忙或者给我任何提示吗? 基本上,我正在预订网站上,除其他表格外,还有以下表格: 对象 或在MySQL中: 预约 或在MySQL中: 有几个问题: 1-我没有设置任何其他键(主键除外)-我应该在哪里设置,我应该设置哪个键? 2-我已经了解了MyISAM与InnoD
问题内容: 我需要将数据从一个数据库迁移到另一个数据库,两者都在同一本地系统上。 表和列的名称不同,我不能从旧数据库迁移所有列,因此 对我不起作用。 但我只有一个 我的查询中有什么错误,我该如何解决? 提前致谢 问题答案: 您的查询应如下所示: 更新 由于这个答案的关注程度超出了我的预期,因此我应该扩展这个答案。首先,从答案本身看可能并不明显,但各列不必具有相同的名称。因此,以下操作也将起作用(假