Phi*_*lds 21 mysql sql postgresql
好的,所以几乎每个基于数据库的应用程序都必须处理"非活动"记录.软删除或标记为"被忽略".我很好奇是否对"活动"列(或状态列)有任何激进的替代想法.
例如,如果我有一个人员列表
CREATE TABLE people (
id INTEGER PRIMARY KEY,
name VARCHAR(100),
active BOOLEAN,
...
);
Run Code Online (Sandbox Code Playgroud)
这意味着要获得活跃人员列表,您需要使用
SELECT * FROM people WHERE active=True;
Run Code Online (Sandbox Code Playgroud)
有没有人建议将非活动记录移到一个单独的表中,并且在哪个合适的UNION完成加入这两个?
好奇心引人注目......
编辑: 我应该说清楚,我是从纯粹的角度来看待这个问题.我可以看到数据归档对于大量数据可能是必要的,但这不是我来自的地方.如果你做一个SELECT*FROM人,那对我来说这些条目在某种意义上是"活跃的"是有意义的
谢谢
Mik*_*ter 21
您在活动标志上对表进行分区,以便活动记录位于一个分区中,而非活动记录位于另一个分区中.然后为每个表创建一个活动视图,该视图会自动在其上显示活动过滤器.数据库查询引擎自动将查询限制在其中包含活动记录的分区,这比甚至在该标志上使用索引要快得多.
以下是如何在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)
);
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以将每个分区放在不同的表空间中.您也可以对索引进行分区.
顺便说一句,这似乎是这个问题的重复,作为一个我需要问的新手,处理意外重复的程序是什么?
编辑:根据评论中的要求,提供了在Oracle中创建分区表的示例
| 归档时间: |
|
| 查看次数: |
25335 次 |
| 最近记录: |