首页 文章

一个多维数组与多个具有连接行的表

提问于
浏览
0

我正在 Build 一个列表网站(没有什么特别的,人们可以创建列表,例如'要观看的电影'或'要做'但是学习东西很好) .

The current situation :人们注册,我在 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 dateadd time ,最终更多..)

制作多个表会更好: userslistslist items 然后通过用户ID将它们连接起来?

我也有点想知道社交媒体网站有多大这样做......比如推特 . 他们是否为每条推文添加了一个新行,或者他们是否将新的推文推送到数组......还是其他什么?

任何建议将非常感谢,

弥敦道

2 回答

  • 2

    建议的方法是创建像您提到的单独的表 . ( userslistslist_items

    你的人际关系是这样的:

    users - > lists =在两个表中由 user_id 列链接

    lists - > list_items =在两个表中由 list_id 列链接

    这还使您能够让用户拥有多个列表,而无需在users表中添加额外的列 .

    如果您要继续将列表项添加到序列化数组中,那么一旦数组开始增长到一定大小,您将遇到性能问题,因为您有一个巨大的列条目要进行排序 .

    如今,数据库非常高效,可以及时查看数百万甚至数十亿行 . 只记得在表连接的所有字段上都有索引 .

    您可以争论关于 LONGBLOB 字段允许4GB文本的观点,但是加载该单个记录需要花费很长时间 . 将它们存储为行使您可以灵活地仅检索当时所需的行 . 而不是每次你甚至只需要一个

    要回答关于twitter的问题,是的,每个推文都会有一个新行 .

    引用alexis的评论,我认为这是有 Value 的:

    Google“规范化”,您将看到第一步(“第一范式”)是在每个单元格中只存储一个值 . 如果您可以想象您想要在单个设置中查询数据库的任何情况,请为它们提供所有自己的列 . 如果设置的内容对数据库完全透明,特别是如果它们是半结构化的(例如,一组不同的键值对),那么保持数据库不知道设置是什么是合理的(即做你现在正在做的事情) .

    Some useful links on Database Normalization

  • 0

    简短的回答是,如果你使用不同的表,你会更好 . 否则,您将列表/内容的数量限制为字段的大小 .

相关问题