我有一个视频数据库。每个视频可以有多个类别,因此我有一个数据透视表,可以将类别和视频连接在一起。
问题是video_category数据透视表有4769325行,我认为这对于这么简单的事情来说是巨大的。
有没有更好的方法来存储视频和类别之间的关系,仍然可以通过它们进行查询?它是Postgresql DB的RoR应用程序。
答案 0 :(得分:0)
我不明白你的问题。 Afaik,PIVOT
用于将行转换为列。
所以基本上你的视频和类别之间的多对多关系应该是这样的:
|*fk_vidID*|**fk_cateID**|
--------------------------
| videoID1 | categoryID1 |
| videoID1 | categoryID5 |
| videoID3 | categoryID5 |
| videoID4 | categoryID2 |
但是如果你在类别表上使用PIVOT
,那么应该只有与视频一样多的行,因为视频的所有现有类别都会被分组到一行。
出于性能目的,我认为没有任何其他方法可以在SQL中表示多对多关系。
如果您的数据库开始运行缓慢,您将不得不处理自己的查询以加快速度。您可能还需要对索引字段做出明智的选择:一种不错的方法是在查询中查看哪些字段在WHERE
语句中使用最多,并将其设置为索引字段。