当前位置: 首页 > 面试题库 >

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

邵胜涝
2023-03-14
问题内容

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

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

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

任何建议表示赞赏。

谢谢。


问题答案:

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

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

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

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

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

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



 类似资料:
  • 问题内容: 我不敢相信我无法做到这一点,但我希望能够将当前日期和时间从php存储到mysql表中。 表中的列是类型datetime。我已经试过了 但是我的时间戳记为0000-00-00 00:00:00 这一定很容易做到,但我无法使其正常运行!我想使用来自php的时间戳,而不是使用mysql now()函数 问题答案: 不要将其另存为Unix Timestamp(输出),而是另存为DATETIME

  • 我正在创建一个web应用程序,它有一个用户对象,每个用户对象都有一个需要存储到mySQL数据库表中的对象(食物)的ArrayList。我想将整个ArrayList存储到一列中。将其存储为Json会更好吗?或者我应该为每个用户创建一个表来存储ArrayList的各个项目吗?我唯一的问题是数据会被频繁编辑。 编辑:我有供用户和食物使用的桌子。其想法是,用户将食物表中的食物添加到他们的ArrayList

  • 问题内容: 我正在尝试编写一个页面,该页面调用存储在MySQL数据库中的PHP。存储在MySQL数据库中的页面包含要在页面加载时运行的PHP(和HTML)代码。 我该怎么做呢? 问题答案: 您可以为此使用eval命令。 不过,我还是建议不要这样做,因为使用这种方法存在很多陷阱。 调试比较困难,这意味着一些安全隐患(执行数据库中的不良内容,呵呵)。 请参阅何时在php中使用eval邪恶?例如。Goo

  • 问题内容: 如何在MySQL数据库中存储和显示图像。到目前为止,我只编写了从用户那里获取图像并将其存储在文件夹中的代码,而到目前为止,我编写的代码是: HTML FILE PHP文件 问题答案: 我找到了答案,对于那些在这里寻找相同事物的人,我是怎么做的。您不应该考虑将图像上传到数据库,而是可以将上传文件的名称存储在数据库中,然后检索文件名,并在要显示图像的任何位置使用它。 HTML代码 PHP代

  • 问题内容: 使用Java 对象,最简单的方法是将它们存储为MySql 对象(在UTC中)。切换到这种方法将不再起作用,因为MySQL 无法提供存储纳秒的精度。仅将它们截断可能会导致新创建的对象与从数据库读取的对象之间的意外比较结果。 时间戳不适合我作为一个优雅的解决方案:手动编写选择查询变得更加困难,因为必须将时间戳转换到任何地方以使其可读,并且与值甚至值相比,Java的处理有些笨拙。 去这里最好

  • 问题内容: 因此,在C ++ / C#中,您可以创建标志枚举来保存多个值,并且在数据库中存储单个有意义的整数当然是微不足道的。 在Java中,您有EnumSets,这似乎是在内存中传递枚举的一种很好的方法,但是如何将组合的EnumSet输出为整数进行存储?还有另一种方法可以解决这个问题吗? 问题答案: