ruby-on-rails 添加一堆列而不是创建一个连接表的缺点是什么?[已关闭]

iecba09b  于 2023-03-20  发布在  Ruby
关注(0)|答案(1)|浏览(84)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

5天前关闭。
Improve this question
这是一个关于不同数据模型利弊的一般性问题。
我正在创建一个网站,其中列出了许多公园。用户可以搜索和过滤找到公园的标准,如免费/付费,它属于哪个公园系统,它在哪个地区,等等。
我想添加更多的过滤器,可能多达100个不同的过滤器选项。我可以简单地为每个过滤器添加一个新的列吗?例如,“露营”,“罗马遗址”,“海滩”,“阴凉”,“野餐桌”,“轻松步行”等。
我读到过添加标签的最佳实践是创建一个连接表,但是我尝试过这种方法,现在遇到了一些问题,我想用所有过滤器之间的AND关系来查询,所以我想简单地重做数据模型,在parks表(postgres DB)中给予每个标签一个自己的列。
这样做的潜在缺点是什么?
(Note所有过滤器选项都是我预定义的,用户不能创建新标签。)

yebdmbv4

yebdmbv41#

正如您已经阅读过的最佳实践一样,这是因为如果您使用“列”方法,可能会在几种情况下遇到问题。
当您在这种情况下使用列时,可能会有许多记录中的一些或许多列是无用的,因为它们只是坐在您的DB中占用空间。
另外,考虑这样一种场景:数据库中的数据增加到一定程度,这将使在该表上的搜索非常慢。
还有其他(可扩展性)问题,以及您将面临的道路上,有时我们意识到它太晚,我们甚至不能改变我们的方法了考虑到所有的相关变化和数据量,我们必须迁移。
基本上,从我阅读你的帖子所了解的,当你可以选择一个更简单的方法时,你只是在为未来的开发者(包括你自己)制造复杂的事情。
我建议使用像ActsAsTaggableOn这样的gem或类似的工具,它允许您轻松地创建标记(仅在需要时),并根据您提供的标记获取/过滤记录。

相关问题