这里的要求是存储历史日志。
为简单起见,我将假设这个示例场景,我们在我们的网站上销售一些产品,我们需要保留销售员每天销售的每种产品的销售记录。销售员和产品的数量是已知且恒定的。
现在,假设我们有 3 种产品在售,笔记本电脑、咖啡杯和笔。
这里我有这张表来记录今天的销售记录(实时记录,将全天更新)
CREATE TABLE IF NOT EXISTS sales_record (
id SERIAL,
salesman_id INT NOT NULL,
sold_laptop INT NOT NULL,
sold_mugs INT NOT NULL,
sold_pen INT NOT NULL,
PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)
另一个表来保存旧数据的记录
CREATE TABLE IF NOT EXISTS sales_record_log (
id SERIAL,
salesman_id INT NOT NULL,
sold_laptop INT NOT NULL,
sold_mugs INT NOT NULL,
sold_pen INT NOT NULL,
record_for_day TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)
启动并运行它后,我们需要做的就是不断更新记录集并为每次销售将适当的列增加 1。
我们在此设置中遇到的问题是,必须在每天结束时将数据从实时表移动到另一个表并从实时表中刷新 …
我正在为附属网络规划架构。对于所有分层查询,我都使用 Postgrestablefunc
扩展,但这是另一个问题。
任何用户最多只能推荐 3 个其他用户。
所以例如我有这样的用户关系:
CREATE TABLE users
(
id serial NOT NULL,
referred_by integer NOT NULL,
created_at time without time zone NOT NULL,
updated_at time without time zone NOT NULL,
CONSTRAINT primary_key PRIMARY KEY (id),
CONSTRAINT referred_foreign FOREIGN KEY (referred_by)
REFERENCES users (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
Run Code Online (Sandbox Code Playgroud)
我可以使用connectby
函数来查询任何层次结构。但是当涉及到插入相关模型时,我必须检查用户在插入任何新用户之前是否还没有推荐其他 3 个用户。如果他已经有 3 个用户,那么它需要将树级联起来并将其作为树的叶节点,这对于在更大的层次结构上运行是进一步的繁重查询。
用于将新用户级联到叶节点是否可以确定可以放置新用户的最近节点?例如如果这是表中的数据:
____________ A ___________
/ | \
__ B __ __ C __ ____ D ____
/ …
Run Code Online (Sandbox Code Playgroud)