图像表模式反馈

时间:2013-02-12 19:48:24

标签: mysql database-design database-schema

好的,所以我在过去的几个月里一直在处理这个问题,主要是因为我是新手......我做了我的阅读和研究,这就是结果......

我正在为我网站的图库设计图像表模型。基本上,我会上传图片(filename)并创建5种不同尺寸(smallthumbmediumlargebig

我已经设定了不同尺寸的指南:

  • 上传图片的最小尺寸为100px
  • --->始终创建smallthumb尺寸
  • 如果上传的图片大于100 px --->创建smallthumbmedium尺寸
  • 如果上传的图片大于350 px --->创建smallthumbmediumlarge尺寸
  • 如果上传的图片大于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

1 个答案:

答案 0 :(得分: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表,您可以轻松获取规范图像文件名,标题/标题/等。并获得您需要的后缀。如果每个文件需要不同,宽度/高度将在此表上,如果是每个大小,则在ImageSizes上。如果您想要默认但允许灵活性,也可以使用两者。