我有一个表,我存储用户上传的文件.可以有5种不同的文件类型:个人资料图片,cpr文件,学位文件,视频文件,背景检查文件.
表结构是这样的:
file_id, user_id, file_type, file_size, file_name, file_new_name, file_path, file_cat, date_created
Run Code Online (Sandbox Code Playgroud)
我的问题:
file_cat = "profile_picture" and user_id=:user_id.这会给系统带来很大的负担吗?insert into ... VALUES ... on duplicate key update在表单中使用隐藏值吗?先感谢您.
这是三个问题而不是一个问题.
这种结构有效还是我应该创建5个不同的表?
一张桌子就够了
如果我想更新,让我们说用户个人资料图片行,那么最好的方法是什么呢?---我想出了一个可能不是最好的解决方案 - 我更新了file_cat ="profile_picture"和user_id =:user_id的行.这会给系统带来很大的负担吗?
如果你有file_cat索引,user_id(两个字段上的复合索引).如果你想让事情变得更精简,你可以存储常量而不是'profile_picture'等.例如
profile_picture = 1
cpr = 2
....
background = 6
Run Code Online (Sandbox Code Playgroud)
这会使表和索引变小.它可能会使查询稍快一些.
首先,当用户注册时,他没有任何文件.我是否应该将用户插入... VALUES ...重复密钥更新,并在表单中使用隐藏值?
没必要.没有新用户的记录实际上使事情变得更容易.您可以执行COUNT(*) = 0查询或更好的EXISTS查询,而无需获取行并检查它们.
更新:当您处理JOIN或子查询时,这些EXISTS查询非常有用,例如快速查找用户是否已上传个人资料picc
SELECT * from users WHERE exists (SELECT * from pictures where pictures.user_id = users.id)
Run Code Online (Sandbox Code Playgroud)