django - 使用带有 JSON 的文本字段而不是 ForeignKey 关系?
问题描述
我正在开发一个用户可以掷骰子池的项目。例如,一个骰子池是一个掷骰子,有 3 个红色骰子、2 个蓝色骰子和 1 个绿色骰子。一个池由几个骰子掷骰和修改器组成。
我以这种方式连接了 3 个模型:
class DicePool(models.Model):
# some relevant fields
class DiceRoll(models.Model):
pool = models.ForeignKey(DicePool, on_delete=models.CASCADE)
# plus a few more information fields with the type of die used, result, etc
class Modifier(models.Model):
pool = models.ForeignKey(DicePool, on_delete=models.CASCADE)
# plus about 4 more information fields
现在,当我加载DicePool
历史记录时,我需要同时预取DiceRoll
和Modifier
。
我现在正在考虑用Modifier
包含一些 JSON 的文本字段替换模型DicePool
。只是为了减少数据库查询的数量。
使用 json 文本字段而不是数据库关系是否常见?
还是我认为这是错误的,每次加载池时对 prefetch_related 进行额外查询是完全正常的?
我个人发现使用 ForeignKey 清洁器,如果需要,它可以让我对数据进行 db-wise 更改。但是我的代码进行了太多的数据库查询,我试图看看我可以在哪里改进它。
仅供参考:我正在使用 MySQL
解决方案
使用 JSON 文本字段而不是数据库关系是否常见?
我不这么认为。另外,我不认为这是可取的,因为(尤其是使用不支持 JSONField 之类的 MySQL)你最终会得到一个文本,然后你需要以某种方式将其解析为 dict,然后查找你想要的东西想。
就个人而言(我认为大多数人)会坚持 FK 关系。此外,通过做prefetch_related
orselect_related
你已经避免了不必要的查询。
推荐阅读
- python - 我将如何遍历并将用户的输入存储到 neo4j 内的决策树中?
- powerbi - Power BI - 未找到表的列 'Column1' 错误
- c# - 在右侧追加二维数组
- postgresql - 在 Ubuntu 中更新 Postgresql 时,系统未使用 systemd 错误启动
- c - 使用 MPI 的数字 1 到 1000 的总和
- flutter - Flutter : 我想在你点击图片的时候换一张图片,其他的不受点击的影响
- java - 如何优化java中的计数排序?
- css - Reactjs / Material-UI:className 在 ToggleButton 组件上不起作用
- webpack - 由于异步 Object.build 中的 webpack 错误,构建失败
- visual-studio - 使用版本号重命名设置输出