Php 高效的mysql数据库结构建议
我正在开发一个网站,它将是一个基于订阅的服务,根据用户注册的内容为用户提供多个课程(视频) 目前我正在考虑以下db结构Php 高效的mysql数据库结构建议,php,mysql,Php,Mysql,我正在开发一个网站,它将是一个基于订阅的服务,根据用户注册的内容为用户提供多个课程(视频) 目前我正在考虑以下db结构 Users ------ email | pwd | subscription_date | expiration_date 唯一的密钥是“电子邮件” 提供的课程数量可能从大约15门开始,并逐渐增加加班时间。此外,课程订阅的布尔值为TRUE/FALSE 然后,每个课程的表格如下所示: Calculus_1 ---------- id | title | descriptio
Users
------
email | pwd | subscription_date | expiration_date
唯一的密钥是“电子邮件”
提供的课程数量可能从大约15门开始,并逐渐增加加班时间。此外,课程订阅的布尔值为TRUE/FALSE
然后,每个课程的表格如下所示:
Calculus_1
----------
id | title | description | video_url |
一门课程可能有20多个章节
关于认证过程的一点信息-将转到userlogin->课程订阅---->课程章节。将根据电子邮件地址验证用户登录和课程订阅。在播放视频之前,还将对照订阅表检查视频
我的问题是:
$sqlSubscription = "SELECT * FROM course_subscription WHERE `user` = $user && `calculus_1` = TRUE";
$subscriptionResult = mysql_query($sql) or mysql_die($sqlSubscription);
while ($row = mysql_fetch_assoc($subscriptionResult))
{
$user=$row["email"];
$calculus_1 =$row["calculus_1"];
if($user==1 && calculus_1==TRUE)
{
$sql = "SELECT * FROM calculus_1 ORDER BY `id`";
$result = mysql_query($sql) or mysql_die($sql);
if (mysql_num_rows($result) > 0)
{
$data = array();
while ($row = mysql_fetch_assoc($result))
{
$data[] = $rows;
echo "HTML THAT WILL CREATE A LIST BASED ON TABLE INFO"
}
}
}
}
以上代码用于菜单,该菜单将根据订阅内容填充章节列表。我知道代码并不完美,我仍在努力——但我想先确定数据库的结构,因为我已经对如何访问信息有了相当不错的想法。一个需要通过添加新列和表来更改数据模型的设计,仅仅是为了添加新数据,比如课程,不是一个好的设计。您应该有一个包含课程的表和一个用于订阅的表 而且,电子邮件不是一个很好的主键选择。主键永远不应更改,但用户可能希望更改其电子邮件地址。因此,通常使用自动递增编号作为主键 考虑这些建议的模式如下所示:
students courses subscriptions
--------------- ----------- -------------
student_id course_id subscription_id
email name student_id (foreign key to students table)
name description course_id (foreign key to courses table)
subscription date video_url
您可能需要根据您的具体要求进行调整。例如,订阅到期日:如果到期日仅取决于学生,而不取决于课程,则可以像现在一样将其放在
学生
表中。但是,如果学生可以在不同的日期订阅不同的课程,并且您希望每个订阅都有不同的到期日,那么应该将其放在订阅表中。这种设计需要通过添加新列和表来更改数据模型,只需添加新数据,如课程,这不是一个好的设计。您应该有一个包含课程的表和一个用于订阅的表
而且,电子邮件不是一个很好的主键选择。主键永远不应更改,但用户可能希望更改其电子邮件地址。因此,通常使用自动递增编号作为主键
考虑这些建议的模式如下所示:
students courses subscriptions
--------------- ----------- -------------
student_id course_id subscription_id
email name student_id (foreign key to students table)
name description course_id (foreign key to courses table)
subscription date video_url
您可能需要根据您的具体要求进行调整。例如,订阅到期日:如果到期日仅取决于学生,而不取决于课程,则可以像现在一样将其放在学生
表中。但是,如果一个学生可以在不同的日期订阅不同的课程,并且您希望每个订阅都有不同的到期日,那么应该将其放在订阅表中。随着时间的推移,您的设计将很难维护。您的建议意味着,每一门新课程都会向您的课程订阅
表中添加一列,并向数据库中添加一个新表
我想要一个结构,其中有一个用户
表,一个课程
表,描述各个课程(包括视频url等),还有一个用户课程订阅
表,它基本上由一个用户id
和一个课程id
组成,以及开始日期
和结束日期
这消除了对每门课程只有一列的要求,同时仍然允许您将学生添加到多个课程中。这是一个相当标准的“”关系的示例,其中连接表(在本例中为用户\课程\订阅
)只是添加了其他两个实体之间的链接。随着时间的推移,您的设计将很难维护。您的建议意味着,每一门新课程都会向您的课程订阅
表中添加一列,并向数据库中添加一个新表
我想要一个结构,其中有一个用户
表,一个课程
表,描述各个课程(包括视频url等),还有一个用户课程订阅
表,它基本上由一个用户id
和一个课程id
组成,以及开始日期
和结束日期
这消除了对每门课程只有一列的要求,同时仍然允许您将学生添加到多个课程中。这是一个相当标准的“”关系的示例,其中连接表(在本例中为user\u course\u subscription
)只是添加其他两个实体之间的链接。简言之,不,这不是一个好的模式。简言之,不,这不是一个好的模式。这很有意义,谢谢,我完全忘了考虑人们改变他们的电子邮件地址!这是有道理的,谢谢,我完全忘了考虑人们改变他们的电子邮件地址!不过,我该如何列出每门课程的独立章节呢。我还会为具体的课程安排一张桌子吗?或者我还有别的方法可以做到这一点。因为虽然我可以看到创建用户表和课程表将如何更好地锻炼身体,但我仍然没有地方将信息放在特定章节中,这些章节将根据课程的不同而有所不同。那么,为各个课程单独设置一个表会更好吗?@Fahas-在该ca中