PHP:是否序列化

PHP:是否序列化,php,json,serialization,normalization,Php,Json,Serialization,Normalization,我有一个包含产品的产品表。每个产品可以有多个图像。图像的URL/id将存储在我的数据库中。现在,与其在我的产品表中创建诸如image\u url1、image\u url2等列,不如将包含我的产品表中图像列表的序列化数据存储在一个名为image\u url的列中 还是创建另一个product\u image关系表并将产品ID和图像ID/URL存储在那里更好 我相信这两种方法都会奏效,但我想采用最佳实践 注意:每个产品的图像数量会有所不同。有些产品甚至可能没有图像 编辑:为我的问题添加更具体的细节

我有一个包含产品的产品表。每个产品可以有多个图像。图像的URL/id将存储在我的数据库中。现在,与其在我的产品表中创建诸如
image\u url1
image\u url2
等列,不如将包含我的产品表中图像列表的序列化数据存储在一个名为
image\u url
的列中

还是创建另一个
product\u image
关系表并将产品ID和图像ID/URL存储在那里更好

我相信这两种方法都会奏效,但我想采用最佳实践

注意:每个产品的图像数量会有所不同。有些产品甚至可能没有图像


编辑:为我的问题添加更具体的细节。图像URL将不用于搜索。当显示产品时,它将仅用于检索图像的URL。

很多人会告诉你,如果你在一个字段中存储一个事物列表,它将终止关系数据库引擎(或其他)的作用


但是,如果您从未需要按该字段进行搜索(在您的情况下,如果您从未需要获取图像url并查找拥有该图像的产品),或者该字段从未受到约束(例如,如果不需要确保同一图像不会被使用两次),您没有理由不将数据转储到单个字段中。

在images表中创建一列“product\u id”。

最佳实践不是万能的,它们总是最适合于特定情况,无论是广泛的还是狭窄的

如果你要做的就是循环浏览图片列表,我看不出有什么害处。但是,如果你要编辑或搜索特定的图像,我不会这么做。与您的其他选择(命名图像字段)不同,为什么不使用图像所属产品的外键将图像放在不同的表中呢


或者,如果您真的需要将它们全部填充到一个字段中,您可以查看数据库的XML功能。我在xml文档中编码了很多字段,并将其作为字段存储在数据库中,然后使用XPath对其进行搜索。您取决于数据库供应商实现的XPath函数的级别,但在我的情况下,它的性能相当好,允许我们在同一个表中存储同一类对象的不同类型。

最佳做法是使用单独的表。将数据序列化到单个字段中是可行的,但这不是一个好主意

如果需要使用其他语言访问数据库,该怎么办。它能够反序列化PHP序列化对象吗?(否)

使用序列化数据将需要更多的代码

删除图像示例

单独表格:

delete from product_images where product_image_id = 4
序列化数据:

  • 从数据库获取序列化数据
  • 反序列化为数组或对象
  • 循环浏览数据以找到所需的数据
  • 将其从列表中删除
  • 序列化修改后的列表并将其保存回数据库

这个问题不适合我们的问答形式。我们希望答案通常涉及事实、参考资料或特定专业知识;这个问题可能会引起意见、辩论、争论、投票或广泛的讨论。不要连载,这样的理由会让我喝上几瓶苏格兰威士忌。。尤其是在使用wordpress时。。请记住,搜索不仅令人头痛,而且用非基于web的方法编辑数据也是一件痛苦的事情。。(文件名更改,手动更新行,现在您也必须更新charcount)。公平地说,这是一个相当大的“如果”。正确。我自己喜欢避免将事物列表放在一个字段中,但有时这比创建一个完整的另一个表更容易,然后必须使用(另一个)
join
以及所有这些……或者您可以使用视图而不是join@Kolink@Kolink,是的,据我所知,图像url不会用于搜索。它仅用于在显示产品时显示图像。除了创建另一个表,以及在修改图像时更新更多表等,使用
image\u产品
表是否存在任何缺点(如效率、速度等)?如果您稍后决定要为图像数据指定新属性,该怎么办?例如,您可能希望指定默认图像。如果数据在主products表中序列化,则必须编写代码遍历数据库中的每一行以更新序列化对象。如果您有一个单独的表,您可以添加一个新字段并使用一条SQL语句。谢谢。仅此一个示例向我展示了编辑/删除图像需要做的工作。虽然我不需要搜索我的图片,但我肯定需要编辑。