3

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

4

7 回答 7

8

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

所以是这样的:

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

于 2013-01-02T13:21:26.220 回答
3

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

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

于 2013-01-02T13:22:05.763 回答
1

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

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

有关规范化表模式的演示

于 2013-01-02T13:24:10.547 回答
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 张图像保存为默认配置文件图像,其他图像可以保存在图像表格中。

于 2013-01-02T13:27:23.650 回答
0

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

于 2013-01-02T13:21:52.893 回答
0

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

于 2013-01-02T13:24:55.257 回答
0

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

于 2013-02-07T08:14:53.863 回答