首页 > 解决方案 > 如何存储旧数据,这是正确的方法吗?

问题描述

问题:存储带有日期的 start_price。价格可以多次更改,并且还应该存储价格更改的原因。

除了制作价格变化表之外,我想不出其他方法吗?

CREATE TABLE price (
    start_price decimal(4,2) NOT NULL,
    price_date timestamp,
    PRIMARY KEY (start_price, price_date)
);

CREATE TABLE pricechange (
    start_price decimal(4,2) NOT NULL,
    new_price decimal(4,2) NOT NULL,
    price_date date NOT NULL,
    reason varchar(100),
    FOREIGN KEY (start_price, price_date)
    REFERENCES price(start_price, price_date)
);

我在 pricechange 表中收到错误,我也不知道如何实际使用 sql 将价格从 price 存储到 pricechange 并将新价格存储为价格。

例如 price = 100。newprice = 50 原因:太贵了。应该看起来像:

价格表:current_price:50 price_date:价格创建的时间戳

pricechange:start_price:100 new_price:50 date:pricechange 的时间戳原因:太贵了

标签: mysqlsqldatabase-design

解决方案


从价格变化表开始,因为这是您真正需要的:

create table price_changes (
    price_change_id int auto_increment primary key,
    start_price decimal(4,2) NOT NULL,
    new_price decimal(4,2) NOT NULL,
    price_date date NOT NULL,
    reason varchar(100)
);

您只需在此表中插入新价格。

current_prices然后,您可以使用触发器维护表。或者,如果您愿意,可以查看以下视图:

create view price_date, current_price as
    select pc.new_price as price
    from price_changes pc
    order by change_date desc
    limit 1;

推荐阅读