将多个图像URL存储在数据库的单个行中

时间:2016-08-29 11:59:10

标签: php mysql database-design normalization

我需要连续存储多个图像。所以,我可以遵循两个方法。

1。第一种方式

一种方法是1NF形式(应该避免,因为我在书中读过)。

我将使用列网址创建一个表 Feed ,并存储以逗号分隔的多个网址

ID 网址

1 a.jpg,b.jpg,c.jpg

2 xyz.jpg,image.jpg

要检索图像,我会使用explode()

  $photos = explode(' , ', $url);

2。第二种方式

第二种方法是规范化表并创建一个单独的图像表,其中包含与表Feed的多对一关系

Feed表:

ID

1

2

图片表:

fid 网址

1 a.jpg

1 b.jpg

1 c.jpg

我想知道为什么我们应该避免第一种方法?或者只对小项目使用第一种方法?

2 个答案:

答案 0 :(得分:2)

您的图像名称数量可变吗? “数组”应该实现为另一个表中的行。和你的#2一样。

你显然已经完成了你的功课并阅读了论点;我不会在这里重复他们。相反,我建议用两个学习练习来解决这个问题。

  1. 继续执行#1。从现在开始一个月,您将了解这些问题。那时,你将学习另一课,即......
  2. 如何将架构(1个表格更改为2个)并保留数据。这将需要一些SQL语句;他们将是第二次学习练习。

答案 1 :(得分:0)

如果我们在谈论图像标准化不会带给你任何东西。您永远不会按图像的文件名进行过滤,排序或聚合。

所以,你最初的想法接近正确(第一种方式)。但我建议使用json_ *函数来存储值。

$urls = json_encode( ['x.jpg', 'y.jpg', 'z.jpg'] );
// INSERT INTO mytable (..., urls) VALUES (..., $urls);

// SELECT urls FROM mytable;
$photos = json_decode($data['urls']);