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

Dan*_*Dan 3 php sql arrays

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

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

有没有真正的理由避免这样做?

任何建议表示赞赏

谢谢.

phi*_*dah 10

真正的原因是规范化,你将通过这样做打破第一个正常形态.

但是,在许多情况下可以考虑违反正常形式.你在处理多少个领域,他们都是布尔人?

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

  • 当您需要更新设置时,必须首先从数据库中提取当前设置,反序列化数组,更改数组,序列化数组并更新表中的数据.
  • 搜索时,您将无法向数据库询问给定用户(或一组用户)是否已禁用或启用给定设置,因此您将无法进行搜索.

相反,您应该考虑选择创建另一个表,其中包含您需要的记录作为来自其他表的一对多关系.因此,您不会有30个空字段,而是您可以为每个偏离默认值的选项设置一行(请注意,此选项也有一些缺点,例如,如果更改默认值).

总之:我认为你应该避免序列化数组并将它们放入数据库,至少如果你只关心上述缺点.