PHP:是否序列化
我有一个包含产品的产品表。每个产品可以有多个图像。图像的URL/id将存储在我的数据库中。现在,与其在我的产品表中创建诸如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存储在那里更好 我相信这两种方法都会奏效,但我想采用最佳实践 注意:每个产品的图像数量会有所不同。有些产品甚至可能没有图像 编辑:为我的问题添加更具体的细节
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
序列化数据:
- 从数据库获取序列化数据
- 反序列化为数组或对象
- 循环浏览数据以找到所需的数据
- 将其从列表中删除
- 序列化修改后的列表并将其保存回数据库
join
以及所有这些……或者您可以使用视图而不是join@Kolink@Kolink,是的,据我所知,图像url不会用于搜索。它仅用于在显示产品时显示图像。除了创建另一个表,以及在修改图像时更新更多表等,使用image\u产品
表是否存在任何缺点(如效率、速度等)?如果您稍后决定要为图像数据指定新属性,该怎么办?例如,您可能希望指定默认图像。如果数据在主products表中序列化,则必须编写代码遍历数据库中的每一行以更新序列化对象。如果您有一个单独的表,您可以添加一个新字段并使用一条SQL语句。谢谢。仅此一个示例向我展示了编辑/删除图像需要做的工作。虽然我不需要搜索我的图片,但我肯定需要编辑。