如何在db中存储许多图像

时间:2013-01-02 13:18:51

标签: php mysql

我想知道我是否要为每个用户存储图像,我是否必须为数据库中的每个图像创建一个字段?让我们假设每个用户都可以上传10张图片是否意味着我必须在数据库中创建像imagname 1,imagname 2等字段?

7 个答案:

答案 0 :(得分:7)

当然不是。这不是关系数据库的使用方式。而是使用两个表:一个用于用户,一个用于图像。在images表中,使用列在users表中存储用户id。这样,您可以根据需要为每个用户存储任意数量的图像,并且可以使用连接查询来查询所有图像。

这样的事情:

CREATE TABLE users (
  user_id int(11) auto_increment NOT NULL PRIMARY KEY,
  name VARCHAR(1024) NOT NULL
);


CREATE TABLE images (
  img_id int(11) auto_increment NOT NULL PRIMARY KEY,
  user_id int(11) NOT NULL,
  image blob
);

现在,您可以使用以下内容获取用户图像列表:SELECT img_id FROM images LEFT JOIN users ON (images.user_id=users.user_id) WHERE users.name='some one';

答案 1 :(得分:3)

在像MySQL这样的关系数据库系统中,您将有两个表:usersusers_images。对于每个图像,用户使用图像的文件名和用户的ID作为外键将INSERT记录上传到users_images表中。

如果需要限制用户只能上传10张图片,那么此逻辑属于您的应用程序。

答案 2 :(得分:1)

更好的是,您要为要查询的表列添加索引(它可以加快大型数据表的性能)。您需要插入具有唯一ID的图像并将其标记给用户。

如果您计划为每个用户添加多个图像,那么最好拥有图像,用户和用户图像表。

对于demo of normalized table schema

答案 3 :(得分:1)

Table User
------------------------------
User Id  |  User Name |  Image 
------------------------------
    1    | Example    | image id (for default image)
------------------------------

Table Images (With User Id as FK)
-----------------------------------------
Image Id  |  User Id (FK) |  Image name 
-----------------------------------------
    1     |   1           |  imagename
-----------------------------------------

在表格用户中,您可以将1张图像保存为默认配置文件图像,将其他图像保存在图像表格中。

答案 4 :(得分:0)

没有。添加用户的唯一ID,以便图像与此ID相关联,稍后当您执行查询时,只需选择具有用户ID =的内容

的图像

答案 5 :(得分:0)

您需要了解规范化的工作原理。在您的情况下,用户与图像有一个1- *的关系。所以你可以设计两个表 1.用户 2.Image表,userID引用User表中的userID

答案 6 :(得分:0)

绝对没有。你必须有两个表,你必须使用外键的东西。如果您使用的是mysql,请记得将两个表都更改为InnoDB引擎。一个表应该引用另一个具有id的表,并且这些id的所有数据类型必须与第一个表和第二个表相同。看一下@arkascha给出的例子,这是一个非常好的例子,它可以帮助你。