布尔属性或新表(Django + PostgreSQL)

时间:2019-03-12 11:52:05

标签: django database postgresql

情况:我有一套书本。图书可以是以下类型之一:“测试”,“高级”和“普通”。数据比例:2%,15%,83%。每个时间单位的查询量(百分比):40%,20%,40%

我看到了一些解决数据库中问题的方法:

  1. 布尔值:is_test,is_premium。如果我们只需要“测试”书:Book.objects.filter(is_test=True)。例如,它可以是代理模型。比喻高级图书;
  2. 单独的表格:books_test,books_premium,books_common。
  3. 选择字段:['Test', 'Premium', 'Common']中的字符串;
  4. 组合1和2:books_test表和具有'is_premium'属性的books表。

我们需要最佳地查询此数据!所有这三种Book变体都需要一页。现有查询集组合:仅测试,仅通用,通用+高级,仅高级。

  • 如果我们使用1,3个变体:1个具有特定过滤器的端点;
  • 如果我们使用2个变体:没有过滤器的树端点之一(前端应知道使用哪种端点)。或者,我们可以创建一个具有某些条件的端点并通过后端进行检查。无论如何:需要扩展逻辑;

哪种方法更正确?为什么?

1 个答案:

答案 0 :(得分:0)

如果您需要在一页上混合使用不同的类型,则没有充分的理由,单独的模型/表会使事情复杂化。将两个以上的互斥状态映射到布尔字段的组合也是如此。

这将为您提供一个选择字段或一个包含选择的单独BookType模型。