一尘不染

PHP / MySQL-在数据库中存储数组

sql

我正在开发一个PHP应用程序,该程序需要将各种设置存储在数据库中。客户经常询问是否可以添加或更改/删除某些内容,这已导致表格设计出现问题。基本上,我有很多布尔字段,它们仅指示是否为特定记录启用了各种设置。

为了避免使表格混乱,我考虑将数据存储为序列化数组。我已经读过,这被认为是不好的做法,但是我认为这是使用这种方法的合理案例。

有什么真正的理由避免这样做吗?

任何建议表示赞赏。

谢谢。


阅读 182

收藏
2021-03-08

共1个答案

一尘不染

真正的原因是规范化,您将这样做破坏了第一个规范形式

但是,在许多情况下,可以考虑违反正常形式。您要处理多少个字段,它们都是布尔值?

将序列化为字符串的数组存储在数据库中将具有以下缺点(以及其他缺点):

  • 当需要更新设置时,必须首先从数据库中提取当前设置,反序列化阵列,更改阵列,序列化阵列并更新表中的数据。
  • 搜索时,您将不能仅询问数据库给定用户(或一组用户)是否已禁用或启用给定设置,因此您将没有任何搜索机会。

相反,您应该真正考虑使用其他表中的一对多关系以所需记录创建另一个表的选项。因此,您将没有30个空字段,但每个偏离默认值的选项只能有一行(请注意,此选项也有一些缺点,例如,如果更改默认值)。

总而言之:我认为您应该避免序列化数组并将其放入数据库中,至少如果您只在乎上述缺点的话。

2021-03-08