数据库设计 - 存储不同的资产(相同的表与差异表)

时间:2015-07-29 20:34:11

标签: ruby-on-rails postgresql

我很好奇是否有一种在数据库中存储资产的首选方法,即文件的路径(如果重要的话我将使用postgres)。我将有PDF,视频和音频文件。

我应该创建一个表并且有一个'type'字段,还是创建一个pdfs表,视频表和音频表更有意义?

由于

1 个答案:

答案 0 :(得分:1)

在设计数据库方面,这是一个非常常见的问题,而且没有一个适合所有人的答案。这实际上取决于两个设置中的哪一个对您最有用。或者,哪种设置会导致最少问题。

逻辑上,您是否希望以不同方式处理每种资源?或者您是否期望将它们视为同类型物品的微妙变体?例如,您的数据模型中是否存在涉及一种特定类型的关系或约束(例如,resumes.pdf_file_id将专门用于PDF文件,并且可能是mp3将不会非常有用)。如果是的话,我会选择单独的表格。

另一方面,如果您希望能够看到用户上传的所有附件,那么查询单个表格最简单,例如SELECT * FROM attachments WHERE user_id=?,而不是处理从三个单独的表中选择。

但是有中间选择。您可以拥有单独的表,但将它们全部链接到存储S3 URL的attachments表。或者您可以使用数据库级继承将它们视为单独的和统一的表(此解决方案通常似乎完美,但我不推荐它)。最终,最好的选择取决于您的使用案例。