我想知道我是否要为每个用户存储图像,我是否必须为数据库中的每个图像创建一个字段?让我们假设每个用户都可以上传10张图片是否意味着我必须在数据库中创建像imagname 1,imagname 2等字段?
答案 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这样的关系数据库系统中,您将有两个表:users
和users_images
。对于每个图像,用户使用图像的文件名和用户的ID作为外键将INSERT
记录上传到users_images
表中。
如果需要限制用户只能上传10张图片,那么此逻辑属于您的应用程序。
答案 2 :(得分:1)
更好的是,您要为要查询的表列添加索引(它可以加快大型数据表的性能)。您需要插入具有唯一ID的图像并将其标记给用户。
如果您计划为每个用户添加多个图像,那么最好拥有图像,用户和用户图像表。
答案 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给出的例子,这是一个非常好的例子,它可以帮助你。