【发布时间】:2021-10-26 22:23:08
【问题描述】:
我有一张桌子,我正在努力弄清楚如何最好地构建它。它应该包含一堆文件的元数据,对于每个文件,我们都有以下信息:
- 文件名
- 文件大小
- 上次修改
- md5(有时)
我希望唯一键位于 md5,但如果 md5 是 NULL,我希望它回退到 filename+filesize。是的,文件名+文件大小不是完美匹配,但根据我所做的分析,它的准确率约为 99.9%,而且对于超过 24 个字符的文件名,准确率几乎为 100%。
存储此密钥的最佳方式是什么?我应该添加一个应用生成的列(或触发器?)类似于:
COALESCE(md5, CONCAT(filename, filesize))
或者这种“多键”的事情在实践中通常是如何完成的?
【问题讨论】:
-
md5 是从哪里来的,你能手动创建缺失值并在缺失时添加插入吗?
-
@Stu 不,这是资产的 md5——我通常无权访问该文件,有时我可以,但文件很大,需要很长时间才能生成(~100GB 视频)。
-
出于性能原因,我会坚持使用一个主键。我遇到了复合键的问题,包括空值。
-
@RaphaelPICCOLO 你建议怎么做?触发器?在插入之前的应用程序中?等
-
我认为要给出有用的答案,您应该详细说明您的应用程序。当您尝试插入一条已经存在 md5 的新记录时会发生什么?这不可能发生;或者如果文件名和大小不同,则替换记录?你给个错误?忽略操作?类似地插入 md5 为空的记录。
标签: mysql sql database-design primary-key