设置我的mysql表properley


setting up my mysql table properley

我想了解如何最好地设置mySQL表。

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

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

目前,我有一个"照片"列,在那里我存储所有的照片路径,用逗号分隔。

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

此外,在网站上用"删除"按钮从列表中删除一张照片也相当冗长;我必须获取逗号分隔的列表,将其分解,找到与我要删除的图像匹配的位并将其删除,将列表放回一起,然后再次将其插入同一字段。

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

与其为每张照片设置一列,不如尝试使用一个照片表:

TB_照片id(INT)路径(VARCHAR)userId(参考用户的表)

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

select path from TB_PHOTO where userId='?';

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

这就是所谓的1-to-n关系。你是对的,你所采取的方法不是一个好的方法,它会导致很多头疼的事情。在谷歌上快速搜索"数据库规范化",你会发现很多关于这个主题的信息。必读的东西。

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

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