我想知道我是否为每个用户存储图像,我应该在数据库中为每个图像创建一个字段?假设每个用户允许上传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这样的关系数据库系统中,您将有两个表:users
和users_images
。对于用户上传的每个图像,INSERT
在users_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给出的例子,这是一个很好的例子,它应该对你有所帮助。