好的,所以几乎每个基于数据库的应用程序都必须处理"非活动"记录.软删除或标记为"被忽略".我很好奇是否对"活动"列(或状态列)有任何激进的替代想法.
例如,如果我有一个人员列表
CREATE TABLE people ( id INTEGER PRIMARY KEY, name VARCHAR(100), active BOOLEAN, ... );
这意味着要获得活跃人员列表,您需要使用
SELECT * FROM people WHERE active=True;
有没有人建议将非活动记录移到一个单独的表中,并且在哪个合适的UNION完成加入这两个?
好奇心引人注目......
编辑: 我应该说清楚,我是从纯粹的角度来看待这个问题.我可以看到数据归档对于大量数据可能是必要的,但这不是我来自的地方.如果你做一个SELECT*FROM人,那对我来说这些条目在某种意义上是"活跃的"是有意义的
谢谢
您在活动标志上对表进行分区,以便活动记录位于一个分区中,而非活动记录位于另一个分区中.然后为每个表创建一个活动视图,该视图会自动在其上显示活动过滤器.数据库查询引擎自动将查询限制在其中包含活动记录的分区,这比甚至在该标志上使用索引要快得多.
以下是如何在Oracle中创建分区表的示例.Oracle没有布尔列类型,所以我为Oracle目的修改了表结构.
CREATE TABLE people ( id NUMBER(10), name VARCHAR2(100), active NUMBER(1) ) PARTITION BY LIST(active) ( PARTITION active_records VALUES (0) PARTITION inactive_records VALUES (1) );
如果您愿意,可以将每个分区放在不同的表空间中.您也可以对索引进行分区.
顺便说一句,这似乎是这个问题的重复,作为一个我需要问的新手,处理意外重复的程序是什么?
编辑:根据评论中的要求,提供了在Oracle中创建分区表的示例
好吧,为了确保您在大多数情况下只绘制活动记录,您可以创建仅包含活动记录的视图.这样就不容易忽略活动部分.