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

Laravel/Eloquent query efficiency: Should a separate table be used for these two columns?

我正在制作一个 Laravel 短篇小说分享应用程序,我有一个关于我应该如何构建一些东西的问题:

假设我有一个 table 故事,每个故事最多可以应用 2 种类型。现在,我将这些类型直接存储在每个故事行的 'genre_primary' 和 'genre_secondary' 列中。我最初这样做是为了不必在 Story 模型和 Genre 模型之间使用关系。我认为它可能更有效。

但是!我已经了解了如何使用预先加载和 Laravel 调试栏来跟踪查询,并且正在使用它来大大减少查询,同时在主提要中获取故事作者的署名(使用 with('author') Story 模型在故事检索时从 User table 检索作者,消除了提要中显示的每个故事的额外作者查询的 n+1 问题。

与作者姓名一样,我还在动态中的故事卡片上显示了故事的主要和次要流派。我现在想知道我是否应该将流派作为两列嵌入到故事行中,或者提取一个 Genre 模型,关联 StoryGenre 模型,并像作者姓名?

我想我担心的是加载更大的近期故事时间轴或按类型过滤的故事时的效率?似乎只选择 genre_primary = 'Mystery' 的故事比急切地将关系加载到单独的 Genre 模型更有效?在这种情况下可以反规范化吗?还是我想多了...

您似乎在进行预优化。

现在就做对您来说最简单的事情来实现您的想法。在您当前的规模下(我假设是 "prototype phase"),加入第二个 table 或在单个模型上有两个额外的列之间的区别可以忽略不计。

话虽这么说,在 Laravel 中创建多对多关系非常容易,并且在您充实概念时,分离您的 Generes 的额外灵活性可能会使您受益。