我有一个应用程序,用户可以上传媒体:歌曲,视频,照片。我在想一个称为媒介的STI。歌曲,视频和照片继承自Medium。
或者我应该将歌曲,视频和照片作为单独的类/模型?
我也有一个评论模型。如果我使用STI方法,那么Comment模型只需要medium_id作为FK。
如果我选择单独的课程,那么我的评论模型必须是多态的。我猜两种方法都有效。但是哪一个应该更多地考虑另一个呢?第二,有什么优势吗?
答案 0 :(得分:1)
当您有多个要求在捕获的数据,演示文稿的上下文和关系方面有很多重叠时,您可能希望使用STI。你的例子就是其中之一。
我发现当您处理经常聚合并呈现为可互换的多个事物时,STI通常更容易管理。例如,最近上传的“媒体”列表将包含您的所有类型,并可根据需要进行排序或过滤。
在Comment类上建立多态关系也是很常见的,因此可以对任何内容进行评论。唯一的缺点是多态关系在数据库级别上更难加入和验证,所以它们总是会慢一点。
更加数据库友好的方法是使注释充当树或列表,然后让您的媒体模型belong_to
成为根,占位符注释,并将实际注释内容传入子项。