0

我正在就如何最好地设置我的 mySQL 表进行一些输入。

有问题的表是一个存储有关发布到我的网站上的广告信息的表。大多数列都很简单,包含所有常用信息,如价格、提交者的用户 ID、提交日期等。

我遇到问题的部分是照片。可以将任意数量的照片添加到广告中,从最少 1 张到可能无限制(尽管我会在某个时候限制它,但实际上最多可以达到 40 张)。

目前,我有 1 个“照片”列,其中存储所有照片路径,用逗号分隔。

首先,有人告诉我这不是最佳做法。

此外,它使从网站上带有“删除”按钮的列表中删除单张照片相当冗长;我必须得到逗号分隔的列表,将其分解,找到与我要删除的图像匹配的位并将其删除,将列表重新组合在一起并再次将其重新插入同一字段。

大概答案是每张照片的一列,以某种方式根据需要动态创建?但我不确定这将如何工作,就添加列的代码而言(通过插入时的 php),而且,1 行可能有 30 张照片,而另一行只有 1 张,所以 1 的行将有 29 张空列?这很糟糕吗?

4

2 回答 2

1

这就是所谓的一对一关系。而且你是对的,你所采取的方法不是一个好的方法,它会导致很多麻烦。在 Google 上快速搜索“数据库规范化”,您会发现很多关于该主题的信息。必读的东西。

您的方法:从您的广告表中删除photos列,并引入一个额外的ads_photos表。该表将至少有两列,一ad_id列引用照片所属的广告,另一列包含url照片的 URL。

这允许您将任意数量的照片与给定的广告相关联。我建议使用 InnoDB 表来启用表之间的“真实”外键关系。

于 2013-02-21T18:29:33.760 回答
1

而不是每张照片的列,您为什么不尝试使用照片表格:

TB_PHOTO id (INT) path (VARCHAR) userId(引用到用户的表)

然后,您可以检索照片的数据以及您想要的所有照片。例如

select path from TB_PHOTO where userId='?';

您将获得属于特定用户的所有照片。

于 2013-02-21T18:31:39.383 回答