还有另一种方法可以处理表格中的利基标志吗?

Is there another way to deal with niche flags in tables?

假设您有一个 table meal,您已经在您的应用程序中使用了很多年。你一直都是用这个table来上菜的。但是现在您需要能够在(可选)制作之前制作膳食草稿。因此,您将新的布尔列 draft 添加到 meal table;由于用户尚未确认他们想要制作此特定餐点,因此不会提供这些餐点。所以它们只需要在草稿对话框中可用,而不是在其他任何地方。

需要保留草稿,因为用户可能会关闭对话框并希望稍后返回预览。

实际的用餐服务仍然是您申请的backbone。所以现在您需要更新所有查询以检查此标志是否为假。这是很多工作,您必须非常小心,因为忘记一个查询可能会变成一个非常微妙的错误。

您或许可以复制 meal table 创建并创建一个名为 draft_meal 的新 table,但这是您应用程序中的核心 table (与许多其他 table 相关)并且您必须定期更新 meal 以添加新列等内容。

还有其他方法可以解决这个问题吗?有没有办法处理“污染”整个应用程序的利基标志?

您可以在添加新列时将现有 table 的名称更改为类似 meal_master 的名称。然后创建一个像这样的视图:

CREATE OR REPLACE VIEW meal AS
SELECT col, col, ... 
  FROM meal_master
 WHERE draft = 0

这种方法允许您在添加新功能时保持现有代码的运行。您可以在现有服务风险较小的情况下上线。

您仍然应该重构所有内容以使用新的 table;你不必一蹴而就。

确保 draft 的默认值为 0。

您了解到数据比使用它的代码的寿命更长。