产品图片的数据库结构

Posted

技术标签:

【中文标题】产品图片的数据库结构【英文标题】:Database structure of product images 【发布时间】:2019-01-02 08:17:06 【问题描述】:

目前我有 3 个表:产品、图像、products_images。 所以,基本上我将产品的图像存储在“products_images”表中。 更新产品时,我从“products_images”表中删除与该产品相关的所有行,并添加新行。 另外,我需要保存订单,现在订单是它们在数据库中的存储方式。

这是正确的方法吗?或者也许有更好的数据库结构来存储产品的图像?

【问题讨论】:

您可以在 product_images 表中保留一列,一旦您添加或删除任何内容,请检查表中是否存在产品和图像之间的链接,然后根据需要将该位更新为 0 或 1。对于新记录,添加一行默认位为 isDeleted 0。 阅读GBN的answer here。 【参考方案1】:

实体关系考虑

如果您不在产品之间共享图像(切勿将一张图像用于超过 1 个产品),那么您的关系实际上是一对多的,并且不需要 products_images 联结表。这会将您的模型简化为:

产品(id_product,...) 图片(id_image, ..., id_product)

Images 表中的id_product 将有一个指向Products(id_product) 的外键。这样,当您想从产品中分离所有图像时,您只需运行更新语句:

UPDATE images SET id_product = NULL WHERE id_product = ?

排序考虑

由于您需要保存图像在数据库中的存储顺序,具体取决于您在 Images 表中的列,您可以使用例如 id_image,如果它被声明为 SERIAL(自动递增整数值)。作为 PostgreSQL 中的经验法则(没有聚集索引),请记住,如果您需要对输出进行排序,则需要自己在末尾进行(例如:添加 ORDER BY id_image)。

【讨论】:

以上是关于产品图片的数据库结构的主要内容,如果未能解决你的问题,请参考以下文章

具有延迟加载图像的结构化数据?

vue的 v-for 循环中图片加载路径问题

下载文件和图片

上传图片时如何自动创建按钮?

服务器迁移 prestashop 后未显示产品图片

单击时从数据库中更改图片?