首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql图像表设计

Mysql图像表设计
EN

Stack Overflow用户
提问于 2018-07-17 11:53:42
回答 2查看 4.8K关注 0票数 0

我是一个设计数据库的新手,我需要一个关于图片表格的帮助。

代码语言:javascript
复制
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;

我想要创建一个图像表,但我还没有找到一个正确的方法。

  • 一个产品可能有更多的图像。
  • 每个类别和语言都有一个形象。
  • 我想要一个弹性图像表,我可以在网站和应用程序中使用它。
  • 我可能需要一个不同大小的图像

所以我设计了这样的东西

代码语言:javascript
复制
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;

我是否应该保留一定大小的图片,然后在我的应用程序或网站中调整图片的大小?

EN

回答 2

Stack Overflow用户

发布于 2018-07-17 11:57:56

把图像放进数据库并不安全,我不明白你为什么要这么做.

代码语言:javascript
复制
create table imagetest (
    image_id        tinyint(3)  not null default '0',
    image_type      varchar(25) not null default '',
    image           blob        not null,
    image_size      varchar(25) not null default '',
    image_ctgy      varchar(25) not null default '',
    image_name      varchar(50) not null default ''
);
Then you can write an image to the database like:
$imgData = file_get_contents($filename);
$size = getimagesize($filename);
mysql_connect("localhost", "$username", "$password");
mysql_select_db ("$dbname");
$sql = "INSERT INTO testblob
    ( image_id , image_type ,image, image_size, image_name)
    VALUES
    ('', '{$size['mime']}', '{$imgData}', '{$size[3]}', 
     '{$_FILES['userfile']['name']}')";
mysql_query($sql);
You can display an image from the database in a web page with:
$link = mysql_connect("localhost", "username", "password");
mysql_select_db("testblob");
$sql = "SELECT image FROM testblob WHERE image_id=0";
$result = mysql_query("$sql");
header("Content-type: image/jpeg");
echo mysql_result($result, 0);
mysql_close($link);
票数 0
EN

Stack Overflow用户

发布于 2018-07-17 12:10:59

我建议您不要将图像放入数据库,而只存储文件路径。我不会长篇大论地解释这件事,因为以前我已经说得比我在这里更好了。

我希望你考虑一下这个答案:Storing Images in DB - Yea or Nay?

并可能阅读这篇由James:https://perspectives.mvdirona.com/2008/06/facebook-needle-in-a-haystack-efficient-storage-of-billions-of-photos/撰写的可爱文章。

此外,这篇文章确实帮助了我,因为它解释了flickr.com如何缩放。http://highscalability.com/flickr-architecture

我知道在没有捕捉到链接的本质的情况下抛出链接并不是很好的练习。但本质归结为:不要将图像存储在db中。

您可以在映像表中考虑这一点:

代码语言:javascript
复制
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中减去。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51380729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档