仅更新新条目的字段

Update field for new entries only

我正在尝试找出一种方法来更新任何新单位产品的单位代码,但保留已创建的单位产品的原始单位代码。

即如果单位代码在提供主题的年份之间发生变化,我希望单位代码反映创建单位产品时的准确代码。

这是我的表格

CREATE TABLE Units (
    UnitsID                 INT(10) AUTO_INCREMENT,
    UnitsName               VARCHAR(255) NOT NULL,
    UnitsCode               VARCHAR(20) NOT NULL UNIQUE,
    PRIMARY KEY (UnitsID)
);

CREATE TABLE UnitsOffering (
    UOfferingID             INT(10) AUTO_INCREMENT,
    UOUnits                 INT(10) NOT NULL, 
    YIIntake                VARCHAR(255) NOT NULL,
    YIYear                  INT(4) NOT NULL,  
    PRIMARY KEY             (UOfferingID),
    FOREIGN KEY             (UOUnits) REFERENCES Units(UnitsID)
);

我可以用我当前的存储过程更新它,但是当我列出单位产品和单位详细信息时,它反映了新的单位代码,而不是创建产品时数据库中的代码。

CREATE PROCEDURE UpdateUnit(IN vUnitsID VARCHAR (255), IN vUnitsCode VARCHAR (20))
BEGIN
UPDATE Units 
SET UnitsCode = vUnitsCode
WHERE UnitsID = vUnitsID;
 END;

这是我在创建列表时使用的 select 语句。

SELECT  O.UOfferingID, U.UnitsCode, U.UnitsName, O.YIIntake, O.YIYear
        FROM (UnitsOffering O
        INNER JOIN Units U
        ON  O.UOUnits = U.UnitsID)
        ORDER BY O.UOfferingID; 

我不确定这是否真的可以做到。如果可以,我不确定我的表设置方式、我的更新语句或我的列表语句是否有问题。

如有任何帮助,我们将不胜感激。我试图查看一些文档以了解如何完成此操作,但我找不到合适的关键字。

下面是我希望能够列出的示例。对于此示例,如果 2021 年结束后单位代码发生变化,我希望它显示的内容。

COS10000 - Introduction to Programming - Semester 2 2021
INF30011 - Database Implementation -  Semester 1 2022
COS10059 - Introduction to Programming  - Semester 2 2022

有两种可能的方法:

  1. 在 UnitsOffering 中创建新记录时,将 UnitCode 值物理写入记录(在新列中),而不是通过 FK
  2. 链接到 Units table 中的值
  3. 重新设计单位 table 以便它保存历史记录,例如所有更改都被视为插入,而不是更新,并且每条记录都有 start/end 日期(或其他一些机制来识别记录何时是当前版本)。然后需要逻辑来确保将正确的值写入 UnitsOffering.UOUnits