问题:存储带有日期的 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并将新价格存储为价格。
例如价格= 100。新价格= 50 原因:太贵了。应该看起来像:
价格表: 当前价格:50 Price_date:价格创建的时间戳
价格变化: 起始价格:100 新价格:50 日期:价格变化的时间戳 原因:太贵
最佳答案
使用包含 price
、 effective_from
和 reason
列的单个表怎么样?然后,您可以使用一个 View 来显示current_prices
,使用一点狡猾!
CREATE TABLE product_prices (
product_id int NOT NULL
, effective_date datetime NOT NULL DEFAULT Current_Timestamp
, price decimal(4,2) NOT NULL
, reason varchar(400) NOT NULL
, CONSTRAINT pk_product_prices PRIMARY KEY (product_id, effective_date)
, CONSTRAINT fk_product_prices_products FOREIGN KEY (product_id) REFERENCES products (product_id)
);
CREATE VIEW current_product_prices
AS
SELECT product_prices.product_id
, product_prices.price
FROM product_prices
INNER
JOIN (
SELECT product_id
, Max(effective_date) AS max_effectve_date
FROM product_prices
WHERE effective_date <= Current_Timestamp
GROUP
BY product_id
) AS current_price_date
ON current_price_date.product_id = product_prices.product_id
AND current_price_date.max_effectve_date = product_prices.effective_date
;
这是空中代码(即概念性的且未经测试的),因为我现在不可以运行 MySQL。
...但它应该具有说明性(足够)!
关于mysql - 如何存储旧数据,这是正确的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56257765/