【发布时间】:2017-10-19 18:02:12
【问题描述】:
我正在建立一个列表网站(没什么特别的,人们可以创建列表,例如“要观看的电影”或“要做的事情”,但学习东西很好)。
现状:
人们注册,我在users 表中为他们创建一行。在该行中,我有一个名为Lists 的列。在本专栏中,我存储了一个serialized array,其结构如下:
$lists = array(
"To Do" => array(
"List Info" => array(
"add date" => 20170503,
"add time" => 130530
),
array(
"item" => "Go to the supermarket",
"add date" => 20170503,
"add time" => 140503,
"completed" => false
),
array(
"item" => "Clean my room",
"add date" => 20170503,
"add time" => 180503,
"completed" => false
),
array(
"item" => "Go jogging",
"add date" => 20170503,
"add time" => 200503,
"completed" => true
)
),
"Movies To Watch" => array(
"List Info" => array(
"add date" => 20170504,
"add time" => 130530
),
array(
"item" => "Zootopia",
"add date" => 20170504,
"add time" => 150503,
"completed" => true
),
array(
"item" => "Anne The Series",
"add date" => 20170504,
"add time" => 190503,
"completed" => false
),
array(
"item" => "Upside Down",
"add date" => 20170505,
"add time" => 230503,
"completed" => false
)
)
);
这很好用,但我想知道这是否是正确的方法。特别是因为我想存储有关每个列表和项目的一些信息(add date、add time,最终还有更多......)
创建多个表会更好吗:users、lists、list items,然后通过用户 ID 进行内部连接?
我也有点想知道大型社交媒体网站是如何做到这一点的……例如 Twitter。他们是为每条推文添加一个新行,还是将一条新推文推送到数组中……或其他什么?
任何建议将不胜感激,
内森
【问题讨论】:
-
简短回答:当然最好是制作多个表格。看看任何数据库入门,一定有成千上万的你可以谷歌。您的方法确实无法扩展。 (例如,您将如何搜索推文?)
-
是的,我实际上有一个搜索功能,我会反序列化所有用户数组并获取匹配的列表项......这并不慢,但我可以想象它有超过 1000 个用户。 ;-) 谢谢
标签: php mysql arrays serialization multidimensional-array