请为我的表建议更好的设计/解决方法

时间:2016-02-25 12:04:48

标签: mysql database-design

我有一个电子商务网站,将来会有很多图片。图像的当前表格设计如下。

id (Primary)    int(11)
p_id            int(11)  // product id
original        varchar(1000) // original image url
thumbnail       varchar(1000) // thumbnail image url - 76x76
medium          varchar(1000) // medium image url    - 228x228
large           varchar(1000) // large image url - 560x560
is_featured     tinyint(4)   // if featured image 

表格名称:给定产品ID的pimages(允许多张图片)。

要做:它一直工作到现在,但我需要添加每个图像(原始,缩略图,中等和大)的高度/宽度来指定它们的尺寸以便我可以解析它们直接用于html,以便更快地进行浏览器渲染。

Catch :图片可能是也可能不是指定的尺寸。假设中等图像为228x50或200x228。

可能的解决方案:添加4个高度/宽度列,每个列一个。但这听起来不太好。

3 个答案:

答案 0 :(得分:0)

相反,我建议您将pimages表结构更改为此

id (Primary)    int(11)
p_id            int(11)  // product id
image        varchar(1000) // original image url
width        int(11)
height       int(11)
type         enum('original', 'thumbnail', 'medium', 'large')
is_featured     tinyint(4)   // if featured image 

因此,它意味着您将逐个存储所有图像,并且将根据您需要为每个分离的图像(宽度,高度......)作为匹配属性,并按类型type enum('original', 'thumbnail', 'medium', 'large')将它们分开在你提到这个是你的'大'图像

答案 1 :(得分:0)

我要做出一些假设:

  • 每种产品都有一个多个图像
  • 每张图片至少有一种尺寸
  • 每个图片尺寸的网址将不同
  • 您不能使用命名约定来获取每个图像的URL
  • 你有一个图像,而不是图像的大小(例如"前面的图片",不是"前面的图片 - 缩略图")
  • 您将原始图像存储在某处,并有一个调整大小的过程。

我还假设将来你需要超过4种尺寸(例如,视网膜显示器上的尺寸不是很大)。

在这种情况下,我有:

Table PRODUCTS
----------------
p_id (primary key)
.....

Table PRODUCT_IMAGES
---------------------
image_id (pk)
p_id (fk)
original_url
original_height
original_width
is_featured

table IMAGE_SIZES
----------------- 
image_id (fk)
type         enum('original', 'thumbnail', 'medium', 'large')
height
width

答案 2 :(得分:0)

无需将所有3张图像存储在数据库中:

你能做的是:

  • 使用名称original,medium,thumb
  • 制作 3个文件夹
  • 将图像存储在这些文件夹中
  • 所有3张图片的
  • 名称相同

从原始图片,制作尺寸为中等尺寸拇指的尺寸为:250 * 250。左小拇指的尺寸为:100 * 100

例如,
对于产品1,您可以将它们保存到文件夹中,如原件/产品-1,介质/产品-1,拇指/产品-1

To fetch the original image: example.com/original/product-1
To fetch the medium thumb image: example.com/medium/product-1
To fetch the thumb image: example.com/thumb/product-1