2011-03-26 81 views
0

我正在制作一个应用程序,用户可以注册课程。一个用户可以注册多个课程,最后我感兴趣的数据看起来像这样。mysql和php如何存储信息

array(
    0 => array(
     0    => 12, // 0 is nothing 12 is the course id which i use to refference 
     'date_joined' => 1301123384 // when the user joined the course 
     ), 
    1 => array(
     0    => 52, // the same as above 
     'date_joined' => 1301123384 
     ) 
) 

我还需要主数组的键来确定用户加入的顺序。 要存储它,我将它序列化为一个字符串并将其保存在数据库中。
这是一个好方法吗?
它可以做不同吗?更好?
我并不需要一个MySQL查询我需要知道,如果不是一个数组转换为一个字符串

回答

2

不,这绝对不是你应该如何存储它。您需要规范化数据库设计,以便使用查询来完成工作。如果你序列化它,你将无法查询它(以传统的方式,至少)。下面是一个更好的模式

Students : sid | s_name | more | person | data | created | 
Courses : cid | course_no | c_name | some | more | info | created 
Students_Courses : id | sid | c_id | created 

其分解

您有学生信息和课程信息的课程表中的学生表。他们有一个与SID和CID的连接表,以创建一个唯一的密钥。这将让您查询学生所属的课程以及订阅课程的所有学生。由于您有created列,因此您可以将其用于ORDER BY,以便知道哪些课程优先。

+0

好吧,我明白了,谢谢! – andrei 2011-03-26 07:57:00

0

为什么不使用有三列
1)user_id说明
2)表该信息可以以其他方式存储subject_id
3)加入日期
并将其存储在那里?如果序列化并存储数组,则无法轻松进行查询。例如 - 让人们注册某个主题的日期。

0

序列化并将数据结构存储为字符串当然是一种非常糟糕的方式。

您应该使用关系表来存储这些数据。

例如,您可以创建一个包含3列(user_id,course_id和join_date)的course_attendees表。 Join_date可用于跟踪课程订购的顺序。

这将帮助您更有效地查询表,而不是编写代码来将字符串序列化并将其反序列化为数据结构。