我想知道我是否为每个用户存储图像,我应该为每个图像在数据库中创建一个字段吗?假设每个用户将被允许上传 10 张图片,这是否意味着我必须在数据库中创建 imagname 1 、 imagname 2 等字段?
7 回答
当然不是。这不是关系数据库的使用方式。而是使用两张表:一张用于用户,一张用于图像。在 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';
在像 MySQL 这样的关系数据库系统中,您将有两个表:users
和users_images
. 对于用户上传的每张图片,INSERT
在表中都有一条记录users_images
,其中图片的文件名和用户的 ID 作为外键。
如果需要限制用户只能上传 10 张图片且不能更多,则此逻辑属于您的应用程序。
更好的是,您可以为要查询的表列添加索引(它可以加快处理大型数据表的性能)。您需要插入具有唯一 ID 的图像并将其标记给用户。
如果您计划为每个用户添加多个图像,最好有一个图像、用户和用户图像表。
有关规范化表模式的演示。
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 张图像保存为默认配置文件图像,其他图像可以保存在图像表格中。
否。添加用户的唯一 ID,以便图像与此 ID 相关联,稍后当您进行查询时,只需选择具有用户 ID = 某物的图像
您需要了解标准化的工作原理。在您的情况下,用户与图像具有 1-* 关系。所以你可以设计两个表 1. User 2.Image 表 userID 指 User 表中的 userID
绝对没有 。您必须有两个必须使用外键的表。如果您使用 mysql,请记住将两个表都更改为 InnoDB 引擎。一个表应该引用另一个具有 id 的表,并且这些 id 的所有数据类型必须与第一个表和第二个表相同。看看@arkascha 给出的例子,这是一个很好的例子,它应该可以帮助你。