MySQL表设计的思考
2018-09-12 本文已影响0人
昙花未现
多分类图片识别的项目背景,用户上传包含多个目录的压缩包形成数据集,压缩包中的子目录作为图片分类,机器学习根据用户选择的图片分类作为训练集和验证集,使用训练集进行模型训练,使用验证集进行模型验证,如果验证结果符合用户需求,用户可以发布模型,通过发布的模型来识别上传的图片。
场景1:多分类图片识别的项目,图片验证集验证的结果是一个分类矩阵,矩阵中每个元素是该分类被预测成其他分类的图片数量。
场景1设计:把矩阵中的每个元素看做表中的一行数据,每个元素有分类名,预测分类名和预测数量三个属性。所以表结构是id, category_name, forest_category_name, count, gmt_create, gmt_modified五列。
场景2:多分类图片识别的项目,每个用户可以上传图片压缩包,压缩包对应数据集,压缩包中的目录对应图片分类,目录中的图片对应实际的图片。图片存储的量很大,同一用户或者不同用户上传的图片有很大的几率存在重复。
场景2设计:重复的图片如果重复存,会浪费不必要的空间。所以图片表需要设计成一个公共字典表,表结构是id, name, url, gmt_create, gmt_modified五列。考虑存在图片和图片分类关联表,关联表的记录会很庞大,所以图片和图片分类表的关联关系由图片分类表用一个字段来维护,可以是数组类型,也可以是varchar类型,存放该分类下的图片ID,这样可以去掉关联表,减少数据库资源使用。随着时间推移图片表会越来越大,需要分表处理。