gpt4 book ai didi

sql - `active' 标志与否?

转载 作者:IT老高 更新时间:2023-10-28 23:49:37 25 4
gpt4 key购买 nike

好的,所以实际上每个基于数据库的应用程序都必须处理“非事件”记录。无论是软删除还是将某些内容标记为“被忽略”。我很好奇在“事件”列(或状态列)上是否有任何激进的替代想法。

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

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

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

SELECT * FROM people WHERE active=True;

是否有人建议将非事件记录移到单独的表中,并在哪里进行适当的 UNION 以加入两者?

好奇心惊人...

编辑:我应该说清楚,我是从纯粹主义者的角度来看的。我可以看到对于大量数据可能需要数据归档,但这不是我的出发点。如果您执行 SELECT * FROM people ,我认为这些条目在某种意义上是“活跃的”

谢谢

最佳答案

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

这是一个如何在 Oracle 中创建分区表的示例。 Oracle 没有 bool 列类型,所以我修改了您的表结构以供 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)
);

如果您愿意,可以将每个分区放在不同的表空间中。您也可以对索引进行分区。

顺便说一句,这似乎是 this 的重复。问题,作为一个新手我需要问一下,处理意外重复的程序是什么?

编辑:根据评论中的要求,提供了在 Oracle 中创建分区表的示例

关于sql - `active' 标志与否?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/102278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com