首页  >  问答  >  正文

仅新条目:更新最近添加的字段

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

即,如果单元代码在提供的主题之间发生变化,我希望单元代码能够反映创建单元课程时的准确代码。

这是我的表格

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  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

P粉148782096P粉148782096181 天前402

全部回复(1)我来回复

  • P粉463840170

    P粉4638401702024-04-03 16:16:54

    有两种可能的方法:

    1. 在 UnitsOffering 中创建新记录时,将 UnitCode 值物理写入记录(在新列中),而不是通过 FK 链接到 Units 表中的值
    2. 重新设计单位表,使其保存历史记录,例如所有更改都被视为插入,而不是更新,并且每个记录都有开始/结束日期(或用于识别记录何时为当前版本的某种其他机制)。然后需要有逻辑来确保将正确的值写入 UnitsOffering.UOUnits

    回复
    0
  • 取消回复