正确设置我的mysql表

时间:2013-02-21 18:26:41

标签: php mysql database-design

我正在考虑如何最好地设置我的mySQL表。

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

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

目前,我有1个'照片'列,我存储了所有照片路径,以逗号分隔。

首先,我被告知这不是最佳做法。

此外,它还会使网站上的“删除”按钮从列表中删除一张照片。我必须得到commma分隔列表,将其爆炸,找到与我要删除的图像匹配的位并删除它,将列表重新放回原处并再次将其重新插入到同一个字段中。

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

2 个答案:

答案 0 :(得分:1)

这就是所谓的 1-to-n 关系。而且你是对的,你所采取的方法并不是一个好方法,它将导致许多令人头痛的问题。快速谷歌搜索“数据库规范化”,你会发现很多关于这个主题的信息。必读的东西。

您的方法:从您的广告表中删除photos列,然后引入其他ads_photos表。该表格至少有两列,ad_id列引用照片所属的广告,以及url列,其中包含照片的网址。

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

答案 1 :(得分:1)

为什么不尝试用照片表来代替每张照片的列:

TB_PHOTO id(INT) 路径(VARCHAR) userId(引用用户表)

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

select path from TB_PHOTO where userId='?';

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