搜尋

首頁  >  問答  >  主體

僅新條目:更新最近新增的字段

我正在嘗試找到一種方法,能夠更新任何新單位產品的單位代碼,但保留已建立的單位產品的原始單位代碼。

即,如果單元程式碼在提供的主題之間發生變化,我希望單元程式碼能夠反映建立單元課程時的準確程式碼。

這是我的表格

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粉148782096230 天前467

全部回覆(1)我來回復

  • P粉463840170

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

    有兩種可能的方法:

    1. 在 UnitsOffering 中建立新記錄時,將 UnitCode 值物理寫入記錄(在新列中),而不是透過 FK 連結到 Units 表中的值
    2. 重新設計單位表,使其保存歷史記錄,例如所有更改都被視為插入,而不是更新,並且每個記錄都有開始/結束日期(或用於識別記錄何時為當前版本的某種其他機制)。然後需要有邏輯來確保將正確的值寫入 UnitsOffering.UOUnits

    回覆
    0
  • 取消回覆