如何在数据库中存储许多图像


How to store many images in db

我想知道我是否为每个用户存储图像,我应该在数据库中为每个图像创建一个字段?假设每个用户允许上传10张图片这是否意味着我必须在数据库中创建imagname 1 imagname 2等字段?

当然不是。这不是关系数据库的使用方式。而是使用两个表:一个用于用户,一个用于图像。在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';

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

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

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
-----------------------------------------

在Table User中,您可以将1张图片保存为默认配置文件图像,其他可以保存在images表中

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

如果您计划为每个用户添加多个图像,最好有images、users和user-images表。

No。添加唯一的用户id,这样图像就会与这个id相关联然后查询时选择user id = something

的图像

您需要了解规范化是如何工作的。在您的例子中,User与Image的关系是1-*。所以你可以设计两个表1. 用户2.userID引用用户表中的userID的图像表

绝对不行。你必须有两个表,你必须使用外键。如果你用的是mysql,记得把两个表都改成InnoDB引擎。一个表应该使用id引用另一个表,并且这些id的所有数据类型必须与第一个表和第二个表相同。看看@arkascha给出的例子,这是一个很好的例子,它应该对你有所帮助。