好的,因此实际上每个基于数据库的应用程序都必须处理“非活动”记录。软删除或将某些内容标记为“要忽略”。我对“活动”列(或状态列)上是否有任何激进的替代想法感到好奇。
例如,如果我有一个人名单
CREATE TABLE people ( id INTEGER PRIMARY KEY, name VARCHAR(100), active BOOLEAN, ... );
这意味着要获得活跃人群的列表,您需要使用
SELECT * FROM people WHERE active=True;
有谁建议将非活动记录移到单独的表中,并在适当的位置将UNION合并为两个表?
好奇心惊人…
编辑: 我应该明确地说,我是从纯粹主义者的角度出发的。我可以看到对于大量数据可能需要进行数据归档,但这不是我要从哪里来的。如果您执行SELECT * FROM people,那么对我来说,这些条目在某种意义上是“活动的”
谢谢
您在活动标志上对表进行分区,以使活动记录位于一个分区中,而非活动记录位于另一分区中。然后,为每个自动创建活动过滤器的表创建一个活动视图。数据库查询引擎自动将查询限制在其中具有活动记录的分区,这比在该标志上使用索引要快得多。
这是如何在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中创建分区表的示例