2013-02-12 62 views
2

好吧,所以我一直在处理这个最近几个月,主要是因为我是一个新手...我做了我的阅读和我的研究,这是结果...图表模式反馈

我正在为我的网站设计一个图库表的模型。基本上,我会上传一张图片(filename)并创建5种不同尺寸(small,thumb,medium,large,big)。

我已经建立了不同规模的准则:

  • 用于上传图片的最小尺寸为100像素
  • --->始终创建smallthumb尺寸
  • 如果上传图像大于100 px --->创建small,thumb,medium尺寸
  • 如果上传的图像大于350 px --->创建small,thumbmediumlarge大小
  • 如果上载的图像是大于700 PX --->创建smallthumbmediumlargebig大小

每个尺寸将具有它的通过定义自己的文件名filename +代表大小的suffix。所以,一个小图像的文件名将以_s后缀(1234_s.jpg),带有_t后缀(1234_t.jpg)的大拇指等等...

我也决定创建一个小文件系统结构,因为我可能最终会上传大约125 000张图片。一些与此类似:

http://www.mywebsite.com/gallery/images/0/6/image1.png 
http://www.mywebsite.com/gallery/images/5/4/image2.png 

到图像的路径将驻留在config.php文件,我将保持到图像文件夹的相对路径的数据库名为relative_dir

我还需要列下保持宽度和高度,使其在浏览器中显示正常(如果需要显示许多拇指,使用getimagesize可能会给服务器带来很大压力)

因此,经过几周的阅读和研究,我想出了这个(记得我是一个新手)

任何反馈,建议?

IMAGE 
----------------------- 
image_id 
title 
caption 
relative_dir 
filename 
small_filename 
small_width 
small_height 
thumb_filename 
thumb_width 
thumb_height 
medium_filename 
medium_width 
medium_height 
large_filename 
large_width 
large_height 
big_filename 
big_width 
big_height 

回答

2

有列像value1value2value3或你的情况smallmediumlarge是表示非规范化问题。它使得体积庞大,如果您想要添加(或删除)图像大小,则必须更改模式。我不知道为什么你需要_width/_height列,因为每个列似乎都有基于其大小状态的静态宽度/高度(例如,small总是100px),但无论如何。我建议三个表:

ImageUploads -- canonical image table 
iuID, title, caption, relative_dir, filename 
(do you need *both* relative_dir/filename) 

ImageSizes -- settings for sizes; width/height may go here as well 
isID, 
sizeName (small, medium, large, big, thumb) 
sizeSuffix (_s, _m, _l, _b, _t?) 

Images 
iuID, isID 

使用Images表就可以轻松搞定的标准图像文件名,标题/字幕/等。并获得你需要的后缀。如果宽度/高度需要根据每个单独的文件而不同,或者如果每个文件的尺寸不同,则宽度/高度将在此表上显示。如果您想要使用默认值,但也可以灵活使用,您也可以同时使用这两种方法。

+1

哇!它只花了你5分钟来模型!感谢您的解释。尺寸是动态的,并且每个单独的文件都不相同。所以,如果我上传一个2500像素×1200像素的图像,拇指将是100像素×48像素,等等......(我使用imageMagick)..所以尺寸将在图像表...此外,把relative_dir和文件名合并成一列是很有意义的......谢谢! – Marco 2013-02-12 20:54:43