我正在开发一个基于订阅服务的网站,该网站将根据用户注册的内容为用户提供多个课程(视频)。
目前我正在考虑以下数据库结构
Users
------
email | pwd | subscription_date | expiration_date
Unique Key将是" email"
Course_Subscription
-------
email | calculus_1 | calculus_2 | physics_1 | physics_2 ... | Nth course
提供的课程数量可能从约15开始,并逐渐增加加班时间。课程订阅也将是布尔值TRUE / FALSE
然后是每个课程的表格如下:
Calculus_1
----------
id | title | description | video_url |
单个课程可能有20多个章节。
有关身份验证过程的一些信息 - 它将转到userlogin --->课程订阅--->课程章节。如果用户登录和课程订阅都将根据电子邮件地址进行验证。在播放之前,还将根据订阅表检查视频。
我的问题是:
以下是我将用于验证和填充html的php脚本示例
$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"
}
}
}
}
以上代码用于根据订阅填充章节列表的菜单。我知道代码并不完美,我还在努力 - 但我想先确定数据库的结构,因为我对我将如何访问它有一个相当不错的想法信息。
答案 0 :(得分:5)
需要通过添加新列和表来更改数据模型以便添加新数据(如课程)的设计不是一个好设计。你应该有一个包含课程的表和一个订阅表。
此外,电子邮件不是主键的一个很好的选择。主键永远不会改变,但人们可能想要更改他们的电子邮件地址。因此,自动增量数通常用作pk。
将这些建议考虑在内的架构如下所示:
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
表中就像现在一样有意义。但是,如果学生可以在不同的日期订阅不同的课程,并且您希望每个订阅的截止日期不同,那么它应该在subscriptions
表中。
答案 1 :(得分:2)
随着时间的推移,你的设计会很糟糕。您提出的建议意味着每个新课程都会在您的course_subscription
表中添加一列,并为数据库添加一个新表。
我会选择一个结构,你有一个user
表,一个描述各个课程的course
表(包括视频网址等)和一个user_course_subscription
表,它基本上由user_id
和course_id
以及start-date
和end-date
组成。
这消除了为每门课程设置单个列的要求,同时仍允许您将学生添加到多个课程。这是非常标准的“many to many”关系的一个示例,其中联结表(在本例中为user_course_subscription
)只是添加了其他两个实体之间的链接。