Каков наилучший способ установить список данных на тот же идентификатор таблицы? - PullRequest
1 голос
/ 18 марта 2020

Я постараюсь показать вам проблему, с которой я сталкиваюсь, чтобы вы могли понять, как я дошел до этой точки.

Это был мой начальный дБ:

enter image description here

Идея состояла в том, чтобы позволить одному пользователю обновить стоимость продукта. Это работало нормально, хотя, как это, я не могу записывать каждое обновление, которое сделал пользователь, потому что, если этот пользователь обновляет тот же продукт снова, он просто перезапишет последнее обновление и не запишет в последнем, как предполагалось. Это имело место, потому что идентификаторы пользователя и продукта совпадали в двух обновлениях. Поэтому я попытался добавить еще одну таблицу только для записи обновлений, например так:

enter image description here

Хотя проблема состоит. Нужно ли создавать еще одно отношение многие ко многим, один конец которого будет user_product, или есть более элегантный способ решения такой проблемы?

1 Ответ

1 голос
/ 18 марта 2020

вам нужна только «историческая» таблица, которая ссылается на

productID и изменения, сделанные с помощью отметки времени, и если больше пользователей могут изменять продукт, а также ID пользователя, в качестве Id у вас есть автоинкремент

Когда вы хотите узнать последние изменения, вы выбираете все строки для этого продукта и сортируете его по отметке времени. Или только по цене

как

history_products 

id
product_id 
alcohol
amount
mass
name
picture
price
timecreated

И используете выбор как

SELECT price,timecreated FROM history_products WHERE product_id = 10000 ORDER by timecreated;

Вы можете вставить автоматически с помощью триггера

DELIMITER $$

CREATE TRIGGER afterupdateproduct
    AFTER UPDATE
    ON products FOR EACH ROW
BEGIN
    INSERT INTO history_products (product_id,alcohol,amount,mass,name,picture, price,timecreated) 
    VALUES (OLD.alcohol,OLD.amount,OLD.mass,OLD.name,OLD.picture, OLD.price, Now());
END$$    

DELIMITER ;
...