当前位置:  开发笔记 > 编程语言 > 正文

"活跃"旗帜与否?

如何解决《"活跃"旗帜与否?》经验,为你挑选了2个好方法。

好的,所以几乎每个基于数据库的应用程序都必须处理"非活动"记录.软删除或标记为"被忽略".我很好奇是否对"活动"列(或状态列)有任何激进的替代想法.

例如,如果我有一个人员列表

CREATE TABLE people (
  id       INTEGER PRIMARY KEY,
  name     VARCHAR(100),
  active   BOOLEAN,
  ...
);

这意味着要获得活跃人员列表,您需要使用

SELECT * FROM people WHERE active=True;

有没有人建议将非活动记录移到一个单独的表中,并且在哪个合适的UNION完成加入这两个?

好奇心引人注目......

编辑: 我应该说清楚,我是从纯粹的角度来看待这个问题.我可以看到数据归档对于大量数据可能是必要的,但这不是我来自的地方.如果你做一个SELECT*FROM人,那对我来说这些条目在某种意义上是"活跃的"是有意义的

谢谢



1> Mike McAllis..:

您在活动标志上对表进行分区,以便活动记录位于一个分区中,而非活动记录位于另一个分区中.然后为每个表创建一个活动视图,该视图会自动在其上显示活动过滤器.数据库查询引擎自动将查询限制在其中包含活动记录的分区,这比甚至在该标志上使用索引要快得多.

以下是如何在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中创建分区表的示例


根据要求,添加了分区表的示例.有关表和索引分区的详细信息,请查看Oracle的Concepts手册.我使用Oracle 10.2,并参考此处的所有文档 - > http://www.oracle.com/pls/db102/homepage

2> Kibbee..:

好吧,为了确保您在大多数情况下只绘制活动记录,您可以创建仅包含活动记录的视图.这样就不容易忽略活动部分.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有