Laravel / Eloquent查询效率:是否应该为这两列使用单独的表?

问题描述 投票:0回答:1

我正在制作一个Laravel短篇小说共享应用程序,我对如何构建一些内容有疑问:

假设我有一个故事表,每个故事允许最多2个类型应用于它。现在我将这些类型直接存储在“genre_primary”和“genre_secondary”列的每个故事行中。我最初这样做,所以我不必使用Story模型和流派模型之间的关系。我认为它可能更有效率。

但!我已经学会了使用预先加载和Laravel Debugbar来跟踪查询,并且正在使用它来大大减少查询,同时在主要文件中抓取故事作者的副行(使用with('author')模型中的Story从中检索作者)故事检索时的User表,消除了每个故事中显示的附加作者查询的n + 1问题)。

与作者姓名一样,我还在Feed中的故事卡上显示故事的主要和次要类型。我现在想知道我是否应该将这些类型保持为故事行的两列,或者提取Genre模型,关联StoryGenre模型,并急切加载它们像作者名称?

我想我的担心是在加载一个更大的时间表来处理一个类型过滤的近期故事或故事时的效率?这似乎只是选择故事,其中genre_primary ='神秘'比渴望加载与单独的Genre模型的关系更有效?在这种情况下,反规范化可以吗?或者我只是过度思考这个......

php mysql laravel eloquent eager-loading
1个回答
1
投票

看来你预先优化了。

为你做任何最简单的事情来看你的想法。在您当前的规模(我假设是“原型阶段”),加入第二个表或在单个模型上有两个额外列之间的差异可以忽略不计。

有人说,在Laravel创建一个多对多的关系是非常容易的,分离你的Generes的额外灵活性可能会让你受益,因为你正在充实你的概念。

© www.soinside.com 2019 - 2024. All rights reserved.