我是设计数据库的新手,我需要有关图片表的帮助。
CREATE TABLE LANGUAGE (
id int(10) unsigned not null auto_increment,
LANGUAGE VARCHAR(45),
IMAGE_id INT(10) UNSIGNED NOT NULL,
// some more
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE PRODUCT(
id int(10) unsigned not null auto_increment,
// some more
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE PRODUCT_IMAGE(
PRODUCT_id INT(10) UNSIGNED NOT NULL,
IMAGE_id INT(10) UNSIGNED NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE CATEGORY(
id int(10) unsigned not null auto_increment,
IMAGE_id INT(10) UNSIGNED NOT NULL,
// some more
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
我想创建一个图像表,但我还没有找到正确的方法。
- 一件产品可能包含不止一张图片
- 每个类别和语言都有一张图片
- 我想要一个弹性图像表,我可以在网站和应用程序中使用它
- 我可能需要不同尺寸的图像
所以我设计了类似的东西
CREATE TABLE IMAGE(
id int(10) unsigned not null auto_increment,
extension varchar(5),
file_name varchar(45),
file LONGBLOB,
//some more
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
我应该保留图像的某些尺寸,然后在我的应用程序或网站中调整图像大小吗?
最佳答案
我建议您不要将图像放入数据库,而只存储文件路径。我不会详细解释它,因为之前已经说过的比我在这里所能说的要好。
我希望您考虑这个答案: Storing Images in DB - Yea or Nay?
并且可能会阅读詹姆斯·汉密尔顿的这篇可爱的文章:https://perspectives.mvdirona.com/2008/06/facebook-needle-in-a-haystack-efficient-storage-of-billions-of-photos/
此外,这篇文章对我很有帮助,因为它解释了 flickr.com 是如何扩展的。 http://highscalability.com/flickr-architecture
我知道在没有捕获链接本质的情况下抛出链接不是一个好习惯。但本质可以归结为:不要将图像存储在数据库中。
您可以考虑将其用于图像表:
CREATE TABLE IMAGE(
id int(10) unsigned not null auto_increment,
image_location varchar(255),
//some more
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
我将其保留为 varchar,但如果您的路径长度超过 255,或者路径中的字符将被多字节编码,则您可能需要将其更改为某种形式的文本格式,因为这将也从 255 中减去。
关于Mysql IMAGE表设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51380729/