Django最佳做法-迁移数据

时间:2018-07-25 03:57:14

标签: django

我有一个表,其中包含必须由用户填写的数据。填充完此数据后,状态将变为“已完成”(状态是数据内部的一个字段)。

我的问题是,为要完成的数据创建一个表并为另一个具有完成的数据的表创建一个好习惯吗?或者我应该只用两种数据类型创建一个表,并按状态区分?

2 个答案:

答案 0 :(得分:1)

不仅仅是Django

这实际上是一个很好的通用问题,不一定特定于Django。但是Django通过轻松使用链接表(ForeignKey,ManyToMany)是一个表的好用例。

一个表或一组表

一张桌子有一些优点:

  • 无需复制数据,只需更改“状态”字段即可。
  • 如果有链接表,则不需要复制它们
  • 如果您要删除原始数据(即避免保留冗余数据),那么就不必担心删除链接的数据(并按正确的顺序删除它)。
  • 如果原始添加和状态更改可能是通过不同的过程完成的,那么一张表会更安全-即,将字段标记为“完成”两次是无害的,但是尝试第二次删除/添加会导致很多问题。

“或表组”是这里的关键。 Django能够很好地处理链接表,因此,使用两个单独链接表组来完成所有这些操作会很麻烦,并且在更改字段或数据结构时很容易忘记事情。

答案 1 :(得分:1)

一个表是处理此特定情况的最佳方法。两个表要求您在应用程序中强制数据完整性和一致性,而不是依赖数据库的功能,这通常是一个非常糟糕的主意。

您应该旨在规范数据库(在合理范围内)并尽可能利用数据库的内置约束,以避免错误数据,包括重复,冗余和其他不一致。

Here's a good write-up关于几个常见的数据库实现问题。数字4很好地涵盖了您的2桌选项。


如果您确实坚持使用两个表(请不要使用),那么至少请确保使用人工主键(即:唯一的值,不仅是id),以保持完整性。每个表中可能有匹配的id整数值匹配,但两个表之间每个人工主键值的版本都应该只有一个版本。同样,这不是推荐的方法,它增加了您原本不需要的应用程序复杂性。