1

我正在开发一个基于订阅的服务的网站,它将根据用户注册的内容为用户提供几门课程(视频)。

目前我正在考虑以下数据库结构

Users
------

email | pwd | subscription_date | expiration_date

唯一键是“电子邮件”

Course_Subscription
-------

email | calculus_1 | calculus_2 | physics_1 | physics_2 ... | Nth course

提供的课程数量可能会从大约 15 个开始,并逐渐增加加班时间。课程订阅也将是 TRUE/FALSE 的布尔值

然后每个课程的表格如下:

Calculus_1
----------
id | title | description | video_url |

单门课程可能有 20 多个章节。

有关身份验证过程的一些信息 - 它将进入用户登录 ---> 课程订阅 ---> 课程章节。用户登录和课程订阅都将根据电子邮件地址进行验证。在播放视频之前,还将根据订阅表检查视频。

我的问题是:

  1. 这是构建它的最佳方法吗?还是有更好的选择?
  2. 这会导致性能方面的任何问题吗?还是不会引起注意?

这是我将用于验证和填充 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"
          }
       }


  } 
}

上面的代码用于将根据订阅填充章节列表的菜单。我知道代码并不完美,我仍在努力——但我想首先确定数据库的结构,因为我对如何访问信息有了相当不错的了解。

4

2 回答 2

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表格中。

于 2013-09-08T08:40:28.890 回答
2

随着时间的推移,您的设计将难以维护。您的提议意味着每门新课程都会在您的course_subscription表中添加一列,并在数据库中添加一个新表。

我会选择一个结构,其中有一个user表格,一个course描述各个课程的表格(包括视频网址等),以及一个user_course_subscription基本上由 auser_id和 acourse_id和 andstart-date组成的表格end-date

这消除了每门课程都有一个列的要求,同时仍然允许您将学生添加到多个课程中。这是一个非常标准的“多对多”关系的示例,其中联结表(在本例中user_course_subscription)只是添加了其他两个实体之间的链接。

于 2013-09-08T08:50:01.657 回答