mysql - 如何存储旧数据,这是正确的方法吗?
问题描述
问题:存储带有日期的 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 的时间戳原因:太贵了
解决方案
从价格变化表开始,因为这是您真正需要的:
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;
推荐阅读
- c# - 如何仅使用 c# Web 浏览器加载 html
- r - 在 fviz_cluster 中更改椭圆线类型
- c# - 网站基于 URL 重定向到安装在 Windows Server IIS 和较新的 Azure App 服务中的应用程序
- javascript - Diffie-Hellman 算法的参数
- wordpress - 在 WooCommerce 中初始化 jQuery UI Datepicker 插件
- angularjs - `的ng模型
- express - 使用 Nginx 代理将子域指向节点快速自定义路由
- ios - iOS Keychain - kSecClassGenericPassword 和 kSecClassInternetPassword 有什么区别?
- git - Git恢复bitbucket中的灰色提交
- java - actionListener 没有在窗口的“关闭重新打开”时被调用