我正在创建一个用户可以注册课程的应用程序。一个用户可以注册多个课程,最后我感兴趣的数据就像这样。
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查询我需要知道是否可以存储此信息,而不是将数组转换为字符串
答案 0 :(得分: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,以便了解哪些课程是第一位的。
答案 1 :(得分:0)
为什么不使用具有三列的表格
1)USER_ID
2)subject_id
3)date_joined
并存储在那里?如果序列化并存储阵列,则无法轻松查询。例如 - 获取人们为某个主题注册的日期。
答案 2 :(得分:0)
将数据结构序列化并存储为String当然是一种非常糟糕的方法。
您应该使用关系表来存储此数据。
例如,您可以创建一个包含3列的course_attendees表 - user_id,course_id和join_date。 Join_date可用于跟踪订阅课程的顺序。
这将帮助您更有效地查询表,而不是编写代码来将字符串序列化和反序列化到您的数据结构。